| 152 | } |
| 153 | |
| 154 | bool 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 | } |
nothing calls this directly
no test coverage detected