public void ExecutePass(DeviceContext context, RenderTargetSet target, RenderTargetSet source, RenderTargetSet depthSource) { using (new GpuProfilePoint(context, "Bokeh DoF")) { RenderTargetSet halfResColorCoC = RenderTargetManager.RequestRenderTargetFromPool(m_HalfResDescriptor); RenderTargetSet bokehAccumulate = RenderTargetManager.RequestRenderTargetFromPool(m_HalfHeightDescriptor); using (new GpuProfilePoint(context, "Downsample")) { source.BindSRV(context, 0); depthSource.BindDepthAsSRV(context, 1); halfResColorCoC.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "DownsampleColorCoC"); ContextHelper.ClearSRVs(context); } using (new GpuProfilePoint(context, "Sprites")) { bokehAccumulate.Clear(context, new Color4(0.0f, 0.0f, 0.0f, 0.0f)); bokehAccumulate.BindAsRenderTarget(context, false); halfResColorCoC.BindSRV(context, 0); context.PixelShader.SetShaderResource(m_BokehSpriteTextureSRV, 4); context.VertexShader.Set(ShaderManager.GetVertexShader("VertexFullScreenDofGrid")); context.PixelShader.Set(ShaderManager.GetPixelShader("BokehSprite")); ContextHelper.SetBlendState(context, ContextHelper.BlendType.Additive); PostEffectHelper.RenderFullscreenGrid(context, m_NumQuads); ContextHelper.SetBlendState(context, ContextHelper.BlendType.None); ContextHelper.ClearSRVs(context); } using (new GpuProfilePoint(context, "ResolveBokeh")) { target.BindAsRenderTarget(context); source.BindSRV(context, 0); bokehAccumulate.BindSRV(context, 2); halfResColorCoC.BindSRV(context, 3); PostEffectHelper.RenderFullscreenTriangle(context, m_DebugBokeh ? "ResolveBokehDebug" : "ResolveBokeh"); ContextHelper.ClearSRVs(context); } RenderTargetManager.ReleaseRenderTargetToPool(halfResColorCoC); RenderTargetManager.ReleaseRenderTargetToPool(bokehAccumulate); RenderTargetSet.BindNull(context); } }