static void DrawDeinterleavedDepth(MyViewport viewport) { var qViewport = GetQuarterViewport(viewport); RC.PixelShader.Set(m_deinterleaveDepthPS); RC.PixelShader.SetSrv(0, m_fullResViewDepthTarget); var rtvs = new IRtvBindable[MAX_NUM_MRTS]; for (int sliceIndex = 0; sliceIndex < NUM_SLICES; sliceIndex += MAX_NUM_MRTS) { for (int i = 0; i < MAX_NUM_MRTS; i++) { rtvs[i] = m_quarterResViewDepthTextureArray.SubresourceRtv(sliceIndex + i); } RC.SetRtvs(rtvs); RC.PixelShader.SetConstantBuffer(1, m_perPassCBs[sliceIndex]); MyScreenPass.DrawFullscreenQuad(qViewport); } }
static void DrawCoarseAO(MyGBuffer gbuffer, MyViewport viewport) { var qViewport = GetQuarterViewport(viewport); RC.PixelShader.Set(m_coarseAOPS); RC.PixelShader.SetSamplers(0, Params.DepthClampToEdge ? MySamplerStateManager.PointHBAOClamp : MySamplerStateManager.PointHBAOBorder); RC.PixelShader.SetSamplers(1, MySamplerStateManager.PointHBAOClamp); RC.PixelShader.SetSrv(1, gbuffer.GBuffer1); for (int sliceIndex = 0; sliceIndex < NUM_SLICES; ++sliceIndex) { RC.PixelShader.SetSrv(0, m_quarterResViewDepthTextureArray.SubresourceSrv(sliceIndex)); RC.PixelShader.SetConstantBuffer(1, m_perPassCBs[sliceIndex]); RC.GeometryShader.SetConstantBuffer(1, m_perPassCBs[sliceIndex]); RC.SetRtv(m_quarterResAOTextureArray.SubresourceRtv(sliceIndex)); MyScreenPass.DrawFullscreenQuad(qViewport); } RC.GeometryShader.Set(null); }