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

Method PrepareShadersAndPSO

PostProcess/Bloom/src/Bloom.cpp:154–245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152}
153
154bool Bloom::PrepareShadersAndPSO(const RenderAttributes& RenderAttribs, FEATURE_FLAGS FeatureFlags)
155{
156 bool AllPSOsReady = true;
157
158 const SHADER_COMPILE_FLAGS ShaderFlags = RenderAttribs.pPostFXContext->GetShaderCompileFlags(m_Settings.EnableAsyncCreation);
159 const PSO_CREATE_FLAGS PSOFlags = m_Settings.EnableAsyncCreation ? PSO_CREATE_FLAG_ASYNCHRONOUS : PSO_CREATE_FLAG_NONE;
160
161 {
162 auto& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_PREFILTERED_TEXTURE, FeatureFlags);
163 if (!RenderTech.IsInitializedPSO())
164 {
165 const auto VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
166 const auto PS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "Bloom_ComputePrefilteredTexture.fx", "ComputePrefilteredTexturePS", SHADER_TYPE_PIXEL, {}, ShaderFlags);
167
168 const bool BorderSamplingModeSupported = RenderAttribs.pDevice->GetAdapterInfo().Sampler.BorderSamplingModeSupported;
169
170 PipelineResourceLayoutDescX ResourceLayout;
171 ResourceLayout
172 .AddVariable(SHADER_TYPE_PIXEL, "cbBloomAttribs", SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
173 .AddVariable(SHADER_TYPE_PIXEL, "g_TextureInput", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
174 .AddImmutableSampler(SHADER_TYPE_PIXEL, "g_TextureInput", BorderSamplingModeSupported ? Sam_LinearBoarder : Sam_LinearClamp);
175
176 RenderTech.InitializePSO(RenderAttribs.pDevice,
177 RenderAttribs.pStateCache, "Bloom::ComputePrefilteredTexture",
178 VS, PS, ResourceLayout,
179 {
180 m_DownsampledTextures[0]->GetDesc().Format,
181 },
182 TEX_FORMAT_UNKNOWN,
183 DSS_DisableDepth, BS_Default, false, PSOFlags);
184 }
185 if (AllPSOsReady && !RenderTech.IsReady())
186 AllPSOsReady = false;
187 }
188
189 {
190 auto& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_DOWNSAMPLED_TEXTURE, FeatureFlags);
191 if (!RenderTech.IsInitializedPSO())
192 {
193 const auto VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
194 const auto PS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "Bloom_ComputeDownsampledTexture.fx", "ComputeDownsampledTexturePS", SHADER_TYPE_PIXEL, {}, ShaderFlags);
195
196 const bool BorderSamplingModeSupported = RenderAttribs.pDevice->GetAdapterInfo().Sampler.BorderSamplingModeSupported;
197
198 PipelineResourceLayoutDescX ResourceLayout;
199 ResourceLayout
200 .AddVariable(SHADER_TYPE_PIXEL, "g_TextureInput", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
201 .AddImmutableSampler(SHADER_TYPE_PIXEL, "g_TextureInput", BorderSamplingModeSupported ? Sam_LinearBoarder : Sam_LinearClamp);
202
203 RenderTech.InitializePSO(RenderAttribs.pDevice,
204 RenderAttribs.pStateCache, "Bloom::ComputeDownsampledTexture",
205 VS, PS, ResourceLayout,
206 {
207 m_DownsampledTextures[0]->GetDesc().Format,
208 },
209 TEX_FORMAT_UNKNOWN,
210 DSS_DisableDepth, BS_Default, false, PSOFlags);
211 }

Callers

nothing calls this directly

Calls 5

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

Tested by

no test coverage detected