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

Chris Forbes chrisf at ijw.co.nz
Thu May 29 13:59:26 PDT 2014


Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>

On Thu, May 29, 2014 at 7:32 PM, Chris Forbes <chrisf at ijw.co.nz> wrote:
> Did this test run include forcing ARB_gpu_shader5 on?
>
> On Thu, May 29, 2014 at 7:06 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
>> 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
>>
>> _______________________________________________
>> mesa-stable mailing list
>> mesa-stable at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-stable


More information about the mesa-dev mailing list