| 445 | } |
| 446 | |
| 447 | void PBR_Renderer::PrecomputeBRDF(IDeviceContext* pCtx, |
| 448 | Uint32 NumBRDFSamples) |
| 449 | { |
| 450 | TextureDesc TexDesc; |
| 451 | TexDesc.Name = "Preintegrated GGX"; |
| 452 | TexDesc.Type = RESOURCE_DIM_TEX_2D; |
| 453 | TexDesc.Usage = USAGE_DEFAULT; |
| 454 | TexDesc.BindFlags = BIND_SHADER_RESOURCE | BIND_RENDER_TARGET; |
| 455 | TexDesc.Width = BRDF_LUT_Dim; |
| 456 | TexDesc.Height = BRDF_LUT_Dim; |
| 457 | TexDesc.Format = TEX_FORMAT_RG16_FLOAT; |
| 458 | TexDesc.MipLevels = 1; |
| 459 | auto pPreintegratedGGX = m_Device.CreateTexture(TexDesc); |
| 460 | m_pPreintegratedGGX_SRV = pPreintegratedGGX->GetDefaultView(TEXTURE_VIEW_SHADER_RESOURCE); |
| 461 | |
| 462 | RefCntAutoPtr<IPipelineState> PrecomputeBRDF_PSO; |
| 463 | { |
| 464 | GraphicsPipelineStateCreateInfo PSOCreateInfo; |
| 465 | PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc; |
| 466 | GraphicsPipelineDesc& GraphicsPipeline = PSOCreateInfo.GraphicsPipeline; |
| 467 | |
| 468 | PSODesc.Name = "Precompute BRDF LUT PSO"; |
| 469 | PSODesc.PipelineType = PIPELINE_TYPE_GRAPHICS; |
| 470 | |
| 471 | GraphicsPipeline.NumRenderTargets = 1; |
| 472 | GraphicsPipeline.RTVFormats[0] = TexDesc.Format; |
| 473 | GraphicsPipeline.PrimitiveTopology = PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; |
| 474 | GraphicsPipeline.RasterizerDesc.CullMode = CULL_MODE_NONE; |
| 475 | GraphicsPipeline.DepthStencilDesc.DepthEnable = False; |
| 476 | |
| 477 | ShaderCreateInfo ShaderCI; |
| 478 | ShaderCI.SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL; |
| 479 | ShaderCI.pShaderSourceStreamFactory = &DiligentFXShaderSourceStreamFactory::GetInstance(); |
| 480 | |
| 481 | ShaderMacroHelper Macros; |
| 482 | Macros.AddShaderMacro("NUM_SAMPLES", NumBRDFSamples); |
| 483 | ShaderCI.Macros = Macros; |
| 484 | |
| 485 | RefCntAutoPtr<IShader> pVS; |
| 486 | { |
| 487 | ShaderCI.Desc = {"Full screen triangle VS", SHADER_TYPE_VERTEX, true}; |
| 488 | ShaderCI.EntryPoint = "FullScreenTriangleVS"; |
| 489 | ShaderCI.FilePath = "FullScreenTriangleVS.fx"; |
| 490 | |
| 491 | pVS = m_Device.CreateShader(ShaderCI); |
| 492 | } |
| 493 | |
| 494 | // Create pixel shader |
| 495 | RefCntAutoPtr<IShader> pPS; |
| 496 | { |
| 497 | ShaderCI.Desc = {"Precompute BRDF PS", SHADER_TYPE_PIXEL, true}; |
| 498 | ShaderCI.EntryPoint = "PrecomputeBRDF_PS"; |
| 499 | ShaderCI.FilePath = "PrecomputeBRDF.psh"; |
| 500 | |
| 501 | pPS = m_Device.CreateShader(ShaderCI); |
| 502 | } |
| 503 | |
| 504 | // Finally, create the pipeline state |
nothing calls this directly
no test coverage detected