From 98a5ba05072d31c755ce9fa7a8ba4d804eb376af Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 22 Apr 2016 14:35:39 +0200 Subject: [PATCH] Don't add swizzle at all if it's the identity, after combining extracts --- .../driver/shaders/spirv/spirv_disassemble.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index d3804fc8d..f7c2f8b51 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -1055,8 +1055,19 @@ struct SPVInstruction if(op->arguments[j]->op->literals[0] < 4) swizzleString += swizzle[ op->arguments[j]->op->literals[0] ]; } - - ret += StringFormat::Fmt("%s.%s", base.c_str(), swizzleString.c_str()); + + // if it ends up being the identity swizzle of the same size as the base, just insert + // the base. + if(swizzleString.length() < 4 && + swizzleString.length() == op->arguments[i]->op->arguments[0]->op->type->vectorSize && + !strncmp(swizzleString.c_str(), swizzle, swizzleString.length())) + { + ret += base; + } + else + { + ret += StringFormat::Fmt("%s.%s", base.c_str(), swizzleString.c_str()); + } added = true;