From d76e944799cc58db4ee45c5670aeeaddfff3c77c Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 15 Apr 2020 15:11:52 +0100 Subject: [PATCH] Implement radians/degrees conversion functions --- .../shaders/spirv/spirv_debug_glsl450.cpp | 29 +++++++++++++++++++ util/test/demos/vk/vk_shader_debug_zoo.cpp | 10 +++++++ 2 files changed, 39 insertions(+) diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_glsl450.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_glsl450.cpp index 62f9eaae3..3fbca6058 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_glsl450.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_glsl450.cpp @@ -167,6 +167,33 @@ ShaderVariable Fract(ThreadState &state, const rdcarray ¶ms) return var; } +static const float piOver180 = 3.14159265358979323846f / 180.0f; +static const float piUnder180 = 180.0f / 3.14159265358979323846f; + +ShaderVariable Radians(ThreadState &state, const rdcarray ¶ms) +{ + CHECK_PARAMS(1); + + ShaderVariable var = state.GetSrc(params[0]); + + for(uint32_t c = 0; c < var.columns; c++) + var.value.fv[c] = var.value.fv[c] * piOver180; + + return var; +} + +ShaderVariable Degrees(ThreadState &state, const rdcarray ¶ms) +{ + CHECK_PARAMS(1); + + ShaderVariable var = state.GetSrc(params[0]); + + for(uint32_t c = 0; c < var.columns; c++) + var.value.fv[c] = var.value.fv[c] * piUnder180; + + return var; +} + ShaderVariable Pow(ThreadState &state, const rdcarray ¶ms) { CHECK_PARAMS(2); @@ -518,6 +545,8 @@ void ConfigureGLSLStd450(ExtInstDispatcher &extinst) EXT(Floor); EXT(Ceil); EXT(Fract); + EXT(Radians); + EXT(Degrees); EXT(Pow); EXT(Determinant); EXT(MatrixInverse); diff --git a/util/test/demos/vk/vk_shader_debug_zoo.cpp b/util/test/demos/vk/vk_shader_debug_zoo.cpp index 7096b5578..ccda73db4 100644 --- a/util/test/demos/vk/vk_shader_debug_zoo.cpp +++ b/util/test/demos/vk/vk_shader_debug_zoo.cpp @@ -571,6 +571,16 @@ void main() Color = vec4(float(sign(onei*2)), float(sign(negi*2)), float(sign(0)), 1.0f); break; } + case 69: + { + Color = vec4(degrees(negone*2.4f), degrees(posone*2.4f), degrees(zerof), degrees(posone*34.56f)); + break; + } + case 70: + { + Color = vec4(radians(negone*164.2f), radians(posone*164.2f), radians(zerof), radians(posone*3456.78f)); + break; + } default: break; } }