[Mesa-dev] [PATCH 00/17] radv: Support for subgroup_vote and shader_ballot

2017-06-09 Thread Connor Abbott
From: Connor Abbott 

This series adds all the bits to enable EXT_shader_subgroup_vote and
EXT_shader_subgroup_ballot for radv. It's based on my previous series to
fix some 64-bit bugs in radv and anv, since nothing would work without
them.

Patches 1-4 are a resend of my previous series to add ARB_shader_ballot
and ARB_shader_group_vote support to NIR, with some changes suggested by
Jason and minor bugfixes. Patches 5-8 add SPIRV-to-NIR support for the
SPIR-V extensions. Finally, the rest of the patches move some of the
existing logic for ARB_shader_ballot and ARB_shader_group_vote into ac
when appropriate and turn on the extension for radv.

One question I had was about how to handle the differences between
SPIR-V and GL here. SPIR-V decided to make the things that return a
bitmask of invocations return a uvec4, whereas in the GL extension they
return a uint64_t. Right now, in NIR, we use the GL semantics, and we
translate that in vtn. I'm open to changing that, though.

I wrote a few crucible tests to test the extension (mostly copied from
the piglit ARB_shader_ballot and ARB_shader_group_vote coverage), which
I'll send out shortly. One of the tests is crashing because of
https://github.com/KhronosGroup/glslang/issues/930, but other than that
it passes the tests. I also made sure I didn't regress piglit on
radeonsi. It might be a good idea to run it on Intel's CI system,
especially given patches 5 and 6.

This series is also available at:
git://people.freedesktop.org/~cwabbott0/mesa radv-shader-ballot

Connor Abbott (17):
  nir: introduce new convergent and cross-thread attributes
  nir/gcm: use the new cross-thread attribute
  nir: take cross-thread operations into account into a few places
  nir: add ARB_shader_ballot and ARB_shader_group_vote instructions
  mesa: fix 64-bit issues with system_values_read
  compiler: add new system values for SPV_KHR_shader_ballot
  nir/lower_system_values: handle SPIR-V shader_ballot system values
  nir/spirv: add plumbing for KHR_shader_ballot and KHR_subgroup_vote
  ac: add i32_0 convenience member to ac_llvm_context
  radeonsi: move llvm_get_type_size() to ac
  radeonsi: move emit_optimization_barrier() to ac
  ac: add i64 type to ac_llvm_context
  radeonsi: move si_emit_ballot() to ac
  ac: add i32_1 convenience member to ac_llvm_context
  radeonsi: move the guts of ARB_shader_group_vote emission to ac
  ac: enable the AMDGPU asm parser
  radv/ac: enable EXT_shader_subgroup_ballot and
EXT_shader_subgroup_vote

 src/amd/common/ac_llvm_build.c | 127 +++
 src/amd/common/ac_llvm_build.h |  18 
 src/amd/common/ac_llvm_util.c  |   4 +
 src/amd/common/ac_nir_to_llvm.c|  75 
 src/amd/vulkan/radv_device.c   |   8 ++
 src/amd/vulkan/radv_pipeline.c |   2 +
 src/compiler/nir/nir.c |  28 ++
 src/compiler/nir/nir.h |  80 +
 src/compiler/nir/nir_instr_set.c   |  22 +
 src/compiler/nir/nir_intrinsics.h  |  30 +++
 src/compiler/nir/nir_lower_system_values.c |  38 
 src/compiler/nir/nir_opt_gcm.c |  72 +--
 src/compiler/nir/nir_opt_peephole_select.c |  11 +++
 src/compiler/shader_enums.c|   5 ++
 src/compiler/shader_enums.h|  11 +++
 src/compiler/spirv/nir_spirv.h |   2 +
 src/compiler/spirv/spirv_to_nir.c  |  80 +
 src/compiler/spirv/vtn_variables.c |  28 ++
 src/gallium/auxiliary/nir/tgsi_to_nir.c|   2 +-
 src/gallium/drivers/radeonsi/si_shader.c   | 136 +++--
 src/intel/compiler/brw_vec4_gs_visitor.cpp |   3 +-
 src/mesa/program/programopt.c  |   2 +-
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   9 +-
 src/mesa/state_tracker/st_mesa_to_tgsi.c   |   6 +-
 24 files changed, 617 insertions(+), 182 deletions(-)

