From 88272c68558c1c0dc3af8b37a0157c62c45629da Mon Sep 17 00:00:00 2001 From: niki Date: Mon, 9 Oct 2023 20:07:32 +0200 Subject: [PATCH 1/3] vulkan: correctly identify boolean uniforms --- src/modules/graphics/Shader.cpp | 10 +++++++++- src/modules/graphics/vulkan/Shader.cpp | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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..932a4f7c8 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -614,6 +614,9 @@ void Shader::buildLocalUniforms(spirv_cross::Compiler &comp, const spirv_cross:: std::string name = basename + comp.get_member_name(type.self, uindex); + if (name == "Debug") + float x = 1.0f; + switch (memberType.basetype) { case SPIRType::Struct: @@ -656,6 +659,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( From 2749209fc7220d85d050b6cccc7a63a5da034d2e Mon Sep 17 00:00:00 2001 From: niki Date: Mon, 9 Oct 2023 20:12:13 +0200 Subject: [PATCH 2/3] vulkan: fix crash when using wrong uniform name --- src/modules/graphics/vulkan/Shader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index 932a4f7c8..086aad259 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 From 88f6bb880e4c9bdd4f44590700e15be81f980e10 Mon Sep 17 00:00:00 2001 From: niki Date: Mon, 9 Oct 2023 20:16:01 +0200 Subject: [PATCH 3/3] remove debug code --- src/modules/graphics/vulkan/Shader.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index 086aad259..473623f42 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -615,9 +615,6 @@ void Shader::buildLocalUniforms(spirv_cross::Compiler &comp, const spirv_cross:: std::string name = basename + comp.get_member_name(type.self, uindex); - if (name == "Debug") - float x = 1.0f; - switch (memberType.basetype) { case SPIRType::Struct: