diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index 19dfbf1ea..3076f7c92 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -2234,18 +2234,21 @@ void ThreadState::StepNext(bool useDebugState, const uint32_t steps, for(uint8_t c = 0; c < var.columns; c++) { #undef _IMPL -#define _IMPL(I, S, U) \ - const U bitcount = comp(count, c); \ - const U mask = bitcount == sizeof(U) * 8 ? ~0ULL : (U(1) << bitcount) - U(1); \ - \ - comp(var, c) >>= comp(offset, c); \ - comp(var, c) &= mask; \ - \ - if(opdata.op == Op::BitFieldSExtract) \ - { \ - U topbit = (mask + U(1)) >> U(1); \ - if(comp(var, c) & topbit) \ - comp(var, c) |= (~0ULL ^ mask); \ +#define _IMPL(I, S, U) \ + const U bitcount = comp(count, c); \ + if(bitcount < sizeof(U) * 8) \ + { \ + const U mask = (U(1) << bitcount) - U(1); \ + \ + comp(var, c) >>= comp(offset, c); \ + comp(var, c) &= mask; \ + \ + if(opdata.op == Op::BitFieldSExtract) \ + { \ + U topbit = (mask + U(1)) >> U(1); \ + if(comp(var, c) & topbit) \ + comp(var, c) |= (~0ULL ^ mask); \ + } \ } IMPL_FOR_INT_TYPES(_IMPL);