MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / PrepareShadersAndPSO

Method PrepareShadersAndPSO

PostProcess/Common/src/PostFXContext.cpp:438–542  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

436}
437
438bool 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);

Callers

nothing calls this directly

Calls 4

CreateShaderFunction · 0.85
IsInitializedPSOMethod · 0.80
InitializePSOMethod · 0.80
IsReadyMethod · 0.45

Tested by

no test coverage detected