[spirv] Add non-uniform group instructions

This commit is contained in:
Philip Rebohle 2018-11-07 11:57:04 +01:00
parent c8e44085c5
commit 59d0ad4413
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 30 additions and 1 deletions

View File

@ -109,7 +109,7 @@ namespace dxvk {
void SpirvCodeBuffer::putHeader(uint32_t boundIds) {
this->putWord(spv::MagicNumber);
this->putWord(0x00010000); // v1.0
this->putWord(0x00010300); // v1.3
this->putWord(0); // Generator
this->putWord(boundIds);
this->putWord(0); // Schema

View File

@ -2872,6 +2872,28 @@ namespace dxvk {
}
uint32_t SpirvModule::opGroupNonUniformLogicalAnd(
uint32_t resultType,
uint32_t execution,
uint32_t operation,
uint32_t value,
uint32_t clusterSize) {
uint32_t resultId = this->allocateId();
m_code.putIns(spv::OpGroupNonUniformLogicalAnd,
6 + (clusterSize ? 1 : 0));
m_code.putWord(resultType);
m_code.putWord(resultId);
m_code.putWord(execution);
m_code.putWord(operation);
m_code.putWord(value);
if (clusterSize)
m_code.putWord(clusterSize);
return resultId;
}
void SpirvModule::opControlBarrier(
uint32_t execution,
uint32_t memory,

View File

@ -991,6 +991,13 @@ namespace dxvk {
uint32_t coordinates,
uint32_t reference,
const SpirvImageOperands& operands);
uint32_t opGroupNonUniformLogicalAnd(
uint32_t resultType,
uint32_t execution,
uint32_t operation,
uint32_t value,
uint32_t clusterSize);
void opControlBarrier(
uint32_t execution,