From 52de64de262e7e64ca8ac0454c8afe5249f94f2c Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 19 Feb 2018 17:41:37 +0000 Subject: [PATCH] Fix column major matrix transpose when reading cbuffer values. Refs #800 --- renderdoc/driver/shaders/spirv/spirv_disassemble.cpp | 4 ++-- renderdoc/driver/vulkan/vk_replay.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 55ba2e9e2..05a50eb50 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -536,7 +536,7 @@ struct SPVTypeData } else if(type == eMatrix) { - name = StringFormat::Fmt("%s%ux%u", baseType->GetName().c_str(), vectorSize, matrixSize); + name = StringFormat::Fmt("%s%ux%u", baseType->GetName().c_str(), matrixSize, vectorSize); } else if(type == ePointer) { @@ -3512,7 +3512,7 @@ void MakeConstantBlockVariable(ShaderConstant &outConst, SPVTypeData *type, cons else RDCERR("Unexpected base type of constant variable %u", type->baseType->type); - outConst.type.descriptor.rowMajorStorage = false; + outConst.type.descriptor.rowMajorStorage = (type->type == SPVTypeData::eVector); for(size_t d = 0; d < decorations.size(); d++) { diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 131a7d2b8..886d6f9a7 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -1489,12 +1489,12 @@ void VulkanReplay::FillCBufferVariables(rdcarray invars, { uint32_t tmp[16] = {0}; - for(uint32_t r = 0; r < rows; r++) + for(uint32_t c = 0; c < cols; c++) { - size_t srcoffs = 4 * elemByteSize * r; - size_t dstoffs = cols * elemByteSize * r; + size_t srcoffs = 4 * elemByteSize * c; + size_t dstoffs = rows * elemByteSize * c; memcpy((byte *)(tmp) + dstoffs, d + srcoffs, - RDCMIN(data.size() - dataOffset + srcoffs, elemByteSize * cols)); + RDCMIN(data.size() - dataOffset + srcoffs, elemByteSize * rows)); } // transpose