From c1073455bfb0ffe19a6f2f487966d44dc05f5f05 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 29 Jan 2021 16:29:26 +0100 Subject: [PATCH] [spirv] Add hasCapability method --- src/spirv/spirv_module.cpp | 19 +++++++++++++------ src/spirv/spirv_module.h | 3 +++ 2 files changed, 16 insertions(+), 6 deletions(-) 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);