From 362a591e5b09392dd383b9f67d9e0d756dd683d8 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 27 May 2020 07:32:40 +0100 Subject: [PATCH] [spirv] Implement constuReplicant helper --- src/spirv/spirv_module.cpp | 18 ++++++++++++++++++ src/spirv/spirv_module.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/src/spirv/spirv_module.cpp b/src/spirv/spirv_module.cpp index 9cece8c32..ebd5629c5 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 7ba1e9911..618fd290e 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,