From c8791a6ba528d538b2bbc193a9c61339e1a1758d Mon Sep 17 00:00:00 2001 From: Robin Kertels Date: Fri, 20 Sep 2024 00:33:41 +0200 Subject: [PATCH] [d3d9] Don't emit 1-sized vector type in SWVP Emu Fixes a validation error. --- src/d3d9/d3d9_swvp_emu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/d3d9/d3d9_swvp_emu.cpp b/src/d3d9/d3d9_swvp_emu.cpp index 98ed77829..50cbe1ffc 100644 --- a/src/d3d9/d3d9_swvp_emu.cpp +++ b/src/d3d9/d3d9_swvp_emu.cpp @@ -262,8 +262,8 @@ namespace dxvk { // Bitcast to dwords before we write. uint32_t dwordCount = GetDecltypeSize(D3DDECLTYPE(element.Type)) / sizeof(uint32_t); - uint32_t dwordVector = m_module.opBitcast( - m_module.defVectorType(uint_t, dwordCount), + uint32_t dwordVal = m_module.opBitcast( + dwordCount != 1 ? m_module.defVectorType(uint_t, dwordCount) : uint_t, componentSet); // Finally write each dword to the buffer! @@ -271,7 +271,7 @@ namespace dxvk { std::array bufferIndices = { m_module.constu32(0), elementOffset }; uint32_t writeDest = m_module.opAccessChain(m_module.defPointerType(uint_t, spv::StorageClassUniform), buffer, bufferIndices.size(), bufferIndices.data()); - uint32_t currentDword = m_module.opCompositeExtract(uint_t, dwordVector, 1, &i); + uint32_t currentDword = dwordCount != 1 ? m_module.opCompositeExtract(uint_t, dwordVal, 1, &i) : dwordVal; m_module.opStore(writeDest, currentDword);