| 231 | } |
| 232 | |
| 233 | void CoordinateGridRenderer::RenderGridAxes(const RenderAttributes& RenderAttribs) |
| 234 | { |
| 235 | auto& pPSO = GetPSO(RenderAttribs.FeatureFlags, RenderAttribs.pColorRTV->GetDesc().Format); |
| 236 | if (!pPSO) |
| 237 | { |
| 238 | const SHADER_COMPILE_FLAGS ShaderFlags = m_Settings.PackMatrixRowMajor ? SHADER_COMPILE_FLAG_PACK_MATRIX_ROW_MAJOR : SHADER_COMPILE_FLAG_NONE; |
| 239 | |
| 240 | ShaderMacroHelper Macros; |
| 241 | AddShaderMacros(RenderAttribs.FeatureFlags, Macros); |
| 242 | |
| 243 | const auto VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags); |
| 244 | const auto PS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "CoordinateGridPS.psh", "ComputeGridAxesPS", SHADER_TYPE_PIXEL, Macros, ShaderFlags); |
| 245 | |
| 246 | PipelineResourceLayoutDescX ResourceLayout; |
| 247 | ResourceLayout |
| 248 | .AddVariable(SHADER_TYPE_PIXEL, "cbCameraAttribs", SHADER_RESOURCE_VARIABLE_TYPE_STATIC) |
| 249 | .AddVariable(SHADER_TYPE_PIXEL, "cbGridAxesAttribs", SHADER_RESOURCE_VARIABLE_TYPE_STATIC) |
| 250 | .AddVariable(SHADER_TYPE_PIXEL, "g_TextureDepth", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC, SHADER_VARIABLE_FLAG_UNFILTERABLE_FLOAT_TEXTURE_WEBGPU); |
| 251 | |
| 252 | GraphicsPipelineStateCreateInfoX PSOCreateInfo{"CoordinateGridRenderer::GridAxes"}; |
| 253 | PSOCreateInfo |
| 254 | .AddShader(VS) |
| 255 | .AddShader(PS) |
| 256 | .AddRenderTarget(RenderAttribs.pColorRTV->GetDesc().Format) |
| 257 | .SetResourceLayout(ResourceLayout) |
| 258 | .SetRasterizerDesc(RS_SolidFillNoCull) |
| 259 | .SetDepthStencilDesc(DSS_DisableDepth) |
| 260 | .SetBlendDesc(BS_AlphaBlend) |
| 261 | .SetPrimitiveTopology(PRIMITIVE_TOPOLOGY_TRIANGLE_LIST); |
| 262 | |
| 263 | RenderAttribs.pDevice->CreatePipelineState(PSOCreateInfo, &pPSO); |
| 264 | } |
| 265 | |
| 266 | if (!m_SRB) |
| 267 | { |
| 268 | ShaderResourceVariableX{pPSO, SHADER_TYPE_PIXEL, "cbCameraAttribs"}.Set(m_Resources[RESOURCE_IDENTIFIER_CAMERA_CONSTANT_BUFFER].AsBuffer()); |
| 269 | ShaderResourceVariableX{pPSO, SHADER_TYPE_PIXEL, "cbGridAxesAttribs"}.Set(m_Resources[RESOURCE_IDENTIFIER_SETTINGS_CONSTANT_BUFFER].AsBuffer()); |
| 270 | pPSO->CreateShaderResourceBinding(&m_SRB, true); |
| 271 | } |
| 272 | |
| 273 | ShaderResourceVariableX{m_SRB, SHADER_TYPE_PIXEL, "g_TextureDepth"}.Set(m_Resources[RESOURCE_IDENTIFIER_INPUT_DEPTH].GetTextureSRV()); |
| 274 | |
| 275 | ITextureView* pRTVs[] = { |
| 276 | RenderAttribs.pColorRTV}; |
| 277 | |
| 278 | RenderAttribs.pDeviceContext->SetRenderTargets(_countof(pRTVs), pRTVs, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); |
| 279 | RenderAttribs.pDeviceContext->SetPipelineState(pPSO); |
| 280 | RenderAttribs.pDeviceContext->CommitShaderResources(m_SRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); |
| 281 | RenderAttribs.pDeviceContext->Draw({3, DRAW_FLAG_VERIFY_ALL, 1}); |
| 282 | RenderAttribs.pDeviceContext->SetRenderTargets(0, nullptr, nullptr, RESOURCE_STATE_TRANSITION_MODE_NONE); |
| 283 | } |
| 284 | |
| 285 | RefCntAutoPtr<IPipelineState>& CoordinateGridRenderer::GetPSO(FEATURE_FLAGS FeatureFlags, TEXTURE_FORMAT RTVFormat) |
| 286 | { |
nothing calls this directly
no test coverage detected