| 436 | } |
| 437 | |
| 438 | bool PostFXContext::PrepareShadersAndPSO(const RenderAttributes& RenderAttribs, FEATURE_FLAGS FeatureFlags) |
| 439 | { |
| 440 | bool AllPSOsReady = true; |
| 441 | |
| 442 | const SHADER_COMPILE_FLAGS ShaderFlags = GetShaderCompileFlags(m_Settings.EnableAsyncCreation); |
| 443 | const PSO_CREATE_FLAGS PSOFlags = m_Settings.EnableAsyncCreation ? PSO_CREATE_FLAG_ASYNCHRONOUS : PSO_CREATE_FLAG_NONE; |
| 444 | |
| 445 | { |
| 446 | auto& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_BLUE_NOISE_TEXTURE, FeatureFlags, TEX_FORMAT_UNKNOWN); |
| 447 | if (!RenderTech.IsInitializedPSO()) |
| 448 | { |
| 449 | PipelineResourceLayoutDescX ResourceLayout; |
| 450 | ResourceLayout |
| 451 | .AddVariable(SHADER_TYPE_PIXEL, "g_SobolBuffer", SHADER_RESOURCE_VARIABLE_TYPE_STATIC) |
| 452 | .AddVariable(SHADER_TYPE_PIXEL, "g_ScramblingTileBuffer", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); |
| 453 | |
| 454 | const auto VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags); |
| 455 | const auto PS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "ComputeBlueNoiseTexture.fx", "ComputeBlueNoiseTexturePS", SHADER_TYPE_PIXEL, {}, ShaderFlags); |
| 456 | |
| 457 | RenderTech.InitializePSO(RenderAttribs.pDevice, |
| 458 | RenderAttribs.pStateCache, "PreparePostFX::ComputeBlueNoiseTexture", |
| 459 | VS, PS, ResourceLayout, |
| 460 | { |
| 461 | m_Resources[RESOURCE_IDENTIFIER_BLUE_NOISE_TEXTURE_XY].AsTexture()->GetDesc().Format, |
| 462 | m_Resources[RESOURCE_IDENTIFIER_BLUE_NOISE_TEXTURE_ZW].AsTexture()->GetDesc().Format, |
| 463 | }, |
| 464 | TEX_FORMAT_UNKNOWN, |
| 465 | DSS_DisableDepth, BS_Default, false, PSOFlags); |
| 466 | } |
| 467 | if (AllPSOsReady && !RenderTech.IsReady()) |
| 468 | AllPSOsReady = false; |
| 469 | } |
| 470 | |
| 471 | { |
| 472 | auto& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_REPROJECTED_DEPTH, FeatureFlags, TEX_FORMAT_UNKNOWN); |
| 473 | if (!RenderTech.IsInitializedPSO()) |
| 474 | { |
| 475 | PipelineResourceLayoutDescX ResourceLayout; |
| 476 | ResourceLayout |
| 477 | .AddVariable(SHADER_TYPE_PIXEL, "cbCameraAttribs", SHADER_RESOURCE_VARIABLE_TYPE_STATIC) |
| 478 | .AddVariable(SHADER_TYPE_PIXEL, "g_TextureDepth", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC, SHADER_VARIABLE_FLAG_UNFILTERABLE_FLOAT_TEXTURE_WEBGPU); |
| 479 | |
| 480 | const auto VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags); |
| 481 | const auto PS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "ComputeReprojectedDepth.fx", "ComputeReprojectedDepthPS", SHADER_TYPE_PIXEL, {}, ShaderFlags); |
| 482 | |
| 483 | RenderTech.InitializePSO(RenderAttribs.pDevice, |
| 484 | RenderAttribs.pStateCache, "PreparePostFX::ComputeReprojectedDepth", |
| 485 | VS, PS, ResourceLayout, |
| 486 | {m_Resources[RESOURCE_IDENTIFIER_REPROJECTED_DEPTH].AsTexture()->GetDesc().Format}, |
| 487 | TEX_FORMAT_UNKNOWN, |
| 488 | DSS_DisableDepth, BS_Default, false, PSOFlags); |
| 489 | } |
| 490 | if (AllPSOsReady && !RenderTech.IsReady()) |
| 491 | AllPSOsReady = false; |
| 492 | } |
| 493 | |
| 494 | { |
| 495 | auto& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_CLOSEST_MOTION, FeatureFlags, TEX_FORMAT_UNKNOWN); |
nothing calls this directly
no test coverage detected