| 898 | } |
| 899 | |
| 900 | void 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 | } |
nothing calls this directly
no test coverage detected