summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-06-06 05:34:37 +0200
committerbunnei <bunneidev@gmail.com>2018-06-07 00:09:05 +0200
commit4112aa68a673db4a8b73bc53270fdfa7f68532bf (patch)
tree8b40b7928a58138b883236942d777651b5a9fe4c /src/video_core/renderer_opengl/gl_shader_decompiler.cpp
parentgl_shader_decompiler: Refactor uniform handling to allow different decodings. (diff)
downloadyuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar.gz
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar.bz2
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar.lz
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar.xz
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.tar.zst
yuzu-4112aa68a673db4a8b73bc53270fdfa7f68532bf.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_decompiler.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp15
1 files changed, 15 insertions, 0 deletions
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) {