From e2076f238519ee21194c2e13e1e58948a2cb08c9 Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Tue, 10 Jan 2023 03:23:39 -0800 Subject: [PATCH] shader: Handle out-of-bounds uniform access via address register. (#16) --- src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 19634babe..645d6893e 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -333,8 +333,9 @@ private: return fmt::format("reg_tmp{}", index); case RegisterType::FloatUniform: if (address_register_index != 0) { - return fmt::format("uniforms.f[{} + address_registers.{}]", index, - "xyz"[address_register_index - 1]); + // TODO: Verify hardware behavior of out-of-bounds register number. + return fmt::format("({0} + address_registers.{1} < 96 ? uniforms.f[{0} + address_registers.{1}] : vec4(0))", + index, "xyz"[address_register_index - 1]); } return fmt::format("uniforms.f[{}]", index); default: