Hi, finally: ARB_shader_image_load_store (and ARB_shader_image_size) for radeonsi! You can also find this series at https://cgit.freedesktop.org/~nh/mesa/log/?h=images-radeonsi
You will need bleeding edge LLVM for this to work correctly, and not all required LLVM changes have been pushed upstream yet. You can find my LLVM tree here: https://cgit.freedesktop.org/~nh/llvm/?h=images Structure of the series: 1. Some additional Gallium bits for the glMemoryBarrier implementation and two additions to tgsi/scan that make life easier. 2. Image descriptor setting and uploading. 3. LLVM IR construction and descriptor handling in the shader. 4. coherent and volatile memory accesses; restrict is not handled specially, because it only serves to enable additional optimizations that LLVM currently cannot do anyway. 5. Memory barriers and a protection against lockups that is not really required by the spec but is nice to have anyway. Test coverage: All arb_shader_image_load_store-* piglit tests pass except: arb_shader_image_load_store-semantics, which shows some rgb10a2-related errors. Without having looked too closely, I suspect an error in the test, because the test expects alpha values of ~0.5. arb_shader_image_load_store-host-mem-barrier requires atomic counters and is skipped. I have done some separate testing of glMemoryBarrier, but it's admittedly not exhaustive. Warning: arb_shader_image_load_store-shader-mem-barrier exposes a bug in an earlier version of LLVM that results in an infinite loop in the shader (and hence a GPU hang). I have not tested this series with any games. If somebody is aware of a game that needs shader images but is happy without SSBO, counters, and compute shaders, pointers and testing are appreciated. Please review! Thanks, Nicolai -- docs/GL3.txt | 4 +- docs/relnotes/11.3.0.html | 2 + src/gallium/auxiliary/tgsi/tgsi_scan.c | 21 +- src/gallium/auxiliary/tgsi/tgsi_scan.h | 9 + .../drivers/radeon/r600_pipe_common.h | 2 + src/gallium/drivers/radeon/r600_texture.c | 4 +- src/gallium/drivers/radeonsi/si_blit.c | 36 +- .../drivers/radeonsi/si_descriptors.c | 206 +++++- src/gallium/drivers/radeonsi/si_pipe.c | 3 +- src/gallium/drivers/radeonsi/si_pipe.h | 7 + src/gallium/drivers/radeonsi/si_shader.c | 622 ++++++++++++++++- src/gallium/drivers/radeonsi/si_shader.h | 4 +- src/gallium/drivers/radeonsi/si_state.c | 75 +- src/gallium/drivers/radeonsi/si_state.h | 19 + src/gallium/include/pipe/p_defines.h | 7 + .../state_tracker/st_cb_texturebarrier.c | 21 +- 16 files changed, 973 insertions(+), 69 deletions(-) _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
