diff --git a/Assets/Scripts/Fsr2Controller.cs b/Assets/Scripts/Fsr2Controller.cs index 1e9db84..4c01a65 100644 --- a/Assets/Scripts/Fsr2Controller.cs +++ b/Assets/Scripts/Fsr2Controller.cs @@ -41,9 +41,8 @@ namespace FidelityFX private bool _prevGenReactiveMask; private CommandBuffer _dispatchCommandBuffer; - private CommandBuffer _opaqueOnlyCommandBuffer; + private CommandBuffer _opaqueInputCommandBuffer; private CommandBuffer _inputsCommandBuffer; - private CommandBuffer _cleanupCommandBuffer; private void OnEnable() { @@ -64,23 +63,19 @@ namespace FidelityFX _dispatchCommandBuffer = new CommandBuffer { name = "FSR2 Dispatch" }; // Create command buffers to bind the camera's output at the right moments in the render loop - _opaqueOnlyCommandBuffer = new CommandBuffer { name = "FSR2 Opaque Input" }; - _opaqueOnlyCommandBuffer.GetTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly, _renderSize.x, _renderSize.y, 0, default, RenderTextureFormat.ARGBHalf); - _opaqueOnlyCommandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, Fsr2Pipeline.SrvOpaqueOnly); + _opaqueInputCommandBuffer = new CommandBuffer { name = "FSR2 Opaque Input" }; + _opaqueInputCommandBuffer.GetTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly, _renderSize.x, _renderSize.y, 0, default, RenderTextureFormat.ARGBHalf); + _opaqueInputCommandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, Fsr2Pipeline.SrvOpaqueOnly); _inputsCommandBuffer = new CommandBuffer { name = "FSR2 Inputs" }; _inputsCommandBuffer.SetGlobalTexture(Fsr2Pipeline.SrvInputColor, BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Color); _inputsCommandBuffer.SetGlobalTexture(Fsr2Pipeline.SrvInputDepth, BuiltinRenderTextureType.CameraTarget, RenderTextureSubElement.Depth); _inputsCommandBuffer.SetGlobalTexture(Fsr2Pipeline.SrvInputMotionVectors, BuiltinRenderTextureType.MotionVectors); _renderCamera.AddCommandBuffer(CameraEvent.BeforeImageEffects, _inputsCommandBuffer); - - _cleanupCommandBuffer = new CommandBuffer { name = "FSR2 Cleanup" }; - _cleanupCommandBuffer.ReleaseTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly); if (generateReactiveMask) { - _renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueOnlyCommandBuffer); - _renderCamera.AddCommandBuffer(CameraEvent.AfterImageEffects, _cleanupCommandBuffer); + _renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer); } // Apply a mipmap bias so that textures retain their original sharpness @@ -97,11 +92,11 @@ namespace FidelityFX float biasOffset = Fsr2.GetMipmapBiasOffset(_renderSize.x, _prevDisplaySize.x); Fsr2.GlobalCallbacks.ApplyMipmapBias(-biasOffset); - if (_opaqueOnlyCommandBuffer != null) + if (_opaqueInputCommandBuffer != null) { - _renderCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueOnlyCommandBuffer); - _opaqueOnlyCommandBuffer.Release(); - _opaqueOnlyCommandBuffer = null; + _renderCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer); + _opaqueInputCommandBuffer.Release(); + _opaqueInputCommandBuffer = null; } if (_inputsCommandBuffer != null) @@ -111,13 +106,6 @@ namespace FidelityFX _inputsCommandBuffer = null; } - if (_cleanupCommandBuffer != null) - { - _renderCamera.RemoveCommandBuffer(CameraEvent.AfterImageEffects, _cleanupCommandBuffer); - _cleanupCommandBuffer.Release(); - _cleanupCommandBuffer = null; - } - if (_dispatchCommandBuffer != null) { _dispatchCommandBuffer.Release(); @@ -145,15 +133,9 @@ namespace FidelityFX if (generateReactiveMask != _prevGenReactiveMask) { if (generateReactiveMask) - { - _renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueOnlyCommandBuffer); - _renderCamera.AddCommandBuffer(CameraEvent.AfterImageEffects, _cleanupCommandBuffer); - } + _renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer); else - { - _renderCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueOnlyCommandBuffer); - _renderCamera.RemoveCommandBuffer(CameraEvent.AfterImageEffects, _cleanupCommandBuffer); - } + _renderCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer); _prevGenReactiveMask = generateReactiveMask; } @@ -219,6 +201,7 @@ namespace FidelityFX _genReactiveDescription.RenderSize = _renderSize; _dispatchCommandBuffer.GetTemporaryRT(Fsr2Pipeline.UavAutoReactive, _renderSize.x, _renderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true); _context.GenerateReactiveMask(_genReactiveDescription, _dispatchCommandBuffer); + _dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly); _dispatchDescription.Reactive = Fsr2Pipeline.UavAutoReactive; }