Right now the generator marks direct surfaces as used but leaves marking of
indirect surfaces to the caller. Just make the callers handle marking in both
cases for consistency.
---
 src/mesa/drivers/dri/i965/brw_vec4_generator.cpp |  6 -----
 src/mesa/drivers/dri/i965/brw_vec4_nir.cpp       | 32 ++++++++++++++----------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp 
b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
index ebb353a..297b7c2 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
@@ -274,8 +274,6 @@ generate_tex(struct brw_codegen *p,
                  inst->header_size != 0,
                  BRW_SAMPLER_SIMD_MODE_SIMD4X2,
                  return_format);
-
-      brw_mark_surface_used(&prog_data->base, sampler + 
base_binding_table_index);
    } else {
       /* Non-constant sampler index. */
 
@@ -309,10 +307,6 @@ generate_tex(struct brw_codegen *p,
                               inst->header_size != 0 /* header */,
                               BRW_SAMPLER_SIMD_MODE_SIMD4X2,
                               return_format);
-
-      /* visitor knows more than we do about the surface limit required,
-       * so has already done marking.
-       */
    }
 }
 
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp 
b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
index efbdaa9..e6d4c0c 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
@@ -1587,6 +1587,11 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
    src_reg sample_index;
    src_reg mcs;
 
+   unsigned binding_table_texture_start =
+      instr->op == nir_texop_tg4 ?
+         prog_data->base.binding_table.gather_texture_start :
+         prog_data->base.binding_table.texture_start;
+
    const glsl_type *dest_type =
       glsl_type_for_nir_alu_type(instr->dest_type,
                                  nir_tex_instr_dest_size(instr));
@@ -1604,6 +1609,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
    }
 
    /* Load the texture operation sources */
+   bool is_indirect_sampler = false;
    for (unsigned i = 0; i < instr->num_srcs; i++) {
       switch (instr->src[i].src_type) {
       case nir_tex_src_comparitor:
@@ -1672,19 +1678,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
          break;
 
       case nir_tex_src_sampler_offset: {
-         /* The highest sampler which may be used by this operation is
-          * the last element of the array. Mark it here, because the generator
-          * doesn't have enough information to determine the bound.
-          */
-         uint32_t array_size = instr->sampler_array_size;
-         uint32_t max_used = sampler + array_size - 1;
-         if (instr->op == nir_texop_tg4) {
-            max_used += prog_data->base.binding_table.gather_texture_start;
-         } else {
-            max_used += prog_data->base.binding_table.texture_start;
-         }
-
-         brw_mark_surface_used(&prog_data->base, max_used);
+         is_indirect_sampler = true;
 
          /* Emit code to evaluate the actual indexing expression */
          src_reg src = get_nir_src(instr->src[i].src, 1);
@@ -1705,6 +1699,18 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
       }
    }
 
+   if (!is_indirect_sampler) {
+      brw_mark_surface_used(&prog_data->base,
+                            binding_table_texture_start + sampler);
+   } else {
+      /* The highest sampler which may be used by this operation is
+       * the last element of the array.
+       */
+      uint32_t max_used = sampler + instr->sampler_array_size - 1;
+      brw_mark_surface_used(&prog_data->base,
+                            binding_table_texture_start + max_used);
+   }
+
    uint32_t constant_offset = 0;
    for (unsigned i = 0; i < 3; i++) {
       if (instr->const_offset[i] != 0) {
-- 
1.9.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to