diff --git a/src/modules/graphics/Shader.cpp b/src/modules/graphics/Shader.cpp index f6c314420..5ace1031d 100644 --- a/src/modules/graphics/Shader.cpp +++ b/src/modules/graphics/Shader.cpp @@ -1010,8 +1010,16 @@ bool Shader::validateInternal(StrongRef stages[], std::string &err, values[i].u = convertData((*constarray)[i]); } break; - case glslang::EbtInt: case glslang::EbtBool: + u.dataType = DATA_BASETYPE_BOOL; + if (constarray != nullptr) + { + values.resize(constarray->size()); + for (int i = 0; i < constarray->size(); i++) + values[i].u = convertData((*constarray)[i]); + } + break; + case glslang::EbtInt: default: u.dataType = DATA_BASETYPE_INT; if (constarray != nullptr) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index 3ad661164..473623f42 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -551,7 +551,8 @@ int Shader::getVertexAttributeIndex(const std::string &name) const Shader::UniformInfo *Shader::getUniformInfo(const std::string &name) const { - return &uniformInfos.at(name); + const auto it = uniformInfos.find(name); + return it != uniformInfos.end() ? &(it->second) : nullptr; } const Shader::UniformInfo *Shader::getUniformInfo(BuiltinUniform builtin) const @@ -656,6 +657,9 @@ void Shader::buildLocalUniforms(spirv_cross::Compiler &comp, const spirv_cross:: if (reflectionIt != validationReflection.localUniforms.end()) { const auto &localUniform = reflectionIt->second; + if (localUniform.dataType == DATA_BASETYPE_BOOL) + u.baseType = UNIFORM_BOOL; + const auto &values = localUniform.initializerValues; if (!values.empty()) memcpy(