From 0113e8f360aed4b06e76e09d58726b38e02ee3c2 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 26 Nov 2018 15:08:32 +0100 Subject: [PATCH] [spirv] Add subgroup ballot instructions --- src/spirv/spirv_module.cpp | 32 ++++++++++++++++++++++++++++++++ src/spirv/spirv_module.h | 11 +++++++++++ 2 files changed, 43 insertions(+) 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,