From 8d73d24cab053679f9e618d45798253ec9144e31 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 4 Jul 2014 21:15:31 +0100 Subject: [PATCH] Handle matrices having each row/column padded out. Closes #69 --- renderdoc/driver/d3d11/d3d11_analyse.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_analyse.cpp b/renderdoc/driver/d3d11/d3d11_analyse.cpp index b57f97aa7..a2ca538c0 100644 --- a/renderdoc/driver/d3d11/d3d11_analyse.cpp +++ b/renderdoc/driver/d3d11/d3d11_analyse.cpp @@ -210,7 +210,16 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse if(columnMajor) { uint32_t tmp[16] = {0}; - memcpy(tmp, d, RDCMIN(data.size()-dataOffset, elemByteSize*rows*cols)); + + // matrices always have 4 columns, for padding reasons (the same reason arrays + // put every element on a new vec4) + for(uint32_t r=0; r < rows; r++) + { + size_t srcoffs = 4*elemByteSize*r; + size_t dstoffs = cols*elemByteSize*r; + memcpy((byte *)(tmp) + dstoffs, d + srcoffs, + RDCMIN(data.size()-dataOffset + srcoffs, elemByteSize*cols)); + } // transpose for(size_t r=0; r < rows; r++) @@ -219,7 +228,15 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse } else // CLASS_MATRIX_ROWS or other data not to transpose. { - memcpy(&outvars[outIdx].value.uv[0], d, RDCMIN(data.size()-dataOffset, elemByteSize*rows*cols)); + // matrices always have 4 columns, for padding reasons (the same reason arrays + // put every element on a new vec4) + for(uint32_t r=0; r < rows; r++) + { + size_t srcoffs = 4*elemByteSize*r; + size_t dstoffs = cols*elemByteSize*r; + memcpy((byte *)(&outvars[outIdx].value.uv[0]) + dstoffs, d + srcoffs, + RDCMIN(data.size()-dataOffset + srcoffs, elemByteSize*rows*cols)); + } } } }