From 4112aa68a673db4a8b73bc53270fdfa7f68532bf Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 5 Jun 2018 23:34:37 -0400 Subject: gl_shader_gen: Add uniform handling for indirect const buffer access. --- src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/video_core/renderer_opengl/gl_shader_decompiler.cpp') diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 94c4858ea..44c8bf4d4 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -377,6 +377,21 @@ public: } } + std::string GetUniformIndirect(u64 index, s64 offset, const Register& index_reg, + GLSLRegister::Type type) { + declr_const_buffers[index].MarkAsUsedIndirect(index, stage); + std::string value = 'c' + std::to_string(index) + "[(floatBitsToInt(" + + GetRegister(index_reg, 0) + ") + " + std::to_string(offset) + ") / 4]"; + + if (type == GLSLRegister::Type::Float) { + return value; + } else if (type == GLSLRegister::Type::Integer) { + return "floatBitsToInt(" + value + ')'; + } else { + UNREACHABLE(); + } + } + /// Add declarations for registers void GenerateDeclarations() { for (const auto& reg : regs) { -- cgit v1.2.3