diff --git a/kraken/KRPipeline.cpp b/kraken/KRPipeline.cpp index ac856b8..075fc8b 100644 --- a/kraken/KRPipeline.cpp +++ b/kraken/KRPipeline.cpp @@ -441,7 +441,7 @@ void KRPipeline::initPushConstantStage(ShaderStage stage, const SpvReflectShader for (int iUniform = 0; iUniform < kPushConstantCount; iUniform++) { for (int iMember = 0; iMember < block.member_count; iMember++) { const SpvReflectBlockVariable& member = block.members[iMember]; - if (stricmp(SHADER_VALUE_NAMES[iUniform], member.name) == 0) { + if (IsShaderValueName(iUniform, member.name)) { pushConstants.offset[iUniform] = member.offset; pushConstants.size[iUniform] = member.size; if (member.type_description->op == SpvOpTypeVector && member.numeric.scalar.width == 32) { diff --git a/kraken/KRShaderReflection.cpp b/kraken/KRShaderReflection.cpp index c7565f6..989be63 100644 --- a/kraken/KRShaderReflection.cpp +++ b/kraken/KRShaderReflection.cpp @@ -30,6 +30,7 @@ // #include "KRShaderReflection.h" +#include "KRContext.h" using namespace hydra; @@ -105,6 +106,15 @@ const char* SHADER_VALUE_NAMES[] = { "fade_color", // PushConstant::fade_color }; +bool IsShaderValueName(int index, const char* szName) +{ + assert(index >= 0 && index <= (int)ShaderValue::NUM_SHADER_VALUES); + if (stricmp(SHADER_VALUE_NAMES[index], szName) == 0) { + return true; + } + return false; +} + bool KRReflectedObject::getShaderValue(ShaderValue value, ShaderValueType type, void* output) const { switch (type) { diff --git a/kraken/KRShaderReflection.h b/kraken/KRShaderReflection.h index 2a01cd3..262797e 100644 --- a/kraken/KRShaderReflection.h +++ b/kraken/KRShaderReflection.h @@ -125,7 +125,7 @@ enum class ShaderValue : uint8_t NUM_SHADER_VALUES }; -const char* SHADER_VALUE_NAMES[]; +bool IsShaderValueName(int index, const char* szName); class KRReflectedObject {