-- 
2.9.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 00/17] radv: Support for subgroup_vote and shader_ballot

2017-06-12 Thread Nicolai Hähnle
FYI, somehow your mails don't show up in a single thread for me. They're 
in groups of 00-04, 05-09, 10-14, 15-17. Not sure what's up with that.


On 10.06.2017 01:43, Connor Abbott wrote:

From: Connor Abbott 

This series adds all the bits to enable EXT_shader_subgroup_vote and
EXT_shader_subgroup_ballot for radv. It's based on my previous series to
fix some 64-bit bugs in radv and anv, since nothing would work without
them.

Patches 1-4 are a resend of my previous series to add ARB_shader_ballot
and ARB_shader_group_vote support to NIR, with some changes suggested by
Jason and minor bugfixes. Patches 5-8 add SPIRV-to-NIR support for the
SPIR-V extensions. Finally, the rest of the patches move some of the
existing logic for ARB_shader_ballot and ARB_shader_group_vote into ac
when appropriate and turn on the extension for radv.

One question I had was about how to handle the differences between
SPIR-V and GL here. SPIR-V decided to make the things that return a
bitmask of invocations return a uvec4, whereas in the GL extension they
return a uint64_t. Right now, in NIR, we use the GL semantics, and we
translate that in vtn. I'm open to changing that, though.


Pragmatically, I'd say stick with the GL semantics for now. We'd only 
ever have to change that if somebody decides to build a GPU with 
128-wide waves, but given how having wider waves increasingly hurts with 
divergence, that seems unlikely to happen.




I wrote a few crucible tests to test the extension (mostly copied from
the piglit ARB_shader_ballot and ARB_shader_group_vote coverage), which
I'll send out shortly. One of the tests is crashing because of
https://github.com/KhronosGroup/glslang/issues/930, but other than that
it passes the tests.


Looks like an alternative GLSL-to-SPIRV compiler would really be nice to 
have...


I've sent comments on some of the patches, mostly the NIR attribute 
stuff. Sorry I didn't notice that sooner.


Cheers,
Nicolai



I also made sure I didn't regress piglit on
radeonsi. It might be a good idea to run it on Intel's CI system,
especially given patches 5 and 6.

This series is also available at:
git://people.freedesktop.org/~cwabbott0/mesa radv-shader-ballot

Connor Abbott (17):
   nir: introduce new convergent and cross-thread attributes
   nir/gcm: use the new cross-thread attribute
   nir: take cross-thread operations into account into a few places
   nir: add ARB_shader_ballot and ARB_shader_group_vote instructions
   mesa: fix 64-bit issues with system_values_read
   compiler: add new system values for SPV_KHR_shader_ballot
   nir/lower_system_values: handle SPIR-V shader_ballot system values
   nir/spirv: add plumbing for KHR_shader_ballot and KHR_subgroup_vote
   ac: add i32_0 convenience member to ac_llvm_context
   radeonsi: move llvm_get_type_size() to ac
   radeonsi: move emit_optimization_barrier() to ac
   ac: add i64 type to ac_llvm_context
   radeonsi: move si_emit_ballot() to ac
   ac: add i32_1 convenience member to ac_llvm_context
   radeonsi: move the guts of ARB_shader_group_vote emission to ac
   ac: enable the AMDGPU asm parser
   radv/ac: enable EXT_shader_subgroup_ballot and
 EXT_shader_subgroup_vote

  src/amd/common/ac_llvm_build.c | 127 +++
  src/amd/common/ac_llvm_build.h |  18 
  src/amd/common/ac_llvm_util.c  |   4 +
  src/amd/common/ac_nir_to_llvm.c|  75 
  src/amd/vulkan/radv_device.c   |   8 ++
  src/amd/vulkan/radv_pipeline.c |   2 +
  src/compiler/nir/nir.c |  28 ++
  src/compiler/nir/nir.h |  80 +
  src/compiler/nir/nir_instr_set.c   |  22 +
  src/compiler/nir/nir_intrinsics.h  |  30 +++
  src/compiler/nir/nir_lower_system_values.c |  38 
  src/compiler/nir/nir_opt_gcm.c |  72 +--
  src/compiler/nir/nir_opt_peephole_select.c |  11 +++
  src/compiler/shader_enums.c|   5 ++
  src/compiler/shader_enums.h|  11 +++
  src/compiler/spirv/nir_spirv.h |   2 +
  src/compiler/spirv/spirv_to_nir.c  |  80 +
  src/compiler/spirv/vtn_variables.c |  28 ++
  src/gallium/auxiliary/nir/tgsi_to_nir.c|   2 +-
  src/gallium/drivers/radeonsi/si_shader.c   | 136 +++--
  src/intel/compiler/brw_vec4_gs_visitor.cpp |   3 +-
  src/mesa/program/programopt.c  |   2 +-
  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   9 +-
  src/mesa/state_tracker/st_mesa_to_tgsi.c   |   6 +-
  24 files changed, 617 insertions(+), 182 deletions(-)




