Hi, On Wed, Jul 5, 2017 at 3:47 AM, Nicolai Hähnle <nhaeh...@gmail.com> wrote: > 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.
Ok, that 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. Hmm... what's the exact issue? Is it that we might have to compile the same NIR shader with and without lower_io_to_temporaries? In that case, it might make sense to clone the shader before doing the lowering and keep around the original shader in case we need to compile it again in a different mode. > > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev