From 16cea83325a7f08a2e2421928ec7182850d57e4a Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 27 May 2020 07:32:02 +0100 Subject: [PATCH] [spirv] Implement constiReplicant 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 2e04f2e28..9cece8c32 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -396,6 +396,24 @@ namespace dxvk { return this->constComposite(vectorTypeId, count, args.data()); } + + + uint32_t SpirvModule::constiReplicant( + int32_t replicant, + uint32_t count) { + uint32_t value = this->consti32(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, 1); + 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 4202c66f5..7ba1e9911 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -179,6 +179,10 @@ namespace dxvk { uint32_t constbReplicant( bool replicant, uint32_t count); + + uint32_t constiReplicant( + int32_t replicant, + uint32_t count); uint32_t constComposite( uint32_t typeId,