--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 00/17] radv: Support for subgroup_vote and shader_ballot

2017-06-12 Thread Connor Abbott
On Mon, Jun 12, 2017 at 2:30 AM, Nicolai Hähnle  wrote:
> FYI, somehow your mails don't show up in a single thread for me. They're in
> groups of 00-04, 05-09, 10-14, 15-17. Not sure what's up with that.

For some reason, the server at Valve rate-limits sending email, so git
send-email failed when I tried to send them all at once, and I had to
send some manually. Is there some way to automatically sleep between
sending emails out?

>
> On 10.06.2017 01:43, Connor Abbott wrote:
>>
>> From: Connor Abbott 
>>
>> This series adds all the bits to enable EXT_shader_subgroup_vote and
>> EXT_shader_subgroup_ballot for radv. It's based on my previous series to
>> fix some 64-bit bugs in radv and anv, since nothing would work without
>> them.
>>
>> Patches 1-4 are a resend of my previous series to add ARB_shader_ballot
>> and ARB_shader_group_vote support to NIR, with some changes suggested by
>> Jason and minor bugfixes. Patches 5-8 add SPIRV-to-NIR support for the
>> SPIR-V extensions. Finally, the rest of the patches move some of the
>> existing logic for ARB_shader_ballot and ARB_shader_group_vote into ac
>> when appropriate and turn on the extension for radv.
>>
>> One question I had was about how to handle the differences between
>> SPIR-V and GL here. SPIR-V decided to make the things that return a
>> bitmask of invocations return a uvec4, whereas in the GL extension they
>> return a uint64_t. Right now, in NIR, we use the GL semantics, and we
>> translate that in vtn. I'm open to changing that, though.
>
>
> Pragmatically, I'd say stick with the GL semantics for now. We'd only ever
> have to change that if somebody decides to build a GPU with 128-wide waves,
> but given how having wider waves increasingly hurts with divergence, that
> seems unlikely to happen.
>
>
>> I wrote a few crucible tests to test the extension (mostly copied from
>> the piglit ARB_shader_ballot and ARB_shader_group_vote coverage), which
>> I'll send out shortly. One of the tests is crashing because of
>> https://github.com/KhronosGroup/glslang/issues/930, but other than that
>> it passes the tests.
>
>
> Looks like an alternative GLSL-to-SPIRV compiler would really be nice to
> have...
>
> I've sent comments on some of the patches, mostly the NIR attribute stuff.
> Sorry I didn't notice that sooner.
>
> Cheers,
> Nicolai
>
>
>
>> I also made sure I didn't regress piglit on
>> radeonsi. It might be a good idea to run it on Intel's CI system,
>> especially given patches 5 and 6.
>>
>> This series is also available at:
>> git://people.freedesktop.org/~cwabbott0/mesa radv-shader-ballot
>>
>> Connor Abbott (17):
>>nir: introduce new convergent and cross-thread attributes
>>nir/gcm: use the new cross-thread attribute
>>nir: take cross-thread operations into account into a few places
>>nir: add ARB_shader_ballot and ARB_shader_group_vote instructions
>>mesa: fix 64-bit issues with system_values_read
>>compiler: add new system values for SPV_KHR_shader_ballot
>>nir/lower_system_values: handle SPIR-V shader_ballot system values
>>nir/spirv: add plumbing for KHR_shader_ballot and KHR_subgroup_vote
>>ac: add i32_0 convenience member to ac_llvm_context
>>radeonsi: move llvm_get_type_size() to ac
>>radeonsi: move emit_optimization_barrier() to ac
>>ac: add i64 type to ac_llvm_context
>>radeonsi: move si_emit_ballot() to ac
>>ac: add i32_1 convenience member to ac_llvm_context
>>radeonsi: move the guts of ARB_shader_group_vote emission to ac
>>ac: enable the AMDGPU asm parser
>>radv/ac: enable EXT_shader_subgroup_ballot and
>>  EXT_shader_subgroup_vote
>>
>>   src/amd/common/ac_llvm_build.c | 127
>> +++
>>   src/amd/common/ac_llvm_build.h |  18 
>>   src/amd/common/ac_llvm_util.c  |   4 +
>>   src/amd/common/ac_nir_to_llvm.c|  75 
>>   src/amd/vulkan/radv_device.c   |   8 ++
>>   src/amd/vulkan/radv_pipeline.c |   2 +
>>   src/compiler/nir/nir.c |  28 ++
>>   src/compiler/nir/nir.h |  80 +
>>   src/compiler/nir/nir_instr_set.c   |  22 +
>>   src/compiler/nir/nir_intrinsics.h  |  30 +++
>>   src/compiler/nir/nir_lower_system_values.c |  38 
>>   src/compiler/nir/nir_opt_gcm.c |  72 +--
>>   src/compiler/nir/nir_opt_peephole_select.c |  11 +++
>>   src/compiler/shader_enums.c|   5 ++
>>   src/compiler/shader_enums.h|  11 +++
>>   src/compiler/spirv/nir_spirv.h |   2 +
>>   src/compiler/spirv/spirv_to_nir.c  |  80 +
>>   src/compiler/spirv/vtn_variables.c |  28 ++
>>   src/gallium/auxiliary/nir/tgsi_to_nir.c|   2 +-
>>   src/gallium/drivers/radeonsi/si_shader.c   | 136
>> +++--
>>   src/intel/compiler/brw_vec4_gs_visitor.cpp |   3 +-
>>   src/mesa

