From d39782e979991f2ae5a6a88c0366de463107b60d Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 22 Apr 2016 14:34:59 +0200 Subject: [PATCH] Remove need for type() constructor around shuffles of one vector --- .../driver/shaders/spirv/spirv_disassemble.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 76e66ce40..d3804fc8d 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -1448,7 +1448,10 @@ struct SPVInstruction maxShuffle = RDCMAX(maxShuffle, s); } - ret += op->type->GetName() + "("; + // if the vectors are identical, we're just doing a swizzle on one vector + // so there's no need for a surrounding constructor syntax + if(op->arguments[0] != op->arguments[1]) + ret += op->type->GetName() + "("; // sane path for 4-vectors or less if(maxShuffle < 4) @@ -1469,6 +1472,11 @@ struct SPVInstruction { s -= vec1type->vectorSize; vec = 1; + + // just for sanity, pretend it indexed into the first vector + // when they're identical - as we don't have constructor text + if(op->arguments[0] == op->arguments[1]) + vec = 0; } if(vec != lastvec) @@ -1490,7 +1498,8 @@ struct SPVInstruction RDCERR("Not disassembling a shuffle of a vector larger than 4 wide!"); } - ret += ")"; + if(op->arguments[0] != op->arguments[1]) + ret += ")"; return ret; }