From 9bf6a12c97e05c388075ee43b0558e840eacd7f8 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Sat, 21 Dec 2024 13:02:31 +0100 Subject: [PATCH] Minor optimization: use half float types wherever the original GLSL code uses mediump floats. --- .../SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute | 8 ++++---- .../SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute | 4 ++-- .../SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute | 4 ++-- .../SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute | 12 ++++++------ .../SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute index 8f076e7..a41837d 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute @@ -12,7 +12,7 @@ TEXTURE2D_X(InputColor) : register(t0); TYPED_TEXTURE2D_X(float, InputDepth) : register(t1); TYPED_TEXTURE2D_X(float2, InputVelocity) : register(t2); -RW_TEXTURE2D_X(float4, MotionDepthClipAlphaBuffer) : register(u0); +RW_TEXTURE2D_X(half4, MotionDepthClipAlphaBuffer) : register(u0); RW_TEXTURE2D_X(uint, YCoCgColor) : register(u1); CBUFFER_START(Params) @@ -36,7 +36,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID) { UNITY_XR_ASSIGN_VIEW_INDEX(gl_GlobalInvocationID.z); - float Exposure_co_rcp = preExposure; + half Exposure_co_rcp = preExposure; float2 ViewportSizeInverse = displaySizeRcp.xy; uint2 InputPos = gl_GlobalInvocationID.xy; @@ -102,7 +102,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID) } ////////////compute luma - float3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz; + half3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz; ///simple tonemap float ColorMax = max(max(Colorrgb.x, Colorrgb.y), Colorrgb.z) + Exposure_co_rcp; @@ -120,6 +120,6 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID) YCoCgColor[COORD_TEXTURE2D_X(InputPos)] = ((x11 << 21u) | (y11 << 10u)) | z10; - float4 v29 = float4(motion, depthclip, ColorMax); + half4 v29 = half4(motion, depthclip, ColorMax); MotionDepthClipAlphaBuffer[COORD_TEXTURE2D_X(InputPos)] = v29; } diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute index b4983ed..163af87 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute @@ -33,8 +33,8 @@ float3 DecodeColor(uint sample32) TEXTURE2D_X(PrevHistoryOutput) : register(t0); TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1); TYPED_TEXTURE2D_X(uint, YCoCgColor) : register(t2); -RW_TEXTURE2D_X(float4, SceneColorOutput) : register(u0); -RW_TEXTURE2D_X(float4, HistoryOutput) : register(u1); +RW_TEXTURE2D_X(half4, SceneColorOutput) : register(u0); +RW_TEXTURE2D_X(half4, HistoryOutput) : register(u1); CBUFFER_START(Params) uint2 renderSize; diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute index fd2c83d..2304fbd 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute @@ -29,9 +29,9 @@ float2 unpackHalf2x16(uint x) } TYPED_TEXTURE2D_X(uint, PrevLumaHistory) : register(t0); -TEXTURE2D_X(MotionDepthAlphaBuffer) : register(t1); +TYPED_TEXTURE2D_X(half4, MotionDepthAlphaBuffer) : register(t1); TYPED_TEXTURE2D_X(uint, YCoCgColor) : register(t2); -RW_TEXTURE2D_X(float4, MotionDepthClipAlphaBuffer) : register(u0); +RW_TEXTURE2D_X(half4, MotionDepthClipAlphaBuffer) : register(u0); RW_TEXTURE2D_X(uint, LumaHistory) : register(u1); CBUFFER_START(Params) diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute index 20ef3fd..2674a0c 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute @@ -13,7 +13,7 @@ TEXTURE2D_X(InputOpaqueColor) : register(t0); TEXTURE2D_X(InputColor) : register(t1); TYPED_TEXTURE2D_X(float, InputDepth) : register(t2); TYPED_TEXTURE2D_X(float2, InputVelocity) : register(t3); -RW_TEXTURE2D_X(float4, MotionDepthAlphaBuffer) : register(u0); +RW_TEXTURE2D_X(half4, MotionDepthAlphaBuffer) : register(u0); RW_TEXTURE2D_X(uint, YCoCgColor) : register(u1); CBUFFER_START(Params) @@ -91,7 +91,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID) } ////////////compute luma - float3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz; + half3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz; ///simple tonemap Colorrgb /= max(max(Colorrgb.x, Colorrgb.y), Colorrgb.z) + h0; @@ -106,14 +106,14 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID) uint y11 = uint(Colorycocg.y * 2047.5); uint z10 = uint(Colorycocg.z * 1023.5); - float3 Colorprergb = LOAD_TEXTURE2D_X(InputOpaqueColor, InputPos).xyz; + half3 Colorprergb = LOAD_TEXTURE2D_X(InputOpaqueColor, InputPos).xyz; ///simple tonemap Colorprergb /= max(max(Colorprergb.x, Colorprergb.y), Colorprergb.z) + h0; - float3 delta = abs(Colorrgb - Colorprergb); - float alpha_mask = max(delta.x, max(delta.y, delta.z)); + half3 delta = abs(Colorrgb - Colorprergb); + half alpha_mask = max(delta.x, max(delta.y, delta.z)); alpha_mask = (0.35f * 1000.0f) * alpha_mask; YCoCgColor[COORD_TEXTURE2D_X(InputPos)] = ((x11 << 21u) | (y11 << 10u)) | z10; - MotionDepthAlphaBuffer[COORD_TEXTURE2D_X(InputPos)] = float4(motion, NearestZ, alpha_mask); + MotionDepthAlphaBuffer[COORD_TEXTURE2D_X(InputPos)] = half4(motion, NearestZ, alpha_mask); } diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute index 2417c57..4bc64f4 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute @@ -33,8 +33,8 @@ float3 DecodeColor(uint sample32) TEXTURE2D_X(PrevHistoryOutput) : register(t0); TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1); TYPED_TEXTURE2D_X(uint, YCoCgColor) : register(t2); -RW_TEXTURE2D_X(float4, SceneColorOutput) : register(u0); -RW_TEXTURE2D_X(float4, HistoryOutput) : register(u1); +RW_TEXTURE2D_X(half4, SceneColorOutput) : register(u0); +RW_TEXTURE2D_X(half4, HistoryOutput) : register(u1); CBUFFER_START(Params) uint2 renderSize;