diff --git a/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp b/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp index a35b9bc42..63d176cdc 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_debug.cpp @@ -1913,6 +1913,11 @@ void ThreadState::StepNext(ShaderDebugState *state, DebugAPIWrapper *apiWrapper, quot.value.uv[i] = srcOpers[1].value.uv[i] / srcOpers[2].value.uv[i]; rem.value.uv[i] = srcOpers[1].value.uv[i] - (quot.value.uv[i] * srcOpers[2].value.uv[i]); } + else + { + if(state) + state->flags |= ShaderEvents::GeneratedNanOrInf; + } } if(op.operands[0].type != TYPE_NULL) diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index 869205aae..c8f180035 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -784,20 +784,32 @@ void ThreadState::StepNext(ShaderDebugState *state, { for(uint8_t c = 0; c < var.columns; c++) { - if(b.value.uv[c] == 0) - var.value.uv[c] = ~0U; - else + if(b.value.iv[c] != 0) + { var.value.iv[c] /= b.value.iv[c]; + } + else + { + var.value.uv[c] = ~0U; + if(state) + state->flags |= ShaderEvents::GeneratedNanOrInf; + } } } else if(opdata.op == Op::UDiv) { for(uint8_t c = 0; c < var.columns; c++) { - if(b.value.uv[c] == 0) - var.value.uv[c] = ~0U; - else + if(b.value.uv[c] != 0) + { var.value.uv[c] /= b.value.uv[c]; + } + else + { + var.value.uv[c] = ~0U; + if(state) + state->flags |= ShaderEvents::GeneratedNanOrInf; + } } } else if(opdata.op == Op::IAdd)