@ -1,74 +1,33 @@
using System ;
using System.Runtime.InteropServices ;
using UnityEngine ;
using UnityEngine.Profiling ;
using UnityEngine ;
using UnityEngine.Rendering ;
namespace FidelityFX.FrameGen
{
internal abstract class FrameInterpolationPass : IDisposable
internal abstract class FrameInterpolationPass : FfxPassWithFlags < FrameInterpolation . DispatchDescription , FrameInterpolation . InitializationFlags >
{
protected readonly FrameInterpolation . ContextDescription ContextDescription ;
protected readonly FrameInterpolationResources Resources ;
protected readonly ComputeBuffer Constants ;
protected ComputeShader ComputeShader ;
protected int KernelIndex ;
protected CustomSampler Sampler ;
protected FrameInterpolationPass ( FrameInterpolation . ContextDescription contextDescription , FrameInterpolationResources resources , ComputeBuffer constants )
: base ( "Frame Interpolation" )
{
ContextDescription = contextDescription ;
Resources = resources ;
Constants = constants ;
}
public virtual void Dispose ( )
{
}
public void ScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ = 1 )
{
commandBuffer . BeginSample ( Sampler ) ;
DoScheduleDispatch ( commandBuffer , dispatchParams , frameIndex , dispatchX , dispatchY , dispatchZ ) ;
commandBuffer . EndSample ( Sampler ) ;
}
protected abstract void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ ) ;
protected void InitComputeShader ( string passName , ComputeShader shader )
{
InitComputeShader ( passName , shader , ContextDescription . flags ) ;
}
private void InitComputeShader ( string passName , ComputeShader shader , FrameInterpolation . InitializationFlags flags )
protected override void SetupShaderKeywords ( FrameInterpolation . InitializationFlags flags )
{
if ( shader = = null )
{
throw new MissingReferenceException ( $"Shader for Frame Interpolation 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 ) ;
if ( ( flags & FrameInterpolation . InitializationFlags . EnableDisplayResolutionMotionVectors ) = = 0 ) ComputeShader . EnableKeyword ( "FFX_FRAMEINTERPOLATION_OPTION_LOW_RES_MOTION_VECTORS" ) ;
if ( ( flags & FrameInterpolation . InitializationFlags . EnableJitterMotionVectors ) ! = 0 ) ComputeShader . EnableKeyword ( "FFX_FRAMEINTERPOLATION_OPTION_JITTERED_MOTION_VECTORS" ) ;
if ( ( flags & FrameInterpolation . InitializationFlags . EnableDepthInverted ) ! = 0 ) ComputeShader . EnableKeyword ( "FFX_FRAMEINTERPOLATION_OPTION_INVERTED_DEPTH" ) ;
}
protected void BindCurrentInterpolationSource ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams )
{
ref var backBuf = ref dispatchParams . InterpolationSource ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , backBuf . RenderTarget , backBuf . MipLevel , backBuf . SubElement ) ;
}
protected void BindMipmap ( CommandBuffer commandBuffer , int nameID , RenderTexture renderTexture , int mipLevel )
{
mipLevel = Math . Min ( mipLevel , renderTexture . mipmapCount - 1 ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , nameID , renderTexture , mipLevel ) ;
}
}
internal class FrameInterpolationReconstructAndDilatePass : FrameInterpolationPass
@ -79,7 +38,7 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Reconstruct and Dilate" , contextDescription . shaders . reconstructAndDilate ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
}
@ -87,16 +46,14 @@ namespace FidelityFX.FrameGen
{
commandBuffer . BeginSample ( Sampler ) ;
ref var mvs = ref prepareParams . motionVectors ;
ref var depth = ref prepareParams . depth ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInputMotionVectors , mvs . RenderTarget , mvs . MipLevel , mvs . SubElement ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInputDepth , depth . RenderTarget , depth . MipLevel , depth . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInputMotionVectors , prepareParams . motionVectors ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInputDepth , prepareParams . depth ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavReconstructedDepthPreviousFrame , Resources . ReconstructedDepth [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavDilatedMotionVectors , Resources . DilatedMotionVectors [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavDilatedDepth , Resources . DilatedDepth [ frameIndex ] ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
@ -112,10 +69,9 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Setup" , contextDescription . shaders . setup ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
ref var scd = ref dispatchParams . opticalFlowSceneChangeDetection ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowSceneChangeDetection , scd . RenderTarget , scd . MipLevel , scd . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowSceneChangeDetection , dispatchParams . opticalFlowSceneChangeDetection ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
@ -124,7 +80,7 @@ namespace FidelityFX.FrameGen
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavDisocclusionMask , Resources . DisocclusionMask ) ;
commandBuffer . SetComputeBufferParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavCounters , Resources . Counters ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -138,15 +94,15 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Reconstruct Previous Depth" , contextDescription . shaders . reconstructPreviousDepth ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDilatedMotionVectors , Resources . DilatedMotionVectors [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDilatedDepth , Resources . DilatedDepth [ frameIndex ] ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavReconstructedDepthInterpolatedFrame , Resources . ReconstructedDepthInterpolatedFrame ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -160,17 +116,17 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Game Motion Vector Field" , contextDescription . shaders . gameMotionVectorField ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDilatedMotionVectors , Resources . DilatedMotionVectors [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDilatedDepth , Resources . DilatedDepth [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPreviousInterpolationSource , Resources . PreviousInterpolationSource ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -184,24 +140,22 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Optical Flow Vector Field" , contextDescription . shaders . opticalFlowVectorField ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
ref var ofVector = ref dispatchParams . opticalFlowVector ;
if ( dispatchParams . opticalFlowScale . x > 0f )
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowVector , ofVector . RenderTarget , ofVector . MipLevel , ofVector . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowVector , dispatchParams . opticalFlowVector ) ;
else
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowVector , BuiltinRenderTextureType . None ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowConfidence , BuiltinRenderTextureType . None ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDilatedDepth , Resources . DilatedDepth [ frameIndex ] ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPreviousInterpolationSource , Resources . PreviousInterpolationSource ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOpticalFlowMotionVectorFieldX , Resources . OpticalFlowMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOpticalFlowMotionVectorFieldY , Resources . OpticalFlowMotionVectorFieldY ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -215,7 +169,7 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Disocclusion Mask" , contextDescription . shaders . disocclusionMask ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
@ -226,7 +180,7 @@ namespace FidelityFX.FrameGen
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavDisocclusionMask , Resources . DisocclusionMask ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -240,22 +194,21 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Interpolation" , contextDescription . shaders . interpolation ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowMotionVectorFieldX , Resources . OpticalFlowMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowMotionVectorFieldY , Resources . OpticalFlowMotionVectorFieldY ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPreviousInterpolationSource , Resources . PreviousInterpolationSource ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDisocclusionMask , Resources . DisocclusionMask ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInpaintingPyramid , Resources . InpaintingPyramid ) ;
commandBuffer . SetComputeBufferParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCounters , Resources . Counters ) ;
ref var output = ref dispatchParams . output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , dispatchParams . output ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -273,22 +226,21 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Inpainting Pyramid" , contextDescription . shaders . inpaintingPyramid ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
ref var output = ref dispatchParams . output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOutput , dispatchParams . output ) ;
commandBuffer . SetComputeBufferParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavCounters , Resources . Counters ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap0 , Resources . InpaintingPyramid , 0 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap1 , Resources . InpaintingPyramid , 1 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap2 , Resources . InpaintingPyramid , 2 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap3 , Resources . InpaintingPyramid , 3 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap4 , Resources . InpaintingPyramid , 4 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap5 , Resources . InpaintingPyramid , 5 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap6 , Resources . InpaintingPyramid , 6 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap0 , Resources . InpaintingPyramid , 0 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap1 , Resources . InpaintingPyramid , 1 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap2 , Resources . InpaintingPyramid , 2 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap3 , Resources . InpaintingPyramid , 3 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap4 , Resources . InpaintingPyramid , 4 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap5 , Resources . InpaintingPyramid , 5 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap6 , Resources . InpaintingPyramid , 6 ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbInpaintingPyramid , _spdConstants , 0 , Marshal . SizeOf < FfxSpd . SpdConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < FfxSpd . SpdConstants > ( ComputeShader , FrameInterpolationShaderIDs . CbInpaintingPyramid , _spdConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -302,20 +254,16 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Inpainting" , contextDescription . shaders . inpainting ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
ref var scd = ref dispatchParams . opticalFlowSceneChangeDetection ;
ref var backBuf = ref dispatchParams . currentBackBuffer ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowSceneChangeDetection , scd . RenderTarget , scd . MipLevel , scd . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowSceneChangeDetection , dispatchParams . opticalFlowSceneChangeDetection ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInpaintingPyramid , Resources . InpaintingPyramid ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPresentBackbuffer , backBuf . RenderTarget , backBuf . MipLevel , backBuf . SubElement ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPresentBackbuffer , dispatchParams . currentBackBuffer ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
ref var output = ref dispatchParams . output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , dispatchParams . output ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -333,22 +281,22 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Game Vector Field Inpainting Pyramid" , contextDescription . shaders . gameVectorFieldInpaintingPyramid ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
commandBuffer . SetComputeBufferParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavCounters , Resources . Counters ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap0 , Resources . InpaintingPyramid , 0 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap1 , Resources . InpaintingPyramid , 1 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap2 , Resources . InpaintingPyramid , 2 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap3 , Resources . InpaintingPyramid , 3 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap4 , Resources . InpaintingPyramid , 4 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap5 , Resources . InpaintingPyramid , 5 ) ;
BindMipmap ( commandBuffer , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap6 , Resources . InpaintingPyramid , 6 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap0 , Resources . InpaintingPyramid , 0 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap1 , Resources . InpaintingPyramid , 1 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap2 , Resources . InpaintingPyramid , 2 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap3 , Resources . InpaintingPyramid , 3 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap4 , Resources . InpaintingPyramid , 4 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap5 , Resources . InpaintingPyramid , 5 ) ;
commandBuffer . SetComputeTextureMipParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavInpaintingPyramidMipmap6 , Resources . InpaintingPyramid , 6 ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbInpaintingPyramid , _spdConstants , 0 , Marshal . SizeOf < FfxSpd . SpdConstants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . SetComputeConstantBufferParam < FfxSpd . SpdConstants > ( ComputeShader , FrameInterpolationShaderIDs . CbInpaintingPyramid , _spdConstants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}
@ -362,23 +310,20 @@ namespace FidelityFX.FrameGen
InitComputeShader ( "Debug View" , contextDescription . shaders . debugView ) ;
}
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
protected override void DoScheduleDispatch ( CommandBuffer commandBuffer , in FrameInterpolation . DispatchDescription dispatchParams , int frameIndex , int dispatchX , int dispatchY , int dispatchZ )
{
ref var backBuf = ref dispatchParams . currentBackBuffer ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldX , Resources . GameMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvGameMotionVectorFieldY , Resources . GameMotionVectorFieldY ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowMotionVectorFieldX , Resources . OpticalFlowMotionVectorFieldX ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvOpticalFlowMotionVectorFieldY , Resources . OpticalFlowMotionVectorFieldY ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvDisocclusionMask , Resources . DisocclusionMask ) ;
commandBuffer . SetComputeTextur eParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPresentBackbuffer , backBuf . RenderTarget , backBuf . MipLevel , backBuf . SubElement ) ;
commandBuffer . SetComputeResourc eParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvPresentBackbuffer , dispatchParams . currentBackBuffer ) ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvInpaintingPyramid , Resources . InpaintingPyramid ) ;
BindCurrentInterpolationSource ( commandBuffer , dispatchParams ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . SrvCurrentInterpolationSource , dispatchParams . InterpolationSource ) ;
ref var output = ref dispatchParams . output ;
commandBuffer . SetComputeTextureParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , output . RenderTarget , output . MipLevel , output . SubElement ) ;
commandBuffer . SetComputeResourceParam ( ComputeShader , KernelIndex , FrameInterpolationShaderIDs . UavOutput , dispatchParams . output ) ;
commandBuffer . SetComputeConstantBufferParam ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants , 0 , Marshal . SizeOf < FrameInterpolation . Constants > ( ) ) ;
commandBuffer . SetComputeConstantBufferParam < FrameInterpolation . Constants > ( ComputeShader , FrameInterpolationShaderIDs . CbFrameInterpolation , Constants ) ;
commandBuffer . DispatchCompute ( ComputeShader , KernelIndex , dispatchX , dispatchY , dispatchZ ) ;
}