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

Method PrecomputeBRDF

PBR/src/PBR_Renderer.cpp:447–523  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

445}
446
447void 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

Callers

nothing calls this directly

Calls 2

CreateShaderMethod · 0.80
SetPipelineStateMethod · 0.80

Tested by

no test coverage detected