[Mesa-dev] [PATCH RFC 0/8] nvc0: ARB_shader_image_load_store for Maxwell

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Jul 18 20:55:54 UTC 2016

Hi folks,

This series adds support for ARB_shader_image_load_store (GL 4.2) and
ARB_shader_image_size (GL 4.3) on Maxwell GPUs.

Maxwell family is slightly different regarding Fermi and Kepler because it
requires to use a texture view for each images. But this is actually quite
fine because the underlying hardware will handle a bunch of things that we
needed to do in software for previous generations.

However, this series *WILL NOT ENABLE* ARB_shader_image_load_store by default
for the following reasons:

a) Some subtests in arb_shader_image_load_store-atomicity totally hangs the
GPU because there is a race condition. The code is a loop which uses the
result of the surface atomic operation as the condition. The only way for
fixing this bad is to implement a sched calculator pass for Maxwell.
This actually allows to define read/write barriers like the blob does for
this specific case, and this might also improve performance.

b) Maxwell currently only exposes GL 3.3 because tessellation has still not
been figured out (I'm working on this but it's quite hard). So enabling the
extension is not going to help until this part is done.

To sum up, this series add "basic" support for images but it should work
in most cases.

Please review,

Samuel Pitoiset (8):
  nvc0: increase the tex handles area size in the driver cb
  nvc0: bind images for 3d/cp shaders on GM107+
  gm107/ir: lower surface operations
  gm107/ra: fix constraints for surface operations
  gm107/ir: add emission for SUSTx and SULDx
  gm107/ir: add emission for SUREDx
  nv50/ir: print OP_SUREDB subops in debug mode
  nvc0: disable MS images on GM107+

 .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 155 +++++++++++++++++++++
 .../nouveau/codegen/nv50_ir_lowering_nvc0.cpp      |  76 +++++++++-
 .../nouveau/codegen/nv50_ir_lowering_nvc0.h        |   2 +
 .../drivers/nouveau/codegen/nv50_ir_print.cpp      |   1 +
 src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp |  25 +++-
 src/gallium/drivers/nouveau/nvc0/nvc0_context.c    |   5 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_context.h    |  26 ++--
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c     |   7 +
 src/gallium/drivers/nouveau/nvc0/nvc0_state.c      |  10 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_tex.c        | 110 ++++++++++++++-
 src/gallium/drivers/nouveau/nvc0/nve4_compute.c    |  91 ++++++++++--
 11 files changed, 476 insertions(+), 32 deletions(-)


More information about the mesa-dev mailing list