nir: Add a new lowering option to lower all txd to txl.
authorEric Anholt <eric@anholt.net>
Wed, 22 Nov 2017 00:21:36 +0000 (16:21 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 14 Dec 2017 22:36:17 +0000 (14:36 -0800)
VC5 requires that all txd are lowered in the shader.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_lower_tex.c

index 25c36c6..440c3fe 100644 (file)
@@ -2619,6 +2619,12 @@ typedef struct nir_lower_tex_options {
     * with lower_txd_cube_map.
     */
    bool lower_txd_shadow;
+
+   /**
+    * If true, lower nir_texop_txd on all samplers to a nir_texop_txl.
+    * Implies lower_txd_cube_map and lower_txd_shadow.
+    */
+   bool lower_txd;
 } nir_lower_tex_options;
 
 bool nir_lower_tex(nir_shader *shader,
index bd603cc..1062afd 100644 (file)
@@ -524,10 +524,9 @@ lower_gradient_cube_map(nir_builder *b, nir_tex_instr *tex)
 }
 
 static void
-lower_gradient_shadow(nir_builder *b, nir_tex_instr *tex)
+lower_gradient(nir_builder *b, nir_tex_instr *tex)
 {
    assert(tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE);
-   assert(tex->is_shadow);
    assert(tex->op == nir_texop_txd);
    assert(tex->dest.is_ssa);
 
@@ -809,16 +808,19 @@ nir_lower_tex_block(nir_block *block, nir_builder *b,
 
       if (tex->op == nir_texop_txd &&
           tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE &&
-          (options->lower_txd_cube_map ||
+          (options->lower_txd ||
+           options->lower_txd_cube_map ||
            (tex->is_shadow && options->lower_txd_shadow))) {
          lower_gradient_cube_map(b, tex);
          progress = true;
          continue;
       }
 
-      if (tex->op == nir_texop_txd && options->lower_txd_shadow &&
-          tex->is_shadow && tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE) {
-         lower_gradient_shadow(b, tex);
+      if (tex->op == nir_texop_txd &&
+          (options->lower_txd ||
+           (options->lower_txd_shadow &&
+            tex->is_shadow && tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE))) {
+         lower_gradient(b, tex);
          progress = true;
          continue;
       }