public void ExecutePass(DeviceContext context, RenderTargetSet sourceSet) { PostEffectHelper.LinearizeDepth(context, m_LinearDepth, sourceSet); DebugManager.RegisterDebug(context, "LinearDepth", m_LinearDepth); using (new GpuProfilePoint(context, "DownsampleDepthNormals")) { m_LinearDepth.BindSRV(context, 0); sourceSet.BindSRV(context, 1); m_HalfLinearDepth.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "DownsampleDepthNormals"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } DebugManager.RegisterDebug(context, "HalfLinearDepth", m_HalfLinearDepth); DebugManager.RegisterDebug(context, "HalfNormals", m_HalfLinearDepth, 1); using (new GpuProfilePoint(context, "OutputBilateralOffsets")) { m_LinearDepth.BindSRV(context, 0); m_HalfLinearDepth.BindSRV(context, 2); m_BilateralUpsampleOffsets.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "OutputBilateralOffsets"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } DebugManager.RegisterDebug(context, "BilateralOffsets", m_BilateralUpsampleOffsets); }
public void ExecutePass(DeviceContext context, RenderTargetSet target, RenderTargetSet source) { using (new GpuProfilePoint(context, "ResolveMotionVectors")) { source.BindDepthAsSRV(context, 0); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "ResolveMotionVectors"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public static void LinearizeDepth(DeviceContext context, RenderTargetSet target, RenderTargetSet source) { using (new GpuProfilePoint(context, "LinearizeDepth")) { source.BindDepthAsSRV(context, 0); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "LinearizeDepth"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public static void CopyFrac(DeviceContext context, RenderTargetSet target, RenderTargetSet source, int rtNum = 0) { using (new GpuProfilePoint(context, "Copy")) { source.BindSRV(context, 0, rtNum); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "CopyFrac"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public static void Difference(DeviceContext context, RenderTargetSet target, RenderTargetSet source1, RenderTargetSet source2, int rtNum = 0) { using (new GpuProfilePoint(context, "Difference")) { source1.BindSRV(context, 0, rtNum); source2.BindSRV(context, 1, rtNum); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Difference"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public void ExecutePass(DeviceContext context, RenderTargetSet target, RenderTargetSet source, RenderTargetSet luminanceTexture) { using (new GpuProfilePoint(context, "HDR Resolve")) { source.BindSRV(context, 0); luminanceTexture.BindSRV(context, 1); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "ResolveHDR"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public void ExecutePass(DeviceContext context, RenderTargetSet target, RenderTargetSet linearDepth, RenderTargetSet motionVectors) { RenderTargetSet ssaoCurrent = TemporalSurfaceManager.GetRenderTargetCurrent("SSAO"); RenderTargetSet ssaoHistory = TemporalSurfaceManager.GetRenderTargetHistory("SSAO"); RenderTargetSet tempBlurBuffer = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptor); Random rand = new Random(); dynamic scb = m_SSAOBuffer; scb.g_SSAOPhase = (float)rand.NextDouble() * 3.1415f; m_SSAOBuffer.CompileAndBind(context); using (new GpuProfilePoint(context, "SSAO")) { using (new GpuProfilePoint(context, "SSAOCalculate")) { linearDepth.BindSRV(context, 0); ssaoHistory.BindSRV(context, 1); motionVectors.BindSRV(context, 2); ssaoCurrent.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOCalculate"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } SurfaceDebugManager.RegisterDebug(context, "SSAOMain", ssaoCurrent); using (new GpuProfilePoint(context, "SSAOBlur")) { ssaoCurrent.BindSRV(context, 1); tempBlurBuffer.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOBlurHorizontal"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); SurfaceDebugManager.RegisterDebug(context, "SSAOBlurH", tempBlurBuffer); tempBlurBuffer.BindSRV(context, 1); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOBlurVertical"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); SurfaceDebugManager.RegisterDebug(context, "SSAOBlurV", target); } } RenderTargetManager.ReleaseRenderTargetToPool(tempBlurBuffer); }
public void ExecutePass(DeviceContext context, RenderTargetSet linearDepth, RenderTargetSet motionVectors, RenderTargetSet surfaceNormals, RenderTargetSet sourceColor, Camera sceneCam, DepthOperationsPass depthOps) { RenderTargetSet ssrCurrent = TemporalSurfaceManager.GetRenderTargetCurrent("SSReflections"); RenderTargetSet ssrHistory = TemporalSurfaceManager.GetRenderTargetHistory("SSReflections"); RenderTargetSet traceRT = RenderTargetManager.RequestRenderTargetFromPool(m_ResultsRTDescriptor); if (DebugManager.IsFeatureOn("SSReflections")) { using (new GpuProfilePoint(context, "SSReflections")) { using (new GpuProfilePoint(context, "SSReflectionsRaytrace")) { context.PixelShader.SetShaderResource(PostEffectHelper.m_RandomNumbersBuffer.m_ShaderResourceView, 39); linearDepth.BindSRV(context, 0); surfaceNormals.BindSRV(context, 1); sourceColor.BindSRV(context, 2); motionVectors.BindSRV(context, 3); traceRT.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSReflectionsRaytrace"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } using (new GpuProfilePoint(context, "SSReflectionsBlur")) { linearDepth.BindSRV(context, 0); surfaceNormals.BindSRV(context, 1); traceRT.BindSRV(context, 2); motionVectors.BindSRV(context, 3); ssrHistory.BindSRV(context, 4); ssrCurrent.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSReflectionsBlur"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } } } else { traceRT.Clear(context, new Color4(0.0f, 0.0f, 0.0f, 0.0f)); ssrCurrent.Clear(context, new Color4(0.0f, 0.0f, 0.0f, 0.0f)); } DebugManager.RegisterDebug(context, "SSRRaytrace", traceRT); DebugManager.RegisterDebug(context, "SSRBlur", ssrCurrent); RenderTargetManager.ReleaseRenderTargetToPool(traceRT); }
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); } }
public void ExecutePass( DeviceContext context, RenderTargetSet target, RenderTargetSet sourceCurrent, RenderTargetSet sourceHistory, RenderTargetSet motionVectors, RenderTargetSet motionVectorsPrevious, bool accumulateHistory = false) { using (new GpuProfilePoint(context, "ResolveTemporalMotionBased")) { sourceCurrent.BindSRV(context, 0); sourceHistory.BindSRV(context, 1); motionVectors.BindSRV(context, 2); motionVectorsPrevious.BindSRV(context, 3); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, accumulateHistory ? "ResolveTemporalHistoryAccumulation" : "ResolveTemporalMotionBased"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } }
public RenderTargetSet ExecutePass(DeviceContext context, RenderTargetSet source) { RenderTargetSet[] luminanceTargets = new RenderTargetSet[6]; luminanceTargets[0] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance4x4); luminanceTargets[1] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance16x16); luminanceTargets[2] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance32x32); luminanceTargets[3] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance64x64); luminanceTargets[4] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance128x128); luminanceTargets[5] = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptorLuminance256x256); using (new GpuProfilePoint(context, "Calculate luminance")) { source.BindSRV(context, 0); luminanceTargets[0].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample4x4CalculateLuminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[0].BindSRV(context, 0); luminanceTargets[1].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample4x4Luminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[1].BindSRV(context, 0); luminanceTargets[2].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample2x2Luminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[2].BindSRV(context, 0); luminanceTargets[3].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample2x2Luminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[3].BindSRV(context, 0); luminanceTargets[4].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample2x2Luminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[4].BindSRV(context, 0); luminanceTargets[5].BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "Downsample2x2Luminance"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); luminanceTargets[5].BindSRV(context, 0); context.ComputeShader.SetUnorderedAccessView(m_FinalLuminance.m_RenderTargets[0].m_UnorderedAccessView, 0); ShaderManager.ExecuteComputeForSize(context, 1, 1, 1, "FinalCalculateAverageLuminance"); ContextHelper.ClearSRVs(context); ContextHelper.ClearCSContext(context); } foreach (var lt in luminanceTargets) { RenderTargetManager.ReleaseRenderTargetToPool(lt); } return(m_FinalLuminance); }
public void ExecutePass(DeviceContext context, RenderTargetSet target, RenderTargetSet linearDepth, RenderTargetSet motionVectors, RenderTargetSet surfaceNormals, DepthOperationsPass depthOps) { RenderTargetSet ssaoCurrent = TemporalSurfaceManager.GetRenderTargetCurrent("SSAO"); RenderTargetSet ssaoHistory = TemporalSurfaceManager.GetRenderTargetHistory("SSAO"); if (DebugManager.IsFeatureOn("SSAO")) { RenderTargetSet tempBlurBuffer = RenderTargetManager.RequestRenderTargetFromPool(m_RTDescriptor); Random rand = new Random(); dynamic scb = m_SSAOBuffer; scb.g_SSAOPhase = (float)rand.NextDouble() * 3.1415f; m_SSAOBuffer.CompileAndBind(context); using (new GpuProfilePoint(context, "SSAO")) { using (new GpuProfilePoint(context, "SSAOCalculate")) { linearDepth.BindSRV(context, 0); ssaoHistory.BindSRV(context, 1); motionVectors.BindSRV(context, 2); surfaceNormals.BindSRV(context, 3); ssaoCurrent.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOCalculate"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } DebugManager.RegisterDebug(context, "SSAOMain", ssaoCurrent); using (new GpuProfilePoint(context, "SSAOBlur")) { ssaoCurrent.BindSRV(context, 1); tempBlurBuffer.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOBlurHorizontal"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); DebugManager.RegisterDebug(context, "SSAOBlurH", tempBlurBuffer); tempBlurBuffer.BindSRV(context, 1); target.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "SSAOBlurVertical"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); DebugManager.RegisterDebug(context, "SSAOBlurV", target); } } RenderTargetManager.ReleaseRenderTargetToPool(tempBlurBuffer); } else { target.Clear(context, new SlimDX.Color4(1.0f, 1.0f, 1.0f, 1.0f)); } if (DebugManager.IsDebugging("UpsampledSSAO")) { RenderTargetSet tempFullResBuffer = RenderTargetManager.RequestRenderTargetFromPool(m_UpsampleDebugRTDescriptor); target.BindSRV(context, 0); depthOps.m_BilateralUpsampleOffsets.BindSRV(context, 10); tempFullResBuffer.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "BilateralUpsample"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); DebugManager.RegisterDebug(context, "UpsampledSSAO", tempFullResBuffer); RenderTargetManager.ReleaseRenderTargetToPool(tempFullResBuffer); } }
public RenderTargetSet RenderShadows(DeviceContext context, SimpleSceneWrapper simpleSceneWrapper) { RenderTargetSet.RenderTargetDescriptor evsmDescriptor = new RenderTargetSet.RenderTargetDescriptor() { m_Format = Format.R32G32B32A32_Float, m_HasDepth = false, m_NumSurfaces = 1, m_Height = 1024, m_Width = 1024 }; RenderTargetSet EVSMTexture = m_EVSMTexture == null?RenderTargetManager.RequestRenderTargetFromPool(evsmDescriptor) : m_EVSMTexture; { RenderTargetSet.RenderTargetDescriptor shadowMapDescriptor = new RenderTargetSet.RenderTargetDescriptor() { m_Format = Format.Unknown, m_HasDepth = true, m_NumSurfaces = 0, m_Height = 2048, m_Width = 2048 }; RenderTargetSet shadowBuffer = RenderTargetManager.RequestRenderTargetFromPool(shadowMapDescriptor); using (new GpuProfilePoint(context, "Shadowmap")) { // set the shaders context.VertexShader.Set(ShaderManager.GetVertexShader("VertexShadow")); context.PixelShader.Set(null); shadowBuffer.Clear(context, new Color4(), true); shadowBuffer.BindAsRenderTarget(context, true); ContextHelper.SetDepthStencilState(context, ContextHelper.DepthConfigurationType.DepthWriteCompare); // render triangles simpleSceneWrapper.RenderNoMaterials(context); RenderTargetSet.BindNull(context); } using (new GpuProfilePoint(context, "EVSM Resolve")) { shadowBuffer.BindDepthAsSRV(context, 0); EVSMTexture.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "ReconstructEVSM"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } RenderTargetSet EVSMTextureTemp = RenderTargetManager.RequestRenderTargetFromPool(evsmDescriptor); using (new GpuProfilePoint(context, "EVSM Blur")) { EVSMTexture.BindSRV(context, 1); EVSMTextureTemp.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "BlurEVSMHorizontal"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); EVSMTextureTemp.BindSRV(context, 1); EVSMTexture.BindAsRenderTarget(context); PostEffectHelper.RenderFullscreenTriangle(context, "BlurEVSMVertical"); RenderTargetSet.BindNull(context); ContextHelper.ClearSRVs(context); } RenderTargetManager.ReleaseRenderTargetToPool(shadowBuffer); RenderTargetManager.ReleaseRenderTargetToPool(EVSMTextureTemp); } m_EVSMTexture = EVSMTexture; return(EVSMTexture); }