public static void BilateralFilter(CommandBuffer CmdBuffer, RenderTargetIdentifier SRV_InputColor, RenderTargetIdentifier UAV_BilateralColor, ref SVGFParameterDescriptor Parameters, ref SVGFInputDescriptor InputData)
        {
            CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_BilateralShaderID.BilateralRadius, Parameters.BilateralRadius);
            CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_BilateralShaderID.ColorWeight, Parameters.BilateralColorWeight);
            CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_BilateralShaderID.NormalWeight, Parameters.BilateralNormalWeight);
            CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_BilateralShaderID.DepthWeight, Parameters.BilateralDepthWeight);
            CmdBuffer.SetComputeVectorParam(SVGF_Shader, SVGF_BilateralShaderID.BilateralSize, InputData.Resolution);

            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_BilateralShaderID.SRV_InputColor, SRV_InputColor);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_BilateralShaderID.SRV_GBufferNormal, InputData.SRV_GBufferNormal);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_BilateralShaderID.SRV_SceneDepth, InputData.SRV_SceneDepth);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_BilateralShaderID.UAV_BilateralColor, UAV_BilateralColor);
            CmdBuffer.DispatchCompute(SVGF_Shader, 1, Mathf.CeilToInt(InputData.Resolution.x / 16), Mathf.CeilToInt(InputData.Resolution.y / 16), 1);
            //CmdBuffer.CopyTexture(UAV_BilateralColor, InputData.SRV_PrevColor);
        }
        public static void SpatialFilter(CommandBuffer CmdBuffer, RenderTargetIdentifier SRV_UWVPDF, RenderTargetIdentifier SRV_ColorMask, RenderTargetIdentifier UAV_SpatialColor, ref SVGFParameterDescriptor Parameters, ref SVGFInputDescriptor InputData)
        {
            CmdBuffer.SetComputeIntParam(SVGF_Shader, SVGF_SpatialShaderID.FrameIndex, InputData.FrameIndex);
            CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_SpatialShaderID.SpatialRadius, Parameters.SpatialRadius);
            CmdBuffer.SetComputeVectorParam(SVGF_Shader, SVGF_SpatialShaderID.SpatialSize, InputData.Resolution);
            CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_SpatialShaderID.Matrix_InvProj, InputData.Matrix_InvProj);
            CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_SpatialShaderID.Matrix_InvViewProj, InputData.Matrix_InvViewProj);
            CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_SpatialShaderID.Matrix_WorldToView, InputData.Matrix_WorldToView);

            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_SceneDepth, InputData.SRV_SceneDepth);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_GBufferNormal, InputData.SRV_GBufferNormal);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_GBufferRoughness, InputData.SRV_GBufferRoughness);
            CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_UWVPDF, SRV_UWVPDF);
            for (uint i = 0; i < (uint)Parameters.NumSpatial; i++)
            {
                uint CurrState = i & 1;
                if (CurrState == 0)
                {
                    CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_ColorMask, SRV_ColorMask);
                    CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.UAV_SpatialColor, UAV_SpatialColor);
                    CmdBuffer.DispatchCompute(SVGF_Shader, 0, Mathf.CeilToInt(InputData.Resolution.x / 16), Mathf.CeilToInt(InputData.Resolution.y / 16), 1);
                }
                else
                {
                    CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.SRV_ColorMask, UAV_SpatialColor);
                    CmdBuffer.SetComputeTextureParam(SVGF_Shader, 0, SVGF_SpatialShaderID.UAV_SpatialColor, SRV_ColorMask);
                    CmdBuffer.DispatchCompute(SVGF_Shader, 0, Mathf.CeilToInt(InputData.Resolution.x / 16), Mathf.CeilToInt(InputData.Resolution.y / 16), 1);
                    CmdBuffer.CopyTexture(SRV_ColorMask, UAV_SpatialColor);
                }
            }
        }
 public static void TemporalFilter(CommandBuffer CmdBuffer, RenderTargetIdentifier SRV_RayDepth, RenderTargetIdentifier SRV_CurrColor, RenderTargetIdentifier SRV_PrevColor, RenderTargetIdentifier UAV_TemporalColor, ref SVGFParameterDescriptor Parameters, ref SVGFInputDescriptor InputData)
 {
     CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_TemporalShaderID.TemporalScale, Parameters.TemporalScale);
     CmdBuffer.SetComputeFloatParam(SVGF_Shader, SVGF_TemporalShaderID.TemporalWeight, Parameters.TemporalWeight);
     CmdBuffer.SetComputeVectorParam(SVGF_Shader, SVGF_TemporalShaderID.TemporalSize, InputData.Resolution);
     CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_TemporalShaderID.Matrix_PrevViewProj, InputData.Matrix_PrevViewProj);
     CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_TemporalShaderID.Matrix_ViewProj, InputData.Matrix_ViewProj);
     CmdBuffer.SetComputeMatrixParam(SVGF_Shader, SVGF_TemporalShaderID.Matrix_InvViewProj, InputData.Matrix_InvViewProj);
     CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_TemporalShaderID.SRV_GBufferMotion, InputData.SRV_GBufferMotion);
     CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_TemporalShaderID.SRV_RayDepth, SRV_RayDepth);
     CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_TemporalShaderID.SRV_CurrColor, SRV_CurrColor);
     CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_TemporalShaderID.SRV_PrevColor, SRV_PrevColor);
     CmdBuffer.SetComputeTextureParam(SVGF_Shader, 1, SVGF_TemporalShaderID.UAV_TemporalColor, UAV_TemporalColor);
     CmdBuffer.DispatchCompute(SVGF_Shader, 1, Mathf.CeilToInt(InputData.Resolution.x / 16), Mathf.CeilToInt(InputData.Resolution.y / 16), 1);
 }