vc4: Make sure that vertex shader texture2D() calls use LOD 0.
authorEric Anholt <eric@anholt.net>
Fri, 4 Nov 2016 19:04:15 +0000 (12:04 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 4 Nov 2016 22:34:38 +0000 (15:34 -0700)
I noticed this while trying to debug glmark2 terrain (which does vertex
shader texturing, but no mipmaps on its textures sampled from the VS).

src/gallium/drivers/vc4/vc4_program.c

index 809c96dda3dfb02dbb6ad2b7f909bca0d6ef0ae0..f4be5f43c8c6bb9e1f1885603ca1f4a313336721 100644 (file)
@@ -417,6 +417,16 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
                 }
         }
 
+        if (c->stage != QSTAGE_FRAG && !is_txl) {
+                /* From the GLSL 1.20 spec:
+                 *
+                 *     "If it is mip-mapped and running on the vertex shader,
+                 *      then the base texture is used."
+                 */
+                is_txl = true;
+                lod = qir_uniform_ui(c, 0);
+        }
+
         if (c->key->tex[unit].force_first_level) {
                 lod = qir_uniform(c, QUNIFORM_TEXTURE_FIRST_LEVEL, unit);
                 is_txl = true;