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; }