Skip to content

Commit

Permalink
rsx: Implement full color remap for the D24S8->ARGB8 converter
Browse files Browse the repository at this point in the history
  • Loading branch information
kd-11 committed Nov 8, 2019
1 parent 24fdd24 commit 63673b1
Showing 1 changed file with 30 additions and 19 deletions.
49 changes: 30 additions & 19 deletions rpcs3/Emu/RSX/Common/GLSLCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -625,33 +625,44 @@ namespace glsl
" return vec4(float(g)/255., float(b)/255., 1., float(r)/255.);\n"
"}\n\n"

"float read_value(const in vec4 src, const in uint remap_index)\n"
"vec4 remap_vector(const in vec4 color, const in uint remap)\n"
"{\n"
" switch (remap_index)\n"
" vec4 result;\n"
" if ((remap & 0xFF) == 0xE4)\n"
" {\n"
" case 0: return src.a;\n"
" case 1: return src.r;\n"
" case 2: return src.g;\n"
" case 3: return src.b;\n"
" result = color;\n"
" }\n"
" else\n"
" {\n"
" uvec4 remap_channel = uvec4(remap) >> uvec4(2, 4, 6, 0);\n"
" remap_channel &= 3;\n"
" remap_channel = (remap_channel + 3) % 4; // Map A-R-G-B to R-G-B-A\n\n"

" // Generate remapped result\n"
" result.a = color[remap_channel.a];\n"
" result.r = color[remap_channel.r];\n"
" result.g = color[remap_channel.g];\n"
" result.b = color[remap_channel.b];\n"
" }\n\n"

" if ((remap >> 8) == 0xAA)\n"
" return result;\n\n"

" uvec4 remap_select = uvec4(remap) >> uvec4(10, 12, 14, 8);\n"
" remap_select &= 3;\n"
" bvec4 choice = lessThan(remap_select, uvec4(2));\n"
" return _select(result, vec4(remap_select), choice);\n"
"}\n\n"

"vec4 texture2DReconstruct(sampler2D tex, usampler2D stencil_tex, const in vec2 coord, const in uint remap)\n"
"{\n"
" vec4 result = decode_depth24(texture(tex, coord.xy).r, remap >> 16);\n"
" result.z = float(texture(stencil_tex, coord.xy).x) / 255.f;\n"
" uint remap_vector = remap & 0xFF;\n"
" if (remap_vector == 0xE4) return result;\n\n"
" vec4 tmp;\n"
" uint remap_a = remap_vector & 0x3;\n"
" uint remap_r = (remap_vector >> 2) & 0x3;\n"
" uint remap_g = (remap_vector >> 4) & 0x3;\n"
" uint remap_b = (remap_vector >> 6) & 0x3;\n"
" tmp.a = read_value(result, remap_a);\n"
" tmp.r = read_value(result, remap_r);\n"
" tmp.g = read_value(result, remap_g);\n"
" tmp.b = read_value(result, remap_b);\n"
" return tmp;\n"
" result.z = float(texture(stencil_tex, coord.xy).x) / 255.f;\n\n"

" if (remap == 0xAAE4)\n"
" return result;\n\n"

" return remap_vector(result, remap);\n"
"}\n\n";
}

Expand Down

0 comments on commit 63673b1

Please sign in to comment.