mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 11:36:13 +00:00
rsx: Implement full color remap for the D24S8->ARGB8 converter
This commit is contained in:
parent
24fdd24808
commit
63673b1a9f
1 changed files with 30 additions and 19 deletions
|
@ -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";
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue