From cb42842275d3041a885119fe40ec533a99b07231 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Sun, 15 Dec 2024 12:40:13 +0100 Subject: [PATCH] Reorganized profiler sampling to work around issues in non-development builds on Unity 2020.x --- Runtime/FSR2/Fsr2Pass.cs | 25 +++++++++++++++++++------ Runtime/FSR3/Fsr3UpscalerPass.cs | 25 +++++++++++++++++++------ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Runtime/FSR2/Fsr2Pass.cs b/Runtime/FSR2/Fsr2Pass.cs index bda5092..94ef9e5 100644 --- a/Runtime/FSR2/Fsr2Pass.cs +++ b/Runtime/FSR2/Fsr2Pass.cs @@ -19,6 +19,7 @@ // THE SOFTWARE. using System; +using System.Diagnostics; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Profiling; @@ -42,7 +43,7 @@ namespace FidelityFX.FSR2 protected ComputeShader ComputeShader; protected int KernelIndex; - protected CustomSampler Sampler; + private CustomSampler _sampler; protected Fsr2Pass(Fsr2.ContextDescription contextDescription, Fsr2Resources resources, ComputeBuffer constants) { @@ -57,9 +58,9 @@ namespace FidelityFX.FSR2 public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { - commandBuffer.BeginSample(Sampler); + BeginSample(commandBuffer); DoScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchX, dispatchY); - commandBuffer.EndSample(Sampler); + EndSample(commandBuffer); } protected abstract void DoScheduleDispatch(CommandBuffer commandBuffer, Fsr2.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); @@ -78,7 +79,7 @@ namespace FidelityFX.FSR2 ComputeShader = shader; KernelIndex = ComputeShader.FindKernel("CS"); - Sampler = CustomSampler.Create(passName); + _sampler = CustomSampler.Create(passName); bool useLut = false; #if UNITY_2022_1_OR_NEWER // This will also work in 2020.3.43+ and 2021.3.14+ @@ -96,6 +97,18 @@ namespace FidelityFX.FSR2 if (useLut) ComputeShader.EnableKeyword("FFX_FSR2_OPTION_REPROJECT_USE_LANCZOS_TYPE"); if ((flags & Fsr2.InitializationFlags.EnableFP16Usage) != 0) ComputeShader.EnableKeyword("FFX_HALF"); } + + [Conditional("ENABLE_PROFILER")] + protected void BeginSample(CommandBuffer cmd) + { + cmd.BeginSample(_sampler); + } + + [Conditional("ENABLE_PROFILER")] + protected void EndSample(CommandBuffer cmd) + { + cmd.EndSample(_sampler); + } } internal class Fsr2ComputeLuminancePyramidPass : Fsr2Pass @@ -320,7 +333,7 @@ namespace FidelityFX.FSR2 public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr2.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) { - commandBuffer.BeginSample(Sampler); + BeginSample(commandBuffer); ref var opaqueOnly = ref dispatchParams.ColorOpaqueOnly; ref var color = ref dispatchParams.ColorPreUpscale; @@ -334,7 +347,7 @@ namespace FidelityFX.FSR2 commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); - commandBuffer.EndSample(Sampler); + EndSample(commandBuffer); } } diff --git a/Runtime/FSR3/Fsr3UpscalerPass.cs b/Runtime/FSR3/Fsr3UpscalerPass.cs index 3b76eb4..f60e1f6 100644 --- a/Runtime/FSR3/Fsr3UpscalerPass.cs +++ b/Runtime/FSR3/Fsr3UpscalerPass.cs @@ -19,6 +19,7 @@ // THE SOFTWARE. using System; +using System.Diagnostics; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.Profiling; @@ -40,7 +41,7 @@ namespace FidelityFX.FSR3 protected ComputeShader ComputeShader; protected int KernelIndex; - protected CustomSampler Sampler; + private CustomSampler _sampler; protected Fsr3UpscalerPass(Fsr3Upscaler.ContextDescription contextDescription, Fsr3UpscalerResources resources, ComputeBuffer constants) { @@ -55,9 +56,9 @@ namespace FidelityFX.FSR3 public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY) { - commandBuffer.BeginSample(Sampler); + BeginSample(commandBuffer); DoScheduleDispatch(commandBuffer, dispatchParams, frameIndex, dispatchX, dispatchY); - commandBuffer.EndSample(Sampler); + EndSample(commandBuffer); } protected abstract void DoScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.DispatchDescription dispatchParams, int frameIndex, int dispatchX, int dispatchY); @@ -76,7 +77,7 @@ namespace FidelityFX.FSR3 ComputeShader = shader; KernelIndex = ComputeShader.FindKernel("CS"); - Sampler = CustomSampler.Create(passName); + _sampler = CustomSampler.Create(passName); bool useLut = false; #if UNITY_2022_1_OR_NEWER // This will also work in 2020.3.43+ and 2021.3.14+ @@ -94,6 +95,18 @@ namespace FidelityFX.FSR3 if (useLut) ComputeShader.EnableKeyword("FFX_FSR3UPSCALER_OPTION_REPROJECT_USE_LANCZOS_TYPE"); if ((flags & Fsr3Upscaler.InitializationFlags.EnableFP16Usage) != 0) ComputeShader.EnableKeyword("FFX_HALF"); } + + [Conditional("ENABLE_PROFILER")] + protected void BeginSample(CommandBuffer cmd) + { + cmd.BeginSample(_sampler); + } + + [Conditional("ENABLE_PROFILER")] + protected void EndSample(CommandBuffer cmd) + { + cmd.EndSample(_sampler); + } } internal class Fsr3UpscalerPrepareInputsPass : Fsr3UpscalerPass @@ -384,7 +397,7 @@ namespace FidelityFX.FSR3 public void ScheduleDispatch(CommandBuffer commandBuffer, Fsr3Upscaler.GenerateReactiveDescription dispatchParams, int dispatchX, int dispatchY) { - commandBuffer.BeginSample(Sampler); + BeginSample(commandBuffer); ref var opaqueOnly = ref dispatchParams.ColorOpaqueOnly; ref var color = ref dispatchParams.ColorPreUpscale; @@ -398,7 +411,7 @@ namespace FidelityFX.FSR3 commandBuffer.DispatchCompute(ComputeShader, KernelIndex, dispatchX, dispatchY, 1); - commandBuffer.EndSample(Sampler); + EndSample(commandBuffer); } }