<div dir="ltr">On 4 October 2013 15:44, Eric Anholt <span dir="ltr"><<a href="mailto:eric@anholt.net" target="_blank">eric@anholt.net</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Now that both vec4 and fs are dynamically assigning offsets, a lot of the<br>
code is the same.<br>
---<br></blockquote><div><br></div><div>Since next_binding_table_offset is only used to into assign_common_binding_table_offsets(), I'd prefer to see it made into a function argument rather than a class member.  That way it wouldn't be necessary to grep through the code to verify that no one else uses it.<br>
<br></div><div>With that changed, this patch is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br><br></div><div>I already sent out a comment on patch 4/7.  The remainder of the series is:<br>
<br></div><div>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

 src/mesa/drivers/dri/i965/brw_fs.cpp           | 33 ++----------------<br>
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp   |  3 ++<br>
 src/mesa/drivers/dri/i965/brw_shader.cpp       | 47 ++++++++++++++++++++++++++<br>
 src/mesa/drivers/dri/i965/brw_shader.h         |  5 +++<br>
 src/mesa/drivers/dri/i965/brw_vec4.cpp         | 33 +-----------------<br>
 src/mesa/drivers/dri/i965/brw_vec4.h           |  1 -<br>
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |  2 ++<br>
 7 files changed, 61 insertions(+), 63 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
index 86ff378..13c6ddc 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp<br>
@@ -2943,37 +2943,10 @@ fs_visitor::setup_payload_gen6()<br>
 void<br>
 fs_visitor::assign_binding_table_offsets()<br>
 {<br>
-   int num_textures = _mesa_fls(fp->Base.SamplersUsed);<br>
-   int next = 0;<br>
+   c->prog_data.binding_table.render_target_start = next_binding_table_offset;<br>
+   next_binding_table_offset += c->key.nr_color_regions;<br>
<br>
-   c->prog_data.binding_table.render_target_start = next;<br>
-   next += c->key.nr_color_regions;<br>
-<br>
-   c->prog_data.base.binding_table.texture_start = next;<br>
-   next += num_textures;<br>
-<br>
-   if (shader) {<br>
-      c->prog_data.base.binding_table.ubo_start = next;<br>
-      next += shader->base.NumUniformBlocks;<br>
-   }<br>
-<br>
-   if (INTEL_DEBUG & DEBUG_SHADER_TIME) {<br>
-      c->prog_data.base.binding_table.shader_time_start = next;<br>
-      next++;<br>
-   }<br>
-<br>
-   if (fp->Base.UsesGather) {<br>
-      c->prog_data.base.binding_table.gather_texture_start = next;<br>
-      next += num_textures;<br>
-   }<br>
-<br>
-   /* This may or may not be used depending on how the compile goes. */<br>
-   c->prog_data.base.binding_table.pull_constants_start = next;<br>
-   next++;<br>
-<br>
-   assert(next < BRW_MAX_SURFACES);<br>
-<br>
-   /* c->prog_data.base.binding_table.size will be set by mark_surface_used. */<br>
+   assign_common_binding_table_offsets();<br>
 }<br>
<br>
 bool<br>
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp<br>
index 8fa7f9d..aa76231 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp<br>
@@ -2617,8 +2617,10 @@ fs_visitor::fs_visitor(struct brw_context *brw,<br>
    this->c = c;<br>
    this->brw = brw;<br>
    this->fp = fp;<br>
+   this->prog = &fp->Base;<br>
    this->shader_prog = shader_prog;<br>
    this->prog = &fp->Base;<br>
+   this->stage_prog_data = &c->prog_data.base;<br>
    this->ctx = &brw->ctx;<br>
    this->mem_ctx = ralloc_context(NULL);<br>
    if (shader_prog)<br>
@@ -2651,6 +2653,7 @@ fs_visitor::fs_visitor(struct brw_context *brw,<br>
<br>
    this->force_uncompressed_stack = 0;<br>
    this->force_sechalf_stack = 0;<br>
+   this->next_binding_table_offset = 0;<br>
<br>
    memset(&this->param_size, 0, sizeof(this->param_size));<br>
 }<br>
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
index 61c4bf5..b97bb5e 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
@@ -578,3 +578,50 @@ backend_visitor::dump_instructions()<br>
       dump_instruction(inst);<br>
    }<br>
 }<br>
