From 3a27f8a76a2922ca2b7760c4ccb37543f05a74dd Mon Sep 17 00:00:00 2001 From: nmzik Date: Sat, 12 Sep 2026 15:43:47 +0400 Subject: [PATCH] build: fix SPIR-V enum word conversions --- .../recompiler/backend/spirv/SpirvBuilder.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/graphics/shader/recompiler/backend/spirv/SpirvBuilder.cpp b/src/graphics/shader/recompiler/backend/spirv/SpirvBuilder.cpp index ebf1f52ea..996a1abd7 100644 --- a/src/graphics/shader/recompiler/backend/spirv/SpirvBuilder.cpp +++ b/src/graphics/shader/recompiler/backend/spirv/SpirvBuilder.cpp @@ -38,7 +38,7 @@ void Builder::RequireVersion(uint32_t version) { void Builder::RequireCapability(spv::Capability capability) { if (m_required_capabilities.insert(capability).second) { - AppendInstruction(m_capabilities, spv::OpCapability, {capability}); + AppendInstruction(m_capabilities, spv::OpCapability, {static_cast(capability)}); } } @@ -77,7 +77,7 @@ uint32_t Builder::Type(spv::Op opcode, const std::vector& operands) { } const auto id = AllocateId(); m_declaration_ids.emplace(std::move(key), id); - std::vector words {opcode, id}; + std::vector words {static_cast(opcode), id}; words.insert(words.end(), operands.begin(), operands.end()); AppendInstructionWords(m_declarations, words.data(), words.size()); return id; @@ -88,7 +88,8 @@ uint32_t Builder::DecoratedType(spv::Op opcode, std::initializer_list if (annotations.size() == 0) { return Type(opcode, operands); } - std::vector key {opcode, static_cast(operands.size())}; + std::vector key {static_cast(opcode), + static_cast(operands.size())}; key.insert(key.end(), operands.begin(), operands.end()); key.push_back(static_cast(annotations.size())); for (const auto& annotation: annotations) { @@ -101,11 +102,11 @@ uint32_t Builder::DecoratedType(spv::Op opcode, std::initializer_list } const auto id = AllocateId(); m_declaration_ids.emplace(std::move(key), id); - std::vector words {opcode, id}; + std::vector words {static_cast(opcode), id}; words.insert(words.end(), operands.begin(), operands.end()); AppendInstructionWords(m_declarations, words.data(), words.size()); for (const auto& annotation: annotations) { - words = {annotation.opcode, id}; + words = {static_cast(annotation.opcode), id}; words.insert(words.end(), annotation.operands.begin(), annotation.operands.end()); AppendInstructionWords(m_annotations, words.data(), words.size()); } @@ -128,7 +129,7 @@ uint32_t Builder::Constant(spv::Op opcode, uint32_t type, const std::vector words {opcode, type, id}; + std::vector words {static_cast(opcode), type, id}; words.insert(words.end(), operands.begin(), operands.end()); AppendInstructionWords(m_declarations, words.data(), words.size()); return id; @@ -142,7 +143,8 @@ uint32_t Builder::DefineGlobalVariable(uint32_t pointer_type, spv::StorageClass void Builder::DefineGlobalVariable(uint32_t id, uint32_t pointer_type, spv::StorageClass storage_class) { - AppendInstruction(m_declarations, spv::OpVariable, {pointer_type, id, storage_class}); + AppendInstruction(m_declarations, spv::OpVariable, + {pointer_type, id, static_cast(storage_class)}); } void Builder::AppendString(std::vector& words, const char* text) { @@ -181,7 +183,7 @@ void Builder::AddMemoryModel(std::initializer_list operands) { void Builder::AddEntryPoint(spv::ExecutionModel execution_model, uint32_t entry_point, const char* name, const std::vector& interfaces) { - std::vector operands = {execution_model, entry_point}; + std::vector operands = {static_cast(execution_model), entry_point}; AppendString(operands, name); operands.insert(operands.end(), interfaces.begin(), interfaces.end()); if (m_version >= 0x00010400u) {