rsx: Minor fixups

- Fix texture cache blit behaviour when src has AA enabled and dst is a blit dst texture with or without AA
-- This requires handling AA resolve by removing a half downscale on multisampled axes

- Return all ones when a vertex attribute is disabled.
-- Some games forget to enable vertex attributes actually needed by the fs
This commit is contained in:
kd-11 2017-11-07 00:34:06 +03:00
parent 7b3e4f5e3d
commit ed21bb309f
2 changed files with 9 additions and 4 deletions

View file

@ -278,6 +278,8 @@ namespace glsl
OS << "vec4 read_location(int location)\n";
OS << "{\n";
OS << " attribute_desc desc = fetch_desc(location);\n";
OS << " //if attribute is disabled return 1 (makes all operations with it nop except add/sub - TODO)\n";
OS << " if (desc.attribute_size == 0) return vec4(1.);\n";
OS << "\n";
OS << " int vertex_id = " << vertex_id_name << " - int(vertex_base_index);\n";
OS << " if (desc.frequency == 0)\n";

View file

@ -1624,11 +1624,14 @@ namespace rsx
}
else
{
if (src_subres.w != dst.clip_width ||
src_subres.h != dst.clip_height)
if (!dst_is_render_target)
{
const int dst_width = (int)(src_subres.w * scale_x);
const int dst_height = (int)(src_subres.h * scale_y);
u16 src_subres_w = src_subres.w;
u16 src_subres_h = src_subres.h;
get_rsx_dimensions(src_subres_w, src_subres_h, src_subres.surface);
const int dst_width = (int)(src_subres_w * scale_x);
const int dst_height = (int)(src_subres_h * scale_y);
dst_area.x2 = dst_area.x1 + dst_width;
dst_area.y2 = dst_area.y1 + dst_height;