[Mesa-dev] [PATCH] i965: Don't emit SURFACE_STATEs for gather workarounds on Broadwell.

Kenneth Graunke kenneth at whitecape.org
Thu May 29 00:06:08 PDT 2014


As far as I can tell, Broadwell doesn't need any of the SURFACE_STATE
workarounds for textureGather() bugs, so there's no need to emit
a second set of identical copies.

To keep things simple, just point the gather surface index base to the
same place as the texture surface index base.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Cc: "10.2" <mesa-stable at lists.freedesktop.org>
---
 src/mesa/drivers/dri/i965/brw_shader.cpp         |  9 +++++++--
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 14 ++++++++------
 2 files changed, 15 insertions(+), 8 deletions(-)

No Piglit regressions on Broadwell with -t texture.

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp
index f4f1334..7fae416 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -740,8 +740,13 @@ backend_visitor::assign_common_binding_table_offsets(uint32_t next_binding_table
    }
 
    if (prog->UsesGather) {
-      stage_prog_data->binding_table.gather_texture_start = next_binding_table_offset;
-      next_binding_table_offset += num_textures;
+      if (brw->gen >= 8) {
+         stage_prog_data->binding_table.gather_texture_start =
+            stage_prog_data->binding_table.texture_start;
+      } else {
+         stage_prog_data->binding_table.gather_texture_start = next_binding_table_offset;
+         next_binding_table_offset += num_textures;
+      }
    } else {
       stage_prog_data->binding_table.gather_texture_start = 0xd0d0d0d0;
    }
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index c9d9614..3279d3b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -829,12 +829,14 @@ brw_update_texture_surfaces(struct brw_context *brw)
    /* emit alternate set of surface state for gather. this
     * allows the surface format to be overriden for only the
     * gather4 messages. */
-   if (vs && vs->UsesGather)
-      update_stage_texture_surfaces(brw, vs, &brw->vs.base, true);
-   if (gs && gs->UsesGather)
-      update_stage_texture_surfaces(brw, gs, &brw->gs.base, true);
-   if (fs && fs->UsesGather)
-      update_stage_texture_surfaces(brw, fs, &brw->wm.base, true);
+   if (brw->gen < 8) {
+      if (vs && vs->UsesGather)
+         update_stage_texture_surfaces(brw, vs, &brw->vs.base, true);
+      if (gs && gs->UsesGather)
+         update_stage_texture_surfaces(brw, gs, &brw->gs.base, true);
+      if (fs && fs->UsesGather)
+         update_stage_texture_surfaces(brw, fs, &brw->wm.base, true);
+   }
 
    brw->state.dirty.brw |= BRW_NEW_SURFACES;
 }
-- 
1.9.1



More information about the mesa-dev mailing list