Here is an early version of basic compute shader for a5xx. I've already pushed a bunch of cleanup/prep work for this series. In the later driver specific parts of this series I am still fixing a couple things. And I completely lie about image support (required for ARB_compute_shader), so it is hidden under an FD_MESA_DEBUG=compute flag.
I figured I'd send it out in the current state to get review comments, especially on the first two (but any suggestions on the later bits welcome). Image support looks like it uses a similar instruction encoding as SSBOs (image atomics work the same way as SSBOs). And a4xx SSBO/image/ compute looks very similar to a5xx, so probably easy to get going. (Most of the register stuff for a4xx compute is known and the remaining few missing bits should be easy to work out. From the PoV of the shader compiler it is the same, and SSBO/image state looks basically the same.) Not sure how much time I'll have to work on images or a4xx parts in the near future, but if anyone is looking for a project... Rob Clark (9): nir: add pass to lower atomic counters to SSBO mesa/st: compute+SSBO support for glsl_to_nir freedreno/ir3: resync instr-a3xx.h/disasm-a3xx.c freedreno: core SSBO support freedreno/ir3: SSBO/atomic support freedreno/a5xx: SSBO support freedreno/ir3: compute shader support freedreno: core compute support freedreno/a5xx: basic experimental compute support src/compiler/Makefile.sources | 1 + src/compiler/nir/nir.h | 1 + src/compiler/nir/nir_lower_atomics_to_ssbo.c | 219 ++++++++++++++++ src/gallium/drivers/freedreno/Makefile.sources | 2 + src/gallium/drivers/freedreno/a2xx/disasm-a2xx.c | 2 +- src/gallium/drivers/freedreno/a5xx/fd5_compute.c | 175 +++++++++++++ src/gallium/drivers/freedreno/a5xx/fd5_compute.h | 34 +++ src/gallium/drivers/freedreno/a5xx/fd5_context.c | 2 + src/gallium/drivers/freedreno/a5xx/fd5_emit.c | 109 ++++++++ src/gallium/drivers/freedreno/a5xx/fd5_emit.h | 3 + src/gallium/drivers/freedreno/a5xx/fd5_program.c | 24 +- src/gallium/drivers/freedreno/a5xx/fd5_program.h | 2 + src/gallium/drivers/freedreno/disasm.h | 4 + src/gallium/drivers/freedreno/freedreno_context.h | 22 +- src/gallium/drivers/freedreno/freedreno_draw.c | 53 ++++ src/gallium/drivers/freedreno/freedreno_gmem.c | 7 + src/gallium/drivers/freedreno/freedreno_gmem.h | 1 + src/gallium/drivers/freedreno/freedreno_resource.c | 9 + src/gallium/drivers/freedreno/freedreno_screen.c | 143 ++++++++++- src/gallium/drivers/freedreno/freedreno_screen.h | 7 + src/gallium/drivers/freedreno/freedreno_state.c | 81 ++++++ src/gallium/drivers/freedreno/freedreno_util.h | 1 + src/gallium/drivers/freedreno/ir3/disasm-a3xx.c | 83 ++++++- src/gallium/drivers/freedreno/ir3/instr-a3xx.h | 77 +++++- src/gallium/drivers/freedreno/ir3/ir3.c | 74 +++++- src/gallium/drivers/freedreno/ir3/ir3.h | 39 ++- .../drivers/freedreno/ir3/ir3_compiler_nir.c | 276 +++++++++++++++++++-- src/gallium/drivers/freedreno/ir3/ir3_cp.c | 6 + src/gallium/drivers/freedreno/ir3/ir3_legalize.c | 7 +- src/gallium/drivers/freedreno/ir3/ir3_nir.c | 4 +- src/gallium/drivers/freedreno/ir3/ir3_shader.c | 86 ++++++- src/gallium/drivers/freedreno/ir3/ir3_shader.h | 18 +- src/mesa/state_tracker/st_glsl_to_nir.cpp | 14 ++ src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 3 +- src/mesa/state_tracker/st_program.c | 13 + src/mesa/state_tracker/st_program.h | 3 + 36 files changed, 1536 insertions(+), 69 deletions(-) create mode 100644 src/compiler/nir/nir_lower_atomics_to_ssbo.c create mode 100644 src/gallium/drivers/freedreno/a5xx/fd5_compute.c create mode 100644 src/gallium/drivers/freedreno/a5xx/fd5_compute.h -- 2.9.3 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
