From 109fad12acfba49121c34e6ff2cc1528cd5e0e2f Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 7 Apr 2020 21:16:55 +0100 Subject: [PATCH] Fix reading of negative constants --- renderdoc/driver/shaders/spirv/spirv_processor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_processor.cpp b/renderdoc/driver/shaders/spirv/spirv_processor.cpp index e9a1813e2..1a76e1f2a 100644 --- a/renderdoc/driver/shaders/spirv/spirv_processor.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_processor.cpp @@ -612,11 +612,12 @@ void Processor::RegisterOp(Iter it) else { // if it's signed, sign extend - if(type.scalar().signedness) + if(type.scalar().signedness && type.scalar().width < 16) { + // is the top bit set? if(v.value.uv[0] & (1 << (type.scalar().width - 1))) { - uint32_t mask = (1 << type.scalar().width) - 1; + uint32_t mask = 0xFFFFFFFFU >> (32 - type.scalar().width); v.value.uv[0] |= ~mask & ~0U; }