@ -18,10 +18,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System ;
using System.Runtime.InteropServices ;
using UnityEngine ;
using UnityEngine.Profiling ;
using UnityEngine.Rendering ;
namespace FidelityFX.FSR3
@ -31,53 +28,27 @@ namespace FidelityFX.FSR3
/// This loosely matches the FfxPipelineState struct from the original FSR3 codebase, wrapped in an object-oriented blanket.
/// These classes are responsible for loading compute shaders, managing temporary resources, binding resources to shader kernels and dispatching said shaders.
/// </summary>
internal abstract class Fsr3UpscalerPass : IDisposable
internal abstract class Fsr3UpscalerPass : FfxPassWithFlags < Fsr3Upscaler . DispatchDescription , Fsr3Upscaler . InitializationFlags >
{
protected readonly Fsr3Upscaler . ContextDescription ContextDescription ;
protected readonly Fsr3UpscalerResources Resources ;
protected readonly ComputeBuffer Constants ;
protected ComputeShader ComputeShader ;
protected int KernelIndex ;
protected CustomSampler Sampler ;
protected Fsr3UpscalerPass ( Fsr3Upscaler . ContextDescription contextDescription , Fsr3UpscalerResources resources , ComputeBuffer constants )
: base ( "FSR3 Upscaler" )
{
ContextDescription = contextDescription ;
Resources = resources ;
Constants = constants ;
}
public virtual void Dispose ( )
{
}
public void ScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY )
{
commandBuffer . BeginSample ( Sampler ) ;
DoScheduleDispatch ( commandBuffer , dispatchParams , frameIndex , dispatchX , dispatchY ) ;
commandBuffer . EndSample ( Sampler ) ;
}
protected abstract void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY ) ;
protected void InitComputeShader ( string passName , ComputeShader shader )
{
InitComputeShader ( passName , shader , ContextDescription . Flags ) ;
}
private void InitComputeShader ( string passName , ComputeShader shader , Fsr3Upscaler . InitializationFlags flags )
protected override void SetupShaderKeywords ( Fsr3Upscaler . InitializationFlags flags )
{
if ( shader = = null )
{
throw new MissingReferenceException ( $"Shader for FSR3 Upscaler pass '{passName}' could not be loaded! Please ensure it is included in the project correctly." ) ;
}
ComputeShader = shader ;
KernelIndex = ComputeShader . FindKernel ( "CS" ) ;
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+
if ( SystemInfo . computeSubGroupSize = = 6 4 )
@ -104,25 +75,21 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Prepare Inputs" , contextDescription . Shaders . prepareInputsPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var color = ref dispatchParams . Color ;
ref var depth = ref dispatchParams . Depth ;
ref var motionVectors = ref dispatchParams . MotionVectors ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , color . RenderTarget , color . MipLevel , color . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputDepth , depth . RenderTarget , depth . MipLevel , depth . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , motionVectors . RenderTarget , motionVectors . MipLevel , motionVectors . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , dispatchParams . Color ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputDepth , dispatchParams . Depth ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , dispatchParams . MotionVectors ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavDilatedMotionVectors , Resources . DilatedVelocity ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavDilatedDepth , Resources . DilatedDepth ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavReconstructedPrevNearestDepth , Resources . ReconstructedPrevNearestDepth ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavFarthestDepth , Fsr3ShaderIDs . UavIntermediate ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavCurrentLuma , Resources . Luma [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavCurrentLuma , Resources . Luma [ bu ffe rIndex] ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -138,24 +105,24 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Compute Luminance Pyramid" , contextDescription . Shaders . lumaPyramidPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ bu ffe rIndex] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvFarthestDepth , Fsr3ShaderIDs . UavIntermediate ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdAtomicCount , Resources . SpdAtomicCounter ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavFrameInfo , Resources . FrameInfo ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip0 , Resources . SpdMips , 0 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip1 , Resources . SpdMips , 1 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip2 , Resources . SpdMips , 2 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip3 , Resources . SpdMips , 3 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip4 , Resources . SpdMips , 4 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip5 , Resources . SpdMips , 5 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip0 , Resources . SpdMips , 0 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip1 , Resources . SpdMips , 1 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip2 , Resources . SpdMips , 2 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip3 , Resources . SpdMips , 3 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip4 , Resources . SpdMips , 4 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip5 , Resources . SpdMips , 5 ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbSpd , _spdConstants , 0 , Marshal . SizeOf < Fsr3Upscaler . SpdConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . SpdConstants > ( ComputeShader , Fsr3ShaderIDs . CbSpd , _spdConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -171,27 +138,25 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Compute Shading Change Pyramid" , contextDescription . Shaders . shadingChangePyramidPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var exposure = ref dispatchParams . Exposure ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPreviousLuma , Resources . Luma [ frameIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ bufferIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPreviousLuma , Resources . Luma [ bufferIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedMotionVectors , Resources . DilatedVelocity ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdAtomicCount , Resources . SpdAtomicCounter ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip0 , Resources . SpdMips , 0 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip1 , Resources . SpdMips , 1 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip2 , Resources . SpdMips , 2 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip3 , Resources . SpdMips , 3 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip4 , Resources . SpdMips , 4 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip5 , Resources . SpdMips , 5 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip0 , Resources . SpdMips , 0 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip1 , Resources . SpdMips , 1 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip2 , Resources . SpdMips , 2 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip3 , Resources . SpdMips , 3 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip4 , Resources . SpdMips , 4 ) ;
commandBuffer . SetComputeTextureMip Param ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavSpdMip5 , Resources . SpdMips , 5 ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbSpd , _spdConstants , 0 , Marshal . SizeOf < Fsr3Upscaler . SpdConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . SpdConstants > ( ComputeShader , Fsr3ShaderIDs . CbSpd , _spdConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -203,13 +168,13 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Compute Shading Change" , contextDescription . Shaders . shadingChangePass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvSpdMips , Resources . SpdMips ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -221,27 +186,23 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Prepare Reactivity" , contextDescription . Shaders . prepareReactivityPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var exposure = ref dispatchParams . Exposure ;
ref var reactive = ref dispatchParams . Reactive ;
ref var tac = ref dispatchParams . TransparencyAndComposition ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvReconstructedPrevNearestDepth , Resources . ReconstructedPrevNearestDepth ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedMotionVectors , Resources . DilatedVelocity ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedDepth , Resources . DilatedDepth ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvReactiveMask , reactive . RenderTarget , reactive . MipLevel , reactive . SubElement ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvTransparencyAndCompositionMask , tac . RenderTarget , tac . MipLevel , tac . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvAccumulation , Resources . Accumulation [ frame Index ^ 1 ] ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvReactiveMask , dispatchParams . Reactive ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvTransparencyAndCompositionMask , dispatchParams . TransparencyAndComposition ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvAccumulation , Resources . Accumulation [ bu ffe rIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvShadingChange , Fsr3ShaderIDs . UavShadingChange ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ frame Index ] ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ bu ffe rIndex] ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAccumulation , Resources . Accumulation [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAccumulation , Resources . Accumulation [ bu ffe rIndex] ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -253,24 +214,22 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Compute Luminance Instability" , contextDescription . Shaders . lumaInstabilityPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var exposure = ref dispatchParams . Exposure ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedReactiveMasks , Fsr3ShaderIDs . UavDilatedReactiveMasks ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedMotionVectors , Resources . DilatedVelocity ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvFrameInfo , Resources . FrameInfo ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvLumaHistory , Resources . LumaHistory [ frame Index ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvLumaHistory , Resources . LumaHistory [ bu ffe rIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvFarthestDepthMip1 , Fsr3ShaderIDs . UavFarthestDepthMip1 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ bu ffe rIndex] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavLumaHistory , Resources . LumaHistory [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavLumaHistory , Resources . LumaHistory [ bu ffe rIndex] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavLumaInstability , Fsr3ShaderIDs . UavIntermediate ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -291,7 +250,7 @@ namespace FidelityFX.FSR3
#endif
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
#if UNITY_2021_2_OR_NEWER
if ( dispatchParams . EnableSharpening )
@ -305,11 +264,7 @@ namespace FidelityFX.FSR3
commandBuffer . DisableShaderKeyword ( SharpeningKeyword ) ;
#endif
ref var color = ref dispatchParams . Color ;
ref var exposure = ref dispatchParams . Exposure ;
ref var output = ref dispatchParams . Output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedReactiveMasks , Fsr3ShaderIDs . UavDilatedReactiveMasks ) ;
if ( ( ContextDescription . Flags & Fsr3Upscaler . InitializationFlags . EnableDisplayResolutionMotionVectors ) = = 0 )
@ -318,23 +273,22 @@ namespace FidelityFX.FSR3
}
else
{
ref var motionVectors = ref dispatchParams . MotionVectors ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , motionVectors . RenderTarget , motionVectors . MipLevel , motionVectors . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , dispatchParams . MotionVectors ) ;
}
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInternalUpscaled , Resources . InternalUpscaled [ frame Index ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInternalUpscaled , Resources . InternalUpscaled [ bu ffe rIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvLanczosLut , Resources . LanczosLut ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvFarthestDepthMip1 , Fsr3ShaderIDs . UavFarthestDepthMip1 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvCurrentLuma , Resources . Luma [ bu ffe rIndex] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvLumaInstability , Fsr3ShaderIDs . UavIntermediate ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , color . RenderTarget , color . MipLevel , color . SubElement ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , dispatchParams . Color ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavInternalUpscaled , Resources . InternalUpscaled [ frame Index ] ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , output . RenderTarget , output . MipLevel , output . SubElemen t) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavInternalUpscaled , Resources . InternalUpscaled [ bu ffe rIndex] ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , dispatchParams . Outpu t) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -350,19 +304,17 @@ namespace FidelityFX.FSR3
InitComputeShader ( "RCAS Sharpening" , contextDescription . Shaders . sharpenPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var exposure = ref dispatchParams . Exposure ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvRcasInput , Resources . InternalUpscaled [ frameIndex ] ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvRcasInput , Resources . InternalUpscaled [ bufferIndex ] ) ;
ref var output = ref dispatchParams . Output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , dispatchParams . Output ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbRcas , _rcasConstants , 0 , Marshal . SizeOf < Fsr3Upscaler . RcasConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . RcasConstants > ( ComputeShader , Fsr3ShaderIDs . CbRcas , _rcasConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -378,7 +330,7 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Auto-Generate Reactive Mask" , contextDescription . Shaders . autoGenReactivePass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
}
@ -386,15 +338,11 @@ namespace FidelityFX.FSR3
{
commandBuffer . BeginSample ( Sampler ) ;
ref var opaqueOnly = ref dispatchParams . ColorOpaqueOnly ;
ref var color = ref dispatchParams . ColorPreUpscale ;
ref var reactive = ref dispatchParams . OutReactive ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvOpaqueOnly , dispatchParams . ColorOpaqueOnly ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , dispatchParams . ColorPreUpscale ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAutoReactive , dispatchParams . OutReactive ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvOpaqueOnly , opaqueOnly . RenderTarget , opaqueOnly . MipLevel , opaqueOnly . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , color . RenderTarget , color . MipLevel , color . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAutoReactive , reactive . RenderTarget , reactive . MipLevel , reactive . SubElement ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbGenReactive , _generateReactiveConstants , 0 , Marshal . SizeOf < Fsr3Upscaler . GenerateReactiveConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . GenerateReactiveConstants > ( ComputeShader , Fsr3ShaderIDs . CbGenReactive , _generateReactiveConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
@ -414,31 +362,25 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Auto-Generate Transparency & Composition Mask" , contextDescription . Shaders . tcrAutoGenPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var color = ref dispatchParams . Color ;
ref var motionVectors = ref dispatchParams . MotionVectors ;
ref var opaqueOnly = ref dispatchParams . ColorOpaqueOnly ;
ref var reactive = ref dispatchParams . Reactive ;
ref var tac = ref dispatchParams . TransparencyAndComposition ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvOpaqueOnly , opaqueOnly . RenderTarget , opaqueOnly . MipLevel , opaqueOnly . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , color . RenderTarget , color . MipLevel , color . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , motionVectors . RenderTarget , motionVectors . MipLevel , motionVectors . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPrevColorPreAlpha , Resources . PrevPreAlpha [ frameIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPrevColorPostAlpha , Resources . PrevPostAlpha [ frameIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvReactiveMask , reactive . RenderTarget , reactive . MipLevel , reactive . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvTransparencyAndCompositionMask , tac . RenderTarget , tac . MipLevel , tac . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvOpaqueOnly , dispatchParams . ColorOpaqueOnly ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputColor , dispatchParams . Color ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputMotionVectors , dispatchParams . MotionVectors ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPrevColorPreAlpha , Resources . PrevPreAlpha [ bufferIndex ^ 1 ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvPrevColorPostAlpha , Resources . PrevPostAlpha [ bufferIndex ^ 1 ] ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvReactiveMask , dispatchParams . Reactive ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvTransparencyAndCompositionMask , dispatchParams . TransparencyAndComposition ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAutoReactive , Resources . AutoReactive ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavAutoComposition , Resources . AutoComposition ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavPrevColorPreAlpha , Resources . PrevPreAlpha [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavPrevColorPostAlpha , Resources . PrevPostAlpha [ frame Index ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavPrevColorPreAlpha , Resources . PrevPreAlpha [ bufferIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavPrevColorPostAlpha , Resources . PrevPostAlpha [ bufferIndex ] ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbGenReactive , _tcrAutogenerateConstants , 0 , Marshal . SizeOf < Fsr3Upscaler . GenerateReactiveConstants2 > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . GenerateReactiveConstants2 > ( ComputeShader , Fsr3ShaderIDs . CbGenReactive , _tcrAutogenerateConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
@ -451,21 +393,19 @@ namespace FidelityFX.FSR3
InitComputeShader ( "Debug View" , contextDescription . Shaders . debugViewPass ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , Fsr3Upscaler . DispatchDescription dispatchParams , int frame Index , int dispatchX , int dispatchY )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in Fsr3Upscaler . DispatchDescription dispatchParams , int bu ffe rIndex, int dispatchX , int dispatchY , int dispatchZ )
{
ref var exposure = ref dispatchParams . Exposure ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedReactiveMasks , Fsr3ShaderIDs . UavDilatedReactiveMasks ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedMotionVectors , Resources . DilatedVelocity ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvDilatedDepth , Resources . DilatedDepth ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInternalUpscaled , Resources . InternalUpscaled [ frame Index ] ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , exposure . RenderTarget , exposure . MipLevel , exposure . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInternalUpscaled , Resources . InternalUpscaled [ bu ffe rIndex] ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . SrvInputExposure , dispatchParams . Exposure ) ;
ref var output = ref dispatchParams . Output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , Fsr3ShaderIDs . UavUpscaledOutput , dispatchParams . Output ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants , 0 , Marshal . SizeOf < Fsr3Upscaler . UpscalerConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < Fsr3Upscaler . UpscalerConstants > ( ComputeShader , Fsr3ShaderIDs . CbFsr3Upscaler , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , 1 ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
}
#endif