diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp index 2ce7ce07..efd520ad 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -38,17 +38,24 @@ namespace dxvk { } + bool SpirvModule::hasCapability( + spv::Capability capability) { + for (auto ins : m_capabilities) { + if (ins.opCode() == spv::OpCapability && ins.arg(1) == capability) + return true; + } + + return false; + } + void SpirvModule::enableCapability( spv::Capability capability) { // Scan the generated instructions to check // whether we already enabled the capability. - for (auto ins : m_capabilities) { - if (ins.opCode() == spv::OpCapability && ins.arg(1) == capability) - return; + if (!hasCapability(capability)) { + m_capabilities.putIns (spv::OpCapability, 2); + m_capabilities.putWord(capability); } - - m_capabilities.putIns (spv::OpCapability, 2); - m_capabilities.putWord(capability); } diff --git a/src/spirv/spirv_module.h b/src/spirv/spirv_module.h index b0f270b2..007da72a 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -65,6 +65,9 @@ namespace dxvk { uint32_t allocateId(); + bool hasCapability( + spv::Capability capability); + void enableCapability( spv::Capability capability);