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

Method CreateSignature

PBR/src/PBR_Renderer.cpp:900–1072  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

898}
899
900void PBR_Renderer::CreateSignature()
901{
902 VERIFY(m_ResourceSignatures.empty(), "Resource signature has already been created");
903
904 PipelineResourceSignatureDescX SignatureDesc{"PBR Renderer Resource Signature"};
905 SignatureDesc
906 .SetUseCombinedTextureSamplers(m_Device.GetDeviceInfo().IsGLDevice())
907 .AddResource(SHADER_TYPE_VS_PS, "cbFrameAttribs", SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
908 .AddResource(SHADER_TYPE_VS_PS, "cbPrimitiveAttribs", SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE);
909
910 if (m_Settings.MaxJointCount > 0)
911 SignatureDesc.AddResource(SHADER_TYPE_VERTEX, "cbJointTransforms", SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE);
912
913 std::unordered_set<std::string> Samplers;
914 if (!m_Device.GetDeviceInfo().IsGLDevice())
915 {
916 SignatureDesc.AddImmutableSampler(SHADER_TYPE_PIXEL, "g_LinearClampSampler", Sam_LinearClamp);
917 Samplers.emplace("g_LinearClampSampler");
918 }
919
920 auto& MaterialTexturesArraySize = m_Settings.MaterialTexturesArraySize;
921 if (m_Settings.ShaderTexturesArrayMode == SHADER_TEXTURE_ARRAY_MODE_STATIC &&
922 m_Settings.GetStaticShaderTextureIds == nullptr)
923 {
924 MaterialTexturesArraySize = 0;
925 m_StaticShaderTextureIds = std::make_unique<StaticShaderTextureIdsArrayType>();
926 m_StaticShaderTextureIds->fill(decltype(PBR_Renderer::InvalidMaterialTextureId){InvalidMaterialTextureId});
927 }
928
929 auto AddMaterialTextureAndSampler = [&](TEXTURE_ATTRIB_ID TexId,
930 const char* SamplerName,
931 const SamplerDesc& SamDesc) {
932 std::string TextureName;
933 if (m_Settings.ShaderTexturesArrayMode == SHADER_TEXTURE_ARRAY_MODE_STATIC ||
934 m_Settings.ShaderTexturesArrayMode == SHADER_TEXTURE_ARRAY_MODE_DYNAMIC)
935 {
936 if (m_StaticShaderTextureIds)
937 {
938 VERIFY_EXPR(m_Settings.ShaderTexturesArrayMode == SHADER_TEXTURE_ARRAY_MODE_STATIC);
939 VERIFY((*m_StaticShaderTextureIds)[TexId] == InvalidMaterialTextureId, "Material texture has already been added");
940 (*m_StaticShaderTextureIds)[TexId] = static_cast<Uint16>(MaterialTexturesArraySize++);
941 }
942 if (m_Device.GetDeviceInfo().IsGLDevice())
943 {
944 // Use the same immutable sampler for all textures as immutable sampler arrays are not supported.
945 SamplerName = "g_MaterialTextures";
946 }
947 }
948 else if (m_Settings.ShaderTexturesArrayMode == SHADER_TEXTURE_ARRAY_MODE_NONE)
949 {
950 TextureName = GetTextureShaderName(TexId);
951 SignatureDesc.AddResource(SHADER_TYPE_PIXEL, TextureName.c_str(), SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE,
952 PIPELINE_RESOURCE_FLAG_NONE, WebGPUResourceAttribs{WEB_GPU_BINDING_TYPE_DEFAULT, RESOURCE_DIM_TEX_2D_ARRAY});
953 if (m_Device.GetDeviceInfo().IsGLDevice())
954 {
955 SamplerName = TextureName.c_str();
956 }
957 }

Callers

nothing calls this directly

Calls 1

GetTextureShaderNameFunction · 0.85

Tested by

no test coverage detected