[Mesa-dev] [PATCH 0/3] brw surface builder / ssbo fixes

Iago Toral itoral at igalia.com
Mon Oct 19 02:41:32 PDT 2015


On Sun, 2015-10-18 at 21:31 -0700, Kristian Høgsberg Kristensen wrote:
> I've been giving the SSBO functionality a closer look and I found a
> few problems, each addressed by a patch in this series. The commit
> messages describe the issues and the fixes, but the net effect takes
> my vertex shader case from this:
> 
> add(8)          g7<1>D          g2<0,1,0>D      16D             { align1 1Q compacted };
> mov(1)          g9<1>UD         0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g16<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g11<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g18<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g13<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g20<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g15<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g29<1>UD        0D                              { align1 WE_all 1Q };
> mov(8)          g32<1>UD        g2<0,1,0>D                      { align1 1Q };
> mov(1)          g22<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g31<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g24<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g33<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g26<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g35<1>UD        0D                              { align1 WE_all 1Q };
> mov(1)          g28<1>UD        0x00000000UD                    { align1 WE_all compacted };
> mov(8)          g37<1>UD        0D                              { align1 WE_all 1Q };
> mov(8)          g119<1>UD       g1<8,8,1>UD                     { align1 WE_all 1Q compacted };
> mov(8)          g17<1>UD        g7<8,8,1>D                      { align1 1Q };
> mov(1)          g16.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g18.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g20.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g29.7<1>UD      65535D                          { align1 WE_all };
> add(8)          g34<1>UD        g32<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> mov(1)          g31.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g33.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g35.7<1>UD      65535D                          { align1 WE_all };
> mov(1)          g37.7<1>UD      65535D                          { align1 WE_all };
> add(8)          g19<1>UD        g17<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> and(1)          a0<1>UD         g9<0,1,0>UD     0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g10<1>UD        g16<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g36<1>UD        g34<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> and(1)          a0<1>UD         g22<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g124<1>UD       g31<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> and(1)          a0<1>UD         g24<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g125<1>UD       g33<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> and(1)          a0<1>UD         g11<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g12<1>UD        g18<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g21<1>UD        g19<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> add(8)          g120<1>F        g3<8,8,1>F      g10<8,8,1>F     { align1 1Q compacted };
> and(1)          a0<1>UD         g26<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g126<1>UD       g35<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g38<1>UD        g36<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> add(8)          g121<1>F        g4<8,8,1>F      g12<8,8,1>F     { align1 1Q compacted };
> and(1)          a0<1>UD         g13<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g14<1>UD        g20<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g30<1>UD        g21<8,8,1>UD    0x00000004UD    { align1 1Q compacted };
> and(1)          a0<1>UD         g28<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g127<1>UD       g37<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g122<1>F        g5<8,8,1>F      g14<8,8,1>F     { align1 1Q compacted };
> and(1)          a0<1>UD         g15<0,1,0>UD    0x000000ffUD    { align1 WE_all compacted };
> or(1)           a0<1>UD         a0<0,1,0>UD     0x04186e00UD    { align1 WE_all };
> send(8)         g16<1>UD        g29<8,8,1>UD    a0<0,1,0>UD
>                             dp data 1 indirect                              { align1 1Q compacted };
> add(8)          g123<1>F        g6<8,8,1>F      g16<8,8,1>F     { align1 1Q compacted };
> send(8)         null            g119<8,8,1>F
>                             urb 1 SIMD8 write mlen 9 rlen 0                 { align1 1Q EOT };
> 
> to this:
> 
> add(8)          g7<1>D          g2<0,1,0>D      16D             { align1 1Q compacted };
> mov(8)          g9<1>UD         g2<0,1,0>D                      { align1 1Q };
> mov(8)          g119<1>UD       g1<8,8,1>UD                     { align1 WE_all 1Q compacted };
> mov(8)          g8<1>UD         g7<8,8,1>D                      { align1 1Q };
> send(8)         g124<1>UD       g9<8,8,1>UD
>                             dp data 1 ( untyped surface read, Surface = 0, SIMD8, Mask = 0x0) mlen 1 rlen 4 { align1 1Q };
> send(8)         g7<1>UD         g8<8,8,1>UD
>                             dp data 1 ( untyped surface read, Surface = 0, SIMD8, Mask = 0x0) mlen 1 rlen 4 { align1 1Q };
> add(8)          g120<1>F        g3<8,8,1>F      g7<8,8,1>F      { align1 1Q compacted };
> add(8)          g121<1>F        g4<8,8,1>F      g8<8,8,1>F      { align1 1Q compacted };
> add(8)          g122<1>F        g5<8,8,1>F      g9<8,8,1>F      { align1 1Q compacted };
> add(8)          g123<1>F        g6<8,8,1>F      g10<8,8,1>F     { align1 1Q compacted };
> send(8)         null            g119<8,8,1>F
>                             urb 1 SIMD8 write mlen 9 rlen 0                 { align1 1Q EOT };

thanks Kristian, that looks like a big win! I granted Rb to patches 1
and 3. Patch 2 looks ok to me as well (I only had a minor comment) but I
am not familiar enough with that code so I'd rather let Curro give the
Rb for that one.

Iago

> Kristian Høgsberg Kristensen (3):
>   i965: Don't use message headers for typed/untyped reads
>   i965/fs: Make emit_uniformize a no-op for immediates
>   i965/fs: Read all components of a SSBO field with one send
> 
>  src/mesa/drivers/dri/i965/brw_eu_emit.c    |  3 +--
>  src/mesa/drivers/dri/i965/brw_fs.cpp       |  4 ++--
>  src/mesa/drivers/dri/i965/brw_fs_builder.h |  3 +++
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp   | 25 +++++++------------------
>  4 files changed, 13 insertions(+), 22 deletions(-)
> 




More information about the mesa-dev mailing list