From faf4cd72c556421966782cece604b64fbafa5714 Mon Sep 17 00:00:00 2001
From: ameerj <52414509+ameerj@users.noreply.github.com>
Date: Fri, 21 May 2021 01:12:58 -0400
Subject: [PATCH] glsl: Fix program linking and cbuf

---
 src/shader_recompiler/backend/glsl/emit_context.cpp           | 4 ++--
 .../backend/glsl/emit_glsl_context_get_set.cpp                | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/shader_recompiler/backend/glsl/emit_context.cpp b/src/shader_recompiler/backend/glsl/emit_context.cpp
index b0e46cc07..8eea6344f 100644
--- a/src/shader_recompiler/backend/glsl/emit_context.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_context.cpp
@@ -29,8 +29,8 @@ void EmitContext::DefineConstantBuffers() {
     }
     u32 binding{};
     for (const auto& desc : info.constant_buffer_descriptors) {
-        Add("layout(std140,binding={}) uniform cbuf_{}{{uint cbuf{}[];}};", binding, binding,
-            desc.index, desc.count);
+        Add("layout(std140,binding={}) uniform cbuf_{}{{vec4 cbuf{}[{}];}};", binding, binding,
+            desc.index, 4 * 1024);
         ++binding;
     }
 }
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
index e45dfa42e..73f0faf35 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
@@ -32,7 +32,9 @@ void EmitGetCbufS16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR
 
 void EmitGetCbufU32(EmitContext& ctx, IR::Inst* inst, const IR::Value& binding,
                     const IR::Value& offset) {
-    ctx.Add("uint {}=cbuf{}[{}];", *inst, binding.U32(), offset.U32());
+    const auto u32_offset{offset.U32()};
+    ctx.Add("uint {}=floatBitsToUint(cbuf{}[{}][{}]);", *inst, binding.U32(), u32_offset / 16,
+            (u32_offset / 4) % 4);
 }
 
 void EmitGetCbufF32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR::Value& binding,