From e144c17363ded7251c4f5a547c8c2b0ce1373a75 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sat, 27 Apr 2019 15:26:37 +0100 Subject: [PATCH] [spirv] Implement constfReplicant 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 269a9058..cf1a2c42 100644 --- a/src/spirv/spirv_module.cpp +++ b/src/spirv/spirv_module.cpp @@ -342,6 +342,24 @@ namespace dxvk { return this->constComposite(vectorTypeId, args.size(), args.data()); } + + + uint32_t SpirvModule::constfReplicant( + float replicant, + uint32_t count) { + uint32_t value = this->constf32(replicant); + + std::array args = { value, value, value, value }; + + // Can't make a scalar composite. + if (count == 1) + return args[0]; + + uint32_t scalarTypeId = this->defFloatType(32); + 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 5e7a5f61..7f66ee46 100644 --- a/src/spirv/spirv_module.h +++ b/src/spirv/spirv_module.h @@ -160,6 +160,10 @@ namespace dxvk { float y, float z, float w); + + uint32_t constfReplicant( + float replicant, + uint32_t count); uint32_t constComposite( uint32_t typeId,