nir/lower_tex: Report progress
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 11 Nov 2015 18:46:09 +0000 (10:46 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 23 Nov 2015 19:02:15 +0000 (11:02 -0800)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/glsl/nir/nir.h
src/glsl/nir/nir_lower_tex.c
src/mesa/drivers/dri/i965/brw_nir.c

index b4be145e5ecf5d4f746c1ec666a764059892d383..28c854590218cd4d86ca77a17c56b5a58598455a 100644 (file)
@@ -1994,7 +1994,7 @@ typedef struct nir_lower_tex_options {
    unsigned saturate_r;
 } nir_lower_tex_options;
 
-void nir_lower_tex(nir_shader *shader,
+bool nir_lower_tex(nir_shader *shader,
                    const nir_lower_tex_options *options);
 
 void nir_lower_idiv(nir_shader *shader);
index 8aaa48ab568e5bc40ac44b31d5ffc42355278556..21ed1032a0b1890eb960dee91ad5bd30481aa2ba 100644 (file)
@@ -41,6 +41,7 @@
 typedef struct {
    nir_builder b;
    const nir_lower_tex_options *options;
+   bool progress;
 } lower_tex_state;
 
 static void
@@ -239,15 +240,21 @@ nir_lower_tex_block(nir_block *block, void *void_state)
       /* If we are clamping any coords, we must lower projector first
        * as clamping happens *after* projection:
        */
-      if (lower_txp || sat_mask)
+      if (lower_txp || sat_mask) {
          project_src(b, tex);
+         state->progress = true;
+      }
 
       if ((tex->sampler_dim == GLSL_SAMPLER_DIM_RECT) &&
-          state->options->lower_rect)
+          state->options->lower_rect) {
          lower_rect(b, tex);
+         state->progress = true;
+      }
 
-      if (sat_mask)
+      if (sat_mask) {
          saturate_src(b, tex, sat_mask);
+         state->progress = true;
+      }
    }
 
    return true;
@@ -264,13 +271,17 @@ nir_lower_tex_impl(nir_function_impl *impl, lower_tex_state *state)
                                nir_metadata_dominance);
 }
 
-void
+bool
 nir_lower_tex(nir_shader *shader, const nir_lower_tex_options *options)
 {
    lower_tex_state state;
    state.options = options;
+   state.progress = false;
+
    nir_foreach_overload(shader, overload) {
       if (overload->impl)
          nir_lower_tex_impl(overload->impl, &state);
    }
+
+   return state.progress;
 }
index 16969530577f0515993198edcc4f5edf8aa72749..62f3171329ce11706c6bb820a86fc986fe030985 100644 (file)
@@ -260,7 +260,7 @@ brw_preprocess_nir(nir_shader *nir, bool is_scalar)
       .lower_txp = ~0,
    };
 
-   OPT_V(nir_lower_tex, &tex_options);
+   OPT(nir_lower_tex, &tex_options);
    OPT(nir_normalize_cubemap_coords);
 
    OPT(nir_lower_global_vars_to_local);