Просмотр исходного кода

glsl: Fix program linking and cbuf

ameerj 5 лет назад
Родитель
Сommit
faf4cd72c5

+ 2 - 2
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;
     }
 }

+ 3 - 1
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,