diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp index 9cece8c3..ebd5629c 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -414,6 +414,24 @@ namespace dxvk { return this->constComposite(vectorTypeId, count, args.data()); } + + + uint32_t SpirvModule::constuReplicant( + int32_t replicant, + uint32_t count) { + uint32_t value = this->constu32(replicant); + + std::array args = { value, value, value, value }; + + // Can't make a scalar composite. + if (count == 1) + return args[0]; + + uint32_t scalarTypeId = this->defIntType(32, 0); + uint32_t vectorTypeId = this->defVectorType(scalarTypeId, count); + + return this->constComposite(vectorTypeId, count, args.data()); + } uint32_t SpirvModule::constComposite( diff --git a/src/spirv/spirv_module.h b/src/spirv/spirv_module.h index 7ba1e991..618fd290 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -183,6 +183,10 @@ namespace dxvk { uint32_t constiReplicant( int32_t replicant, uint32_t count); + + uint32_t constuReplicant( + int32_t replicant, + uint32_t count); uint32_t constComposite( uint32_t typeId,