[Mesa-dev] [PATCH 2/3] nir: Add a new lowering option to lower all txd to txl.

Eric Anholt eric at anholt.net
Wed Nov 22 00:39:28 UTC 2017


VC5 requires that all txd are lowered in the shader.
---
 src/compiler/nir/nir.h           |  6 ++++++
 src/compiler/nir/nir_lower_tex.c | 14 ++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index f46f6147110a..dd969aeb81bd 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2584,6 +2584,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,
diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c
index bd603cc22884..1062afd97f01 100644
--- a/src/compiler/nir/nir_lower_tex.c
+++ b/src/compiler/nir/nir_lower_tex.c
@@ -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;
       }
-- 
2.15.0



More information about the mesa-dev mailing list