From 6fd190d1ae4275a06ed2e488401e1d63912954be Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Sat, 8 May 2021 16:28:52 -0300
Subject: glasm: Implement basic GLASM instructions

---
 .../backend/glasm/emit_context.cpp                  | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

(limited to 'src/shader_recompiler/backend/glasm/emit_context.cpp')

diff --git a/src/shader_recompiler/backend/glasm/emit_context.cpp b/src/shader_recompiler/backend/glasm/emit_context.cpp
index b4db4ff8f2..9f839f3bf7 100644
--- a/src/shader_recompiler/backend/glasm/emit_context.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_context.cpp
@@ -3,9 +3,28 @@
 // Refer to the license.txt file included.
 
 #include "shader_recompiler/backend/glasm/emit_context.h"
+#include "shader_recompiler/frontend/ir/program.h"
 
 namespace Shader::Backend::GLASM {
 
-EmitContext::EmitContext() = default;
+EmitContext::EmitContext(IR::Program& program) {
+    // FIXME: Temporary partial implementation
+    u32 cbuf_index{};
+    for (const auto& desc : program.info.constant_buffer_descriptors) {
+        if (desc.count != 1) {
+            throw NotImplementedException("Constant buffer descriptor array");
+        }
+        Add("CBUFFER c{}[]={{program.buffer[{}]}};", desc.index, cbuf_index);
+        ++cbuf_index;
+    }
+    for (const auto& desc : program.info.storage_buffers_descriptors) {
+        if (desc.count != 1) {
+            throw NotImplementedException("Storage buffer descriptor array");
+        }
+    }
+    if (const size_t num = program.info.storage_buffers_descriptors.size(); num > 0) {
+        Add("PARAM c[{}]={{program.local[0..{}]}};", num, num - 1);
+    }
+}
 
 } // namespace Shader::Backend::GLASM
-- 
cgit v1.2.3-70-g09d2