From 5dc27ed2753e8272d26dadd254588c882339e592 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Sun, 1 Oct 2023 19:38:33 +0100 Subject: [PATCH] GS/HW: Convert depth16->rgba16 shader to integer --- bin/resources/shaders/dx11/convert.fx | 3 +-- bin/resources/shaders/opengl/convert.glsl | 2 +- bin/resources/shaders/vulkan/convert.glsl | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/bin/resources/shaders/dx11/convert.fx b/bin/resources/shaders/dx11/convert.fx index 2ef42082e1..52ee5a6591 100644 --- a/bin/resources/shaders/dx11/convert.fx +++ b/bin/resources/shaders/dx11/convert.fx @@ -164,8 +164,7 @@ PS_OUTPUT ps_convert_float16_rgb5a1(PS_INPUT input) // Convert a FLOAT32 (only 16 lsb) depth into a RGB5A1 color texture uint d = uint(sample_c(input.t).r * exp2(32.0f)); - output.c = float4(uint4((d & 0x1Fu), ((d >> 5) & 0x1Fu), ((d >> 10) & 0x1Fu), (d >> 15) & 0x01u)) / float4(32.0f, 32.0f, 32.0f, 1.0f); - + output.c = float4(uint4(d << 3, d >> 2, d >> 7, d >> 8) & uint4(0xf8, 0xf8, 0xf8, 0x80)) / 255.0f; return output; } diff --git a/bin/resources/shaders/opengl/convert.glsl b/bin/resources/shaders/opengl/convert.glsl index 3e35dcb9c9..73928f25e6 100644 --- a/bin/resources/shaders/opengl/convert.glsl +++ b/bin/resources/shaders/opengl/convert.glsl @@ -122,7 +122,7 @@ void ps_convert_float16_rgb5a1() #else uint d = uint(sample_c().r * exp2(24.0f)); #endif - SV_Target0 = vec4(uvec4((d & 0x1Fu), ((d >> 5) & 0x1Fu), ((d >> 10) & 0x1Fu), (d >> 15) & 0x01u)) / vec4(32.0f, 32.0f, 32.0f, 1.0f); + SV_Target0 = vec4(uvec4(d << 3, d >> 2, d >> 7, d >> 8) & uvec4(0xf8, 0xf8, 0xf8, 0x80)) / 255.0f; } #endif diff --git a/bin/resources/shaders/vulkan/convert.glsl b/bin/resources/shaders/vulkan/convert.glsl index 832339a779..eac9cf0c40 100644 --- a/bin/resources/shaders/vulkan/convert.glsl +++ b/bin/resources/shaders/vulkan/convert.glsl @@ -142,7 +142,7 @@ void ps_convert_float16_rgb5a1() { // Convert a vec32 (only 16 lsb) depth into a RGB5A1 color texture uint d = uint(sample_c(v_tex).r * exp2(32.0f)); - o_col0 = vec4(uvec4((d & 0x1Fu), ((d >> 5) & 0x1Fu), ((d >> 10) & 0x1Fu), (d >> 15) & 0x01u)) / vec4(32.0f, 32.0f, 32.0f, 1.0f); + o_col0 = vec4(uvec4(d << 3, d >> 2, d >> 7, d >> 8) & uvec4(0xf8, 0xf8, 0xf8, 0x80)) / 255.0f; } #endif