diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp index e9a58395..5515a3fd 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -2872,6 +2872,38 @@ namespace dxvk { } + uint32_t SpirvModule::opGroupNonUniformBallot( + uint32_t resultType, + uint32_t execution, + uint32_t predicate) { + uint32_t resultId = this->allocateId(); + + m_code.putIns(spv::OpGroupNonUniformBallot, 5); + m_code.putWord(resultType); + m_code.putWord(resultId); + m_code.putWord(execution); + m_code.putWord(predicate); + return resultId; + } + + + uint32_t SpirvModule::opGroupNonUniformBallotBitCount( + uint32_t resultType, + uint32_t execution, + uint32_t operation, + uint32_t ballot) { + uint32_t resultId = this->allocateId(); + + m_code.putIns(spv::OpGroupNonUniformBallotBitCount, 6); + m_code.putWord(resultType); + m_code.putWord(resultId); + m_code.putWord(execution); + m_code.putWord(operation); + m_code.putWord(ballot); + return resultId; + } + + uint32_t SpirvModule::opGroupNonUniformLogicalAnd( uint32_t resultType, uint32_t execution, diff --git a/src/spirv/spirv_module.h b/src/spirv/spirv_module.h index 4789054e..da86ef90 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -992,6 +992,17 @@ namespace dxvk { uint32_t reference, const SpirvImageOperands& operands); + uint32_t opGroupNonUniformBallot( + uint32_t resultType, + uint32_t execution, + uint32_t predicate); + + uint32_t opGroupNonUniformBallotBitCount( + uint32_t resultType, + uint32_t execution, + uint32_t operation, + uint32_t ballot); + uint32_t opGroupNonUniformLogicalAnd( uint32_t resultType, uint32_t execution,