Browse Source

Minor optimization: use half float types wherever the original GLSL code uses mediump floats.

sgsr2_fs
Nico de Poel 1 year ago
parent
commit
9bf6a12c97
  1. 8
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_convert.compute
  2. 4
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/2_pass_cs/sgsr2_upscale.compute
  3. 4
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_activate.compute
  4. 12
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_convert.compute
  5. 4
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/SGSR2/Shaders/3_pass_cs/sgsr2_upscale.compute

8
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); TEXTURE2D_X(InputColor) : register(t0);
TYPED_TEXTURE2D_X(float, InputDepth) : register(t1); TYPED_TEXTURE2D_X(float, InputDepth) : register(t1);
TYPED_TEXTURE2D_X(float2, InputVelocity) : register(t2); 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); RW_TEXTURE2D_X(uint, YCoCgColor) : register(u1);
CBUFFER_START(Params) CBUFFER_START(Params)
@ -36,7 +36,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID)
{ {
UNITY_XR_ASSIGN_VIEW_INDEX(gl_GlobalInvocationID.z); UNITY_XR_ASSIGN_VIEW_INDEX(gl_GlobalInvocationID.z);
float Exposure_co_rcp = preExposure;
half Exposure_co_rcp = preExposure;
float2 ViewportSizeInverse = displaySizeRcp.xy; float2 ViewportSizeInverse = displaySizeRcp.xy;
uint2 InputPos = gl_GlobalInvocationID.xy; uint2 InputPos = gl_GlobalInvocationID.xy;
@ -102,7 +102,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID)
} }
////////////compute luma ////////////compute luma
float3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz;
half3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz;
///simple tonemap ///simple tonemap
float ColorMax = max(max(Colorrgb.x, Colorrgb.y), Colorrgb.z) + Exposure_co_rcp; 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; 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; MotionDepthClipAlphaBuffer[COORD_TEXTURE2D_X(InputPos)] = v29;
} }

4
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(PrevHistoryOutput) : register(t0);
TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1); TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1);
TYPED_TEXTURE2D_X(uint, YCoCgColor) : register(t2); 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) CBUFFER_START(Params)
uint2 renderSize; uint2 renderSize;

4
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); 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); 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); RW_TEXTURE2D_X(uint, LumaHistory) : register(u1);
CBUFFER_START(Params) CBUFFER_START(Params)

12
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); TEXTURE2D_X(InputColor) : register(t1);
TYPED_TEXTURE2D_X(float, InputDepth) : register(t2); TYPED_TEXTURE2D_X(float, InputDepth) : register(t2);
TYPED_TEXTURE2D_X(float2, InputVelocity) : register(t3); 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); RW_TEXTURE2D_X(uint, YCoCgColor) : register(u1);
CBUFFER_START(Params) CBUFFER_START(Params)
@ -91,7 +91,7 @@ void CS(uint3 gl_GlobalInvocationID : SV_DispatchThreadID)
} }
////////////compute luma ////////////compute luma
float3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz;
half3 Colorrgb = LOAD_TEXTURE2D_X(InputColor, InputPos).xyz;
///simple tonemap ///simple tonemap
Colorrgb /= max(max(Colorrgb.x, Colorrgb.y), Colorrgb.z) + h0; 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 y11 = uint(Colorycocg.y * 2047.5);
uint z10 = uint(Colorycocg.z * 1023.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 ///simple tonemap
Colorprergb /= max(max(Colorprergb.x, Colorprergb.y), Colorprergb.z) + h0; 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; alpha_mask = (0.35f * 1000.0f) * alpha_mask;
YCoCgColor[COORD_TEXTURE2D_X(InputPos)] = ((x11 << 21u) | (y11 << 10u)) | z10; 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);
} }

4
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(PrevHistoryOutput) : register(t0);
TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1); TEXTURE2D_X(MotionDepthClipAlphaBuffer) : register(t1);
TYPED_TEXTURE2D_X(uint, YCoCgColor) : register(t2); 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) CBUFFER_START(Params)
uint2 renderSize; uint2 renderSize;

Loading…
Cancel
Save