From: Kenneth Graunke Date: Thu, 29 May 2014 07:06:08 +0000 (-0700) Subject: i965: Don't emit SURFACE_STATEs for gather workarounds on Broadwell. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f6a99d1167b14a3ada7c1d6f41a5cc6f13290e0d;p=mesa.git i965: Don't emit SURFACE_STATEs for gather workarounds on Broadwell. 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 Reviewed-by: Chris Forbes Cc: "10.2" --- diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index 103c70b8cd5..2fa3ad945df 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -763,8 +763,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 c9d961491ae..3279d3bbbcb 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; }