From 33d7971364d69c7512ad410e1fa68a0c3448992f Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 2 Apr 2020 16:47:53 +0100 Subject: [PATCH] Mark integer divide by zero as "generated NaN of Inf" in shader debug --- renderdoc/driver/shaders/dxbc/dxbc_debug.cpp | 5 ++++ .../driver/shaders/spirv/spirv_debug.cpp | 24 ++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) 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)