+<br>
+<br>
+/**<br>
+ * Sets up the starting offsets for the groups of binding table entries<br>
+ * commong to all pipeline stages.<br>
+ *<br>
+ * Unused groups are initialized to 0xd0d0d0d0 to make it obvious that they're<br>
+ * unused but also make sure that addition of small offsets to them will<br>
+ * trigger some of our asserts that surface indices are < BRW_MAX_SURFACES.<br>
+ */<br>
+void<br>
+backend_visitor::assign_common_binding_table_offsets()<br>
+{<br>
+   int num_textures = _mesa_fls(prog->SamplersUsed);<br>
+<br>
+   stage_prog_data->binding_table.texture_start = next_binding_table_offset;<br>
+   next_binding_table_offset += num_textures;<br>
+<br>
+   if (shader) {<br>
+      stage_prog_data->binding_table.ubo_start = next_binding_table_offset;<br>
+      next_binding_table_offset += shader->base.NumUniformBlocks;<br>
+   } else {<br>
+      stage_prog_data->binding_table.ubo_start = 0xd0d0d0d0;<br>
+   }<br>
+<br>
+   if (INTEL_DEBUG & DEBUG_SHADER_TIME) {<br>
+      stage_prog_data->binding_table.shader_time_start = next_binding_table_offset;<br>
+      next_binding_table_offset++;<br>
+   } else {<br>
+      stage_prog_data->binding_table.shader_time_start = 0xd0d0d0d0;<br>
+   }<br>
+<br>
+   if (prog->UsesGather) {<br>
+      stage_prog_data->binding_table.gather_texture_start = next_binding_table_offset;<br>
+      next_binding_table_offset += num_textures;<br>
+   } else {<br>
+      stage_prog_data->binding_table.gather_texture_start = 0xd0d0d0d0;<br>
+   }<br>
+<br>
+   /* This may or may not be used depending on how the compile goes. */<br>
+   stage_prog_data->binding_table.pull_constants_start = next_binding_table_offset;<br>
+   next_binding_table_offset++;<br>
+<br>
+   assert(next_binding_table_offset <= BRW_MAX_SURFACES);<br>
+<br>
+   /* prog_data->base.binding_table.size will be set by mark_surface_used. */<br>
+}<br>
diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h<br>
index 41ab03a..85fedc2 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_shader.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_shader.h<br>
@@ -60,6 +60,9 @@ public:<br>
    struct brw_shader *shader;<br>
    struct gl_shader_program *shader_prog;<br>
    struct gl_program *prog;<br>
+   struct brw_stage_prog_data *stage_prog_data;<br>
+<br>
+   uint32_t next_binding_table_offset;<br>
<br>
    /** ralloc context for temporary data used during compile */<br>
    void *mem_ctx;<br>
@@ -72,6 +75,8 @@ public:<br>
<br>
    virtual void dump_instruction(backend_instruction *inst) = 0;<br>
    void dump_instructions();<br>
+<br>
+   void assign_common_binding_table_offsets();<br>
 };<br>
<br>
 uint32_t brw_texture_offset(ir_constant *offset);<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
index 43ec180..49c0127 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp<br>
@@ -1405,37 +1405,6 @@ vec4_visitor::emit_shader_time_write(enum shader_time_shader_type type,<br>
    emit(SHADER_OPCODE_SHADER_TIME_ADD, dst_reg(), src_reg(dst));<br>
 }<br>
<br>
-void<br>
-vec4_visitor::assign_binding_table_offsets()<br>
-{<br>
-   int num_textures = _mesa_fls(prog->SamplersUsed);<br>
-   int next = 0;<br>
-<br>
-   prog_data->base.binding_table.texture_start = next;<br>
-   next += num_textures;<br>
-<br>
-   if (shader) {<br>
-      prog_data->base.binding_table.ubo_start = next;<br>
-      next += shader->base.NumUniformBlocks;<br>
-   }<br>
-<br>
-   if (INTEL_DEBUG & DEBUG_SHADER_TIME) {<br>
-      prog_data->base.binding_table.shader_time_start = next;<br>
-      next++;<br>
-   }<br>
-<br>
-   if (prog->UsesGather) {<br>
-      prog_data->base.binding_table.gather_texture_start = next;<br>
-      next += num_textures;<br>
-   }<br>
-<br>
-   /* This may or may not be used depending on how the compile goes. */<br>
-   prog_data->base.binding_table.pull_constants_start = next;<br>
-   next++;<br>
-<br>
-   /* prog_data->base.binding_table.size will be set by mark_surface_used. */<br>
-}<br>
-<br>
 bool<br>
 vec4_visitor::run()<br>
 {<br>
@@ -1444,7 +1413,7 @@ vec4_visitor::run()<br>
    if (INTEL_DEBUG & DEBUG_SHADER_TIME)<br>
       emit_shader_time_begin();<br>
<br>
-   assign_binding_table_offsets();<br>
+   assign_common_binding_table_offsets();<br>
<br>
    emit_prolog();<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h<br>
index d75c46a..cebf573 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4.h<br>
@@ -332,7 +332,6 @@ public:<br>
    bool run(void);<br>
    void fail(const char *msg, ...);<br>
<br>
-   void assign_binding_table_offsets();<br>
    int virtual_grf_alloc(int size);<br>
    void setup_uniform_clipplane_values();<br>
    void setup_uniform_values(ir_variable *ir);<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp<br>
index 150bc31..5ecb6d2 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp<br>
@@ -3121,6 +3121,7 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,<br>
    this->prog = prog;<br>
    this->key = key;<br>
    this->prog_data = prog_data;<br>
+   this->stage_prog_data = &prog_data->base;<br>
<br>
    this->variable_ht = hash_table_ctor(0,<br>
                                       hash_table_pointer_hash,<br>
@@ -3138,6 +3139,7 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,<br>
    this->max_grf = brw->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;<br>
<br>
    this->uniforms = 0;<br>
+   this->next_binding_table_offset = 0;<br>
 }<br>
<br>
 vec4_visitor::~vec4_visitor()<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.4.rc3<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>