[Mesa-dev] [PATCH 0/3] Fix racy full-vector writes for v[i].x

Ian Romanick idr at freedesktop.org
Mon Nov 9 15:52:08 PST 2015


On 11/04/2015 03:55 PM, Jason Ekstrand wrote:
> Here's some shader-db  numbers:
> 
> total instructions in shared programs: 6236146 -> 6255385 (0.31%)
> instructions in affected programs:     203629 -> 222868 (9.45%)
> helped:                                118
> HURT:                                  1989
> GAINED:                                18
> LOST:                                  0

I recall from off-line discussions that many (almost all?) of the really
hurt shaders were vertex shaders that we no longer getting benefit from
the vectorizer pass.  How hard would be it be to modify the lowering
pass to have an option to only lower SSBOs and other memories that
actually need the early lowering?  We could then lower those early, do
the vectorizing, the lower the others late (as we do now).

I know we really want a NIR vectorizer, but I think that's a bigger
project than we want to tackle right now.  If we think this stop-gap
could be implemented quickly enough, maybe we should do that for now
instead.

> We should probably look into that.
> 
> 
> On Wed, Nov 4, 2015 at 3:33 PM, Kristian Høgsberg Kristensen
> <krh at bitplanet.net> wrote:
>> This little series fixes a problem where we lower
>>
>>   v[i] = s
>>
>> to
>>
>>   v = vector_insert(v, s, i)
>>
>> turning a component write into a full vector write. This used to be
>> ok, since none of this was visible to other threads.  Now with SSBOs
>> (and compute shader SLM and tesselation outputs) this rewrite is racy
>> and we have to handle this different in case the vector is in globally
>> visible storage.
>>
>> Kristian Høgsberg Kristensen (3):
>>   glsl: Drop exec_list argument to lower_ubo_reference
>>   glsl: Lower UBO and SSBO access in glsl linker
>>   glsl: Use array deref for access to vector components
>>
>>  src/glsl/Makefile.sources                  |   1 +
>>  src/glsl/ast_array_index.cpp               |   5 +-
>>  src/glsl/ast_function.cpp                  |  24 ++-----
>>  src/glsl/ast_to_hir.cpp                    |  43 ------------
>>  src/glsl/ir_optimization.h                 |   3 +-
>>  src/glsl/ir_validate.cpp                   |   7 +-
>>  src/glsl/linker.cpp                        |  10 +++
>>  src/glsl/lower_ubo_reference.cpp           |  18 ++++-
>>  src/glsl/lower_vector_derefs.cpp           | 104 +++++++++++++++++++++++++++++
>>  src/glsl/opt_dead_code_local.cpp           |   2 +
>>  src/mesa/drivers/dri/i965/brw_link.cpp     |   2 -
>>  src/mesa/drivers/dri/i965/brw_shader.cpp   |   2 +
>>  src/mesa/main/mtypes.h                     |   2 +
>>  src/mesa/state_tracker/st_extensions.c     |   1 +
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   1 -
>>  15 files changed, 151 insertions(+), 74 deletions(-)
>>  create mode 100644 src/glsl/lower_vector_derefs.cpp
>>
>> --
>> 2.6.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list