diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 37c4856d27..e5e87221b1 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -689,7 +689,7 @@ private:
     }
 
     std::string GenerateTexture(Operation operation, const std::string& func,
-                                std::string extra_cast(std::string) = nullptr) {
+                                bool is_extra_int = false) {
         constexpr std::array<const char*, 4> coord_constructors = {"float", "vec2", "vec3", "vec4"};
 
         const auto& meta = std::get<MetaTexture>(operation.GetMeta());
@@ -706,15 +706,24 @@ private:
             const bool is_extra = i >= meta.coords_count;
             const bool is_array = i == meta.array_index;
 
-            std::string operand = Visit(operation[i]);
-            if (is_extra && extra_cast != nullptr) {
-                operand = extra_cast(operand);
-            }
+            std::string operand = [&]() {
+                if (is_extra && is_extra_int) {
+                    if (const auto immediate = std::get_if<ImmediateNode>(operation[i])) {
+                        return std::to_string(static_cast<s32>(immediate->GetValue()));
+                    } else {
+                        return "ftoi(" + Visit(operation[i]) + ')';
+                    }
+                } else {
+                    return Visit(operation[i]);
+                }
+            }();
             if (is_array) {
                 ASSERT(!is_extra);
                 operand = "float(ftoi(" + operand + "))";
             }
+
             expr += operand;
+
             if (i + 1 == meta.coords_count) {
                 expr += ')';
             }
@@ -1118,16 +1127,8 @@ private:
 
     std::string F4TextureGather(Operation operation) {
         const auto meta = std::get<MetaTexture>(operation.GetMeta());
-
-        std::string expr;
-        if (meta.sampler.IsShadow()) {
-            expr = GenerateTexture(operation, "textureGather",
-                                   [](std::string ref_z) { return ref_z; });
-        } else {
-            expr = GenerateTexture(operation, "textureGather",
-                                   [](std::string comp) { return "ftoi(" + comp + ')'; });
-        }
-        return expr + GetSwizzle(meta.element);
+        return GenerateTexture(operation, "textureGather", !meta.sampler.IsShadow()) +
+               GetSwizzle(meta.element);
     }
 
     std::string F4TextureQueryDimensions(Operation operation) {