From 07f60abf9e690da8cb4d1125ed735a98955376a5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 14 Apr 2020 18:02:10 +0100 Subject: [PATCH] Implement OpIsNan and OpIsInf --- .../driver/shaders/spirv/spirv_debug.cpp | 30 +++++++++++++++++++ util/test/demos/vk/vk_shader_debug_zoo.cpp | 20 +++++++++++++ 2 files changed, 50 insertions(+) diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index 98b7be36e..ef3d5e6e7 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -1111,6 +1111,36 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray SetDst(state, comp.result, var); break; } + case Op::IsNan: + { + OpIsNan is(it); + + ShaderVariable var = GetSrc(is.x); + + for(uint8_t c = 0; c < var.columns; c++) + var.value.uv[c] = isnan(var.value.fv[c]) ? 1 : 0; + + // TODO we should add a bool type + var.type = VarType::UInt; + + SetDst(state, is.result, var); + break; + } + case Op::IsInf: + { + OpIsNan is(it); + + ShaderVariable var = GetSrc(is.x); + + for(uint8_t c = 0; c < var.columns; c++) + var.value.uv[c] = isinf(var.value.fv[c]) ? 1 : 0; + + // TODO we should add a bool type + var.type = VarType::UInt; + + SetDst(state, is.result, var); + break; + } ////////////////////////////////////////////////////////////////////////////// // diff --git a/util/test/demos/vk/vk_shader_debug_zoo.cpp b/util/test/demos/vk/vk_shader_debug_zoo.cpp index f5a3c2188..378e99700 100644 --- a/util/test/demos/vk/vk_shader_debug_zoo.cpp +++ b/util/test/demos/vk/vk_shader_debug_zoo.cpp @@ -479,6 +479,26 @@ void main() Color = fwidthFine(vec4(inpos, inposIncreased)); break; } + case 52: + { + Color = vec4(isinf(posone) ? 1.0f : 0.0f, isinf(zerof) ? 1.0f : 0.0f, isinf(negone) ? 1.0f : 0.0f, 1.0f); + break; + } + case 53: + { + Color = vec4(isnan(posone) ? 1.0f : 0.0f, isnan(zerof) ? 1.0f : 0.0f, isnan(negone) ? 1.0f : 0.0f, 1.0f); + break; + } + case 54: + { + Color = vec4(isinf(posinf) ? 1.0f : 0.0f, isinf(neginf) ? 1.0f : 0.0f, isinf(nan) ? 1.0f : 0.0f, 1.0f); + break; + } + case 55: + { + Color = vec4(isnan(posinf) ? 1.0f : 0.0f, isnan(neginf) ? 1.0f : 0.0f, isnan(nan) ? 1.0f : 0.0f, 1.0f); + break; + } default: break; } }