From 8b7d5912d61d56f65fb7e3a03bba544a4c40bfa6 Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Tue, 18 May 2021 21:04:09 -0300
Subject: glasm: Support textures used in more than one stage

---
 src/shader_recompiler/backend/glasm/emit_context.cpp | 10 +++++++++-
 1 file changed, 9 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 4903e9d8e1..d1fe84a5f6 100644
--- a/src/shader_recompiler/backend/glasm/emit_context.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_context.cpp
@@ -4,6 +4,7 @@
 
 #include <string_view>
 
+#include "shader_recompiler/backend/bindings.h"
 #include "shader_recompiler/backend/glasm/emit_context.h"
 #include "shader_recompiler/frontend/ir/program.h"
 
@@ -22,7 +23,7 @@ std::string_view InterpDecorator(Interpolation interp) {
 }
 } // Anonymous namespace
 
-EmitContext::EmitContext(IR::Program& program) {
+EmitContext::EmitContext(IR::Program& program, Bindings& bindings) : info{program.info} {
     // FIXME: Temporary partial implementation
     u32 cbuf_index{};
     for (const auto& desc : program.info.constant_buffer_descriptors) {
@@ -79,6 +80,13 @@ EmitContext::EmitContext(IR::Program& program) {
             Add("OUTPUT out_attr{}[]={{result.attrib[{}..{}]}};", index, index, index);
         }
     }
+    const size_t num_textures{program.info.texture_descriptors.size()};
+    texture_bindings.resize(num_textures);
+    for (size_t index = 0; index < num_textures; ++index) {
+        const auto& desc{program.info.texture_descriptors[index]};
+        texture_bindings[index] = bindings.texture;
+        bindings.texture += desc.count;
+    }
 }
 
 } // namespace Shader::Backend::GLASM
-- 
cgit v1.2.3-70-g09d2