Re: [Mesa-dev] [PATCH 00/17] radv: Support for subgroup_vote and shader_ballot

2017-06-12 Thread Mike Lothian
I found some patches on the git mailing list but looks like none of them
have been merged

http://git.661346.n2.nabble.com/PATCH-send-mail-Add-option-to-sleep-between-sending-each-email-td6769476.html

On Mon, 12 Jun 2017 at 23:22 Connor Abbott  wrote:

> On Mon, Jun 12, 2017 at 2:30 AM, Nicolai Hähnle 
> wrote:
> > FYI, somehow your mails don't show up in a single thread for me. They're
> in
> > groups of 00-04, 05-09, 10-14, 15-17. Not sure what's up with that.
>
> For some reason, the server at Valve rate-limits sending email, so git
> send-email failed when I tried to send them all at once, and I had to
> send some manually. Is there some way to automatically sleep between
> sending emails out?
>
> >
> > On 10.06.2017 01:43, Connor Abbott wrote:
> >>
> >> From: Connor Abbott 
> >>
> >> This series adds all the bits to enable EXT_shader_subgroup_vote and
> >> EXT_shader_subgroup_ballot for radv. It's based on my previous series to
> >> fix some 64-bit bugs in radv and anv, since nothing would work without
> >> them.
> >>
> >> Patches 1-4 are a resend of my previous series to add ARB_shader_ballot
> >> and ARB_shader_group_vote support to NIR, with some changes suggested by
> >> Jason and minor bugfixes. Patches 5-8 add SPIRV-to-NIR support for the
> >> SPIR-V extensions. Finally, the rest of the patches move some of the
> >> existing logic for ARB_shader_ballot and ARB_shader_group_vote into ac
> >> when appropriate and turn on the extension for radv.
> >>
> >> One question I had was about how to handle the differences between
> >> SPIR-V and GL here. SPIR-V decided to make the things that return a
> >> bitmask of invocations return a uvec4, whereas in the GL extension they
> >> return a uint64_t. Right now, in NIR, we use the GL semantics, and we
> >> translate that in vtn. I'm open to changing that, though.
> >
> >
> > Pragmatically, I'd say stick with the GL semantics for now. We'd only
> ever
> > have to change that if somebody decides to build a GPU with 128-wide
> waves,
> > but given how having wider waves increasingly hurts with divergence, that
> > seems unlikely to happen.
> >
> >
> >> I wrote a few crucible tests to test the extension (mostly copied from
> >> the piglit ARB_shader_ballot and ARB_shader_group_vote coverage), which
> >> I'll send out shortly. One of the tests is crashing because of
> >> https://github.com/KhronosGroup/glslang/issues/930, but other than that
> >> it passes the tests.
> >
> >
> > Looks like an alternative GLSL-to-SPIRV compiler would really be nice to
> > have...
> >
> > I've sent comments on some of the patches, mostly the NIR attribute
> stuff.
> > Sorry I didn't notice that sooner.
> >
> > Cheers,
> > Nicolai
> >
> >
> >
> >> I also made sure I didn't regress piglit on
> >> radeonsi. It might be a good idea to run it on Intel's CI system,
> >> especially given patches 5 and 6.
> >>
> >> This series is also available at:
> >> git://people.freedesktop.org/~cwabbott0/mesa radv-shader-ballot
> >>
> >> Connor Abbott (17):
> >>nir: introduce new convergent and cross-thread attributes
> >>nir/gcm: use the new cross-thread attribute
> >>nir: take cross-thread operations into account into a few places
> >>nir: add ARB_shader_ballot and ARB_shader_group_vote instructions
> >>mesa: fix 64-bit issues with system_values_read
> >>compiler: add new system values for SPV_KHR_shader_ballot
> >>nir/lower_system_values: handle SPIR-V shader_ballot system values
> >>nir/spirv: add plumbing for KHR_shader_ballot and KHR_subgroup_vote
> >>ac: add i32_0 convenience member to ac_llvm_context
> >>radeonsi: move llvm_get_type_size() to ac
> >>radeonsi: move emit_optimization_barrier() to ac
> >>ac: add i64 type to ac_llvm_context
> >>radeonsi: move si_emit_ballot() to ac
> >>ac: add i32_1 convenience member to ac_llvm_context
> >>radeonsi: move the guts of ARB_shader_group_vote emission to ac
> >>ac: enable the AMDGPU asm parser
> >>radv/ac: enable EXT_shader_subgroup_ballot and
> >>  EXT_shader_subgroup_vote
> >>
> >>   src/amd/common/ac_llvm_build.c | 127
> >> +++
> >>   src/amd/common/ac_llvm_build.h |  18 
> >>   src/amd/common/ac_llvm_util.c  |   4 +
> >>   src/amd/common/ac_nir_to_llvm.c|  75 
> >>   src/amd/vulkan/radv_device.c   |   8 ++
> >>   src/amd/vulkan/radv_pipeline.c |   2 +
> >>   src/compiler/nir/nir.c |  28 ++
> >>   src/compiler/nir/nir.h |  80 +
> >>   src/compiler/nir/nir_instr_set.c   |  22 +
> >>   src/compiler/nir/nir_intrinsics.h  |  30 +++
> >>   src/compiler/nir/nir_lower_system_values.c |  38 
> >>   src/compiler/nir/nir_opt_gcm.c |  72 +--
> >>   src/compiler/nir/nir_opt_peephole_select.c |  11 +++
> >>   src/compiler/shader_enums.c|   5 ++
>