From cfeb161c7ebf93bf6ac39e430fc998dc13abfc66 Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Sat, 31 Jul 2021 03:04:08 -0300
Subject: glsl/glasm: Pass and use scaling parameters in shaders

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

(limited to 'src/shader_recompiler/backend/glsl')

diff --git a/src/shader_recompiler/backend/glsl/emit_context.cpp b/src/shader_recompiler/backend/glsl/emit_context.cpp
index 7c9ed9159c..97bd593027 100644
--- a/src/shader_recompiler/backend/glsl/emit_context.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_context.cpp
@@ -394,7 +394,7 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile
         }
     }
     if (info.uses_rescaling_uniform) {
-        header += "layout(location=0) uniform float down_factor;";
+        header += "layout(location=0) uniform vec4 scaling;";
     }
     DefineConstantBuffers(bindings);
     DefineStorageBuffers(bindings);
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 3db3083f9d..542a792304 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
@@ -446,7 +446,7 @@ void EmitYDirection(EmitContext& ctx, IR::Inst& inst) {
 }
 
 void EmitResolutionDownFactor(EmitContext& ctx, IR::Inst& inst) {
-    ctx.AddF32("{}=down_factor;", inst);
+    ctx.AddF32("{}=scaling.y;", inst);
 }
 
 void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, std::string_view word_offset) {
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_image.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_image.cpp
index 099e0160b6..82b6f0d772 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_image.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_image.cpp
@@ -616,8 +616,8 @@ void EmitIsTextureScaled(EmitContext& ctx, IR::Inst& inst, const IR::Value& inde
     if (!index.IsImmediate()) {
         throw NotImplementedException("Non-constant texture rescaling");
     }
-    UNIMPLEMENTED();
-    ctx.AddU1("{}=true;", inst);
+    const u32 image_index{index.U32()};
+    ctx.AddU1("{}=(ftou(scaling.x)&{})!=0;", inst, 1u << image_index);
 }
 
 void EmitBindlessImageSampleImplicitLod(EmitContext&) {
-- 
cgit v1.2.3-70-g09d2