From: Nicolai Hähnle <nicolai.haeh...@amd.com> Hi all,
Here's an updated version of the NIR backend series. Most of the comments have been integrated, and where they haven't been fully integrated, I think they could be addressed as a follow-up. The series has become shorter, since Dave pulled several of the ac/nir changes into master already, and I've pushed a bunch of other non-controversial changes as well. The main changes of the remaining patches relative to v1: 1. nir_lower_io is moved from st/mesa into the drivers (patch 10). This is a major change that affects freedreno / vc4, which I can't test. st/mesa is still responsible for assigning all the locations, e.g. for uniforms, var->data.driver_location is setup by st/mesa, and then the driver calls nir_lower_io, which uses that information. 2. nir_lower_uniforms_to_ubo now converts from load_uniform intrinsics to load_ubo, rather than directly from uniform variable load_vars. 3. GLSLFragCoordIsSysVal is handled cleanly with a NIR intrinsic. 4. radeonsi calls nir_lower_tex itself. 5. ac_shader_abi uses LLVMValueRefs instead of function parameter indices. We still don't apply nir_lower_io to input/output variables, keeping aligned with how radv does things. But this is now an issue entirely internal to radeonsi/radv, and can be cleaned up at our leisure if we think it makes sense. FWIW, dynamic array indexing still makes things awkward, because while nir_lower_io_to_temporaries helps with VS-PS inputs and outputs, it'd actually be preferable *not* to use it on API VS outputs when compiling VS-as-LS or VS-as-ES. Please review! Cheers, Nicolai -- src/amd/common/ac_llvm_build.c | 14 +- src/amd/common/ac_llvm_build.h | 4 +- src/amd/common/ac_nir_to_llvm.c | 1427 ++++++++++++--------- src/amd/common/ac_nir_to_llvm.h | 9 +- src/amd/common/ac_shader_abi.h | 95 ++ src/amd/common/ac_shader_info.c | 9 + src/amd/common/ac_shader_info.h | 2 + src/amd/vulkan/radv_cmd_buffer.c | 2 +- src/amd/vulkan/radv_pipeline.c | 2 +- src/compiler/Makefile.sources | 2 + src/compiler/glsl_types.cpp | 4 +- src/compiler/nir/nir.c | 17 + src/compiler/nir/nir.h | 5 + src/compiler/nir/nir_gather_info.c | 1 + src/compiler/nir/nir_intrinsics.h | 1 + src/compiler/nir/nir_lower_samplers_as_deref.c | 243 ++++ src/compiler/nir/nir_lower_uniforms_to_ubo.c | 97 ++ src/compiler/nir/nir_lower_wpos_ytransform.c | 6 +- src/compiler/nir_types.cpp | 7 + src/compiler/nir_types.h | 2 + src/gallium/docs/source/screen.rst | 2 + src/gallium/drivers/etnaviv/etnaviv_screen.c | 1 + src/gallium/drivers/freedreno/freedreno_screen.c | 1 + src/gallium/drivers/freedreno/ir3/ir3_cmdline.c | 15 +- src/gallium/drivers/freedreno/ir3/ir3_shader.c | 12 + src/gallium/drivers/freedreno/ir3/ir3_shader.h | 5 + src/gallium/drivers/i915/i915_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 1 + src/gallium/drivers/nouveau/nv30/nv30_screen.c | 1 + src/gallium/drivers/nouveau/nv50/nv50_screen.c | 1 + src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 1 + src/gallium/drivers/r300/r300_screen.c | 1 + src/gallium/drivers/r600/r600_pipe.c | 1 + src/gallium/drivers/radeon/r600_pipe_common.c | 1 + src/gallium/drivers/radeon/r600_pipe_common.h | 2 +- src/gallium/drivers/radeonsi/Automake.inc | 3 + src/gallium/drivers/radeonsi/Makefile.am | 1 + src/gallium/drivers/radeonsi/Makefile.sources | 1 + src/gallium/drivers/radeonsi/si_pipe.c | 40 + src/gallium/drivers/radeonsi/si_shader.c | 864 +++++++------ src/gallium/drivers/radeonsi/si_shader.h | 8 + src/gallium/drivers/radeonsi/si_shader_internal.h | 36 +- src/gallium/drivers/radeonsi/si_shader_nir.c | 508 ++++++++ src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 63 +- src/gallium/drivers/radeonsi/si_state_shaders.c | 46 +- src/gallium/drivers/softpipe/sp_screen.c | 1 + src/gallium/drivers/svga/svga_screen.c | 1 + src/gallium/drivers/swr/swr_screen.cpp | 1 + src/gallium/drivers/vc4/vc4_program.c | 13 +- src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/drivers/virgl/virgl_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/gallium/targets/d3dadapter9/Makefile.am | 1 + src/gallium/targets/omx/Makefile.am | 1 + src/gallium/targets/va/Makefile.am | 1 + src/gallium/targets/vdpau/Makefile.am | 1 + src/gallium/targets/xvmc/Makefile.am | 1 + src/mesa/Makefile.sources | 2 - src/mesa/state_tracker/st_glsl_to_nir.cpp | 28 +- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 5 +- src/mesa/state_tracker/st_glsl_types.cpp | 107 -- src/mesa/state_tracker/st_glsl_types.h | 44 - 62 files changed, 2542 insertions(+), 1233 deletions(-) create mode 100644 src/amd/common/ac_shader_abi.h create mode 100644 src/compiler/nir/nir_lower_samplers_as_deref.c create mode 100644 src/compiler/nir/nir_lower_uniforms_to_ubo.c create mode 100644 src/gallium/drivers/radeonsi/si_shader_nir.c delete mode 100644 src/mesa/state_tracker/st_glsl_types.cpp delete mode 100644 src/mesa/state_tracker/st_glsl_types.h -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev