[Mesa-dev] [PATCH 00/61] nir: Move to using instructions for derefs
Jason Ekstrand
jason at jlekstrand.net
Fri Mar 23 21:42:06 UTC 2018
This is something that Connor and I have been talking about for some time
now. The basic idea is to replace the current singly linked nir_deref list
with deref instructions. This is similar to what LLVM does and it offers
quite a bit more freedom when we start getting more realistic pointers from
compute applications.
This series implements an almost complete conversion for both i965 and anv.
The two remaining gaps are nir_lower_locals_to_regs and nir_lower_samplers.
The former will have to wait for ir3 to be converted and the later will
have to wait for radeonsi. I've got patches for nir_lower_samplers but not
nir_lower_samplers_as_deref which is required by at least radeonsi. Once
those are in place, we should be able to drop the lowering pass from the
Intel back-end completely.
The next step (which I will start on next week) will be removing legacy
derefs from core NIR. This will also involve significant reworks in some
passes such as vars_to_ssa which still uses legacy derefs internally even
for things which use deref instructions.
Clearly, we can't remove anything until all of the other drivers are
converted. However, this series should be a good basis for anyone wanting
to work on converting another driver since almost all of the core NIR
passes now work with both types of derefs so you can convert in whatever
way makes sense.
This series can be found as a branch on gitlab:
https://gitlab.freedesktop.org/jekstrand/mesa/commits/review/nir-deref-instrs-v1
Cc: Rob Clark <robdclark at gmail.com>
Cc: Timothy Arceri <tarceri at itsqueeze.com>
Cc: Eric Anholt <eric at anholt.net>
Cc: Connor Abbott <cwabbott0 at gmail.com>
Cc: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Cc: Karol Herbst <kherbst at redhat.com>
Jason Ekstrand (61):
nir: Add src/dest num_components helpers
nir: Return a cursor from nir_instr_remove
nir/vars_to_ssa: Remove copies from the correct set
nir/lower_indirect_derefs: Support interp_var_at intrinsics
intel/vec4: Set channel_sizes for MOV_INDIRECT sources
nir/validator: Validate that all used variables exist
nir: Add a deref instruction type
nir/builder: Add deref building helpers
nir: Add _deref versions of all of the _var intrinsics
nir: Add deref sources to texture instructions
nir: Add helpers for working with deref instructions
anv,i965,radv,st,ir3: Call nir_lower_deref_instrs
glsl/nir: Only claim to handle intrinsic functions
glsl/nir: Use deref instructions instead of dref chains
prog/nir: Simplify some load/store operations
prog/nir: Use deref instructions for params
nir/lower_atomics: Rework the main walker loop a bit
nir: Support deref instructions in remove_dead_variables
nir: Add a pass for fixing deref modes
nir: Support deref instructions in lower_global_vars_to_local
nir: Support deref instructions in lower_io_to_temporaries
nir: Add a deref path helper struct
nir: Support deref instructions in lower_var_copies
nir: Support deref instructions in split_var_copies
nir: Support deref instructions in lower_vars_to_ssa
nir: Support deref instructions in lower_indirect_derefs
nir/deref: Add a deref cleanup function
nir: Support deref instructions in lower_system_values
nir: Support deref instructions in lower_clip_cull
nir: Support deref instructions in propagate_invariant
nir: Support deref instructions in gather_info
nir: Support deref instructions in lower_io
nir: Support deref instructions in lower_atomics
nir: Support deref instructions in lower_wpos_ytransform
nir: Support deref instructions in lower_pos_center
nir: Support deref instructions in remove_unused_varyings
intel,ir3: Disable nir_opt_copy_prop_vars
intel/nir: Fixup deref modes after lowering patch vertices
i965: Move nir_lower_deref_instrs to right before locals_to_regs
st/nir: Move lower_deref_instrs later
spirv: Use deref instructions for most variables
nir: Add a concept of per-member structs and a lowering pass
nir/lower_system_values: Support SYSTEM_VALUE_LOCAL_GROUP_SIZE
spirv: Use the LOCAL_GROUP_SIZE system value
nir/spirv: Pass nir_variable_data into apply_var_decoration
anv/pipeline: Lower more constant initializers earlier
spirv: Use NIR per-member splitting
spirv: Make push constants an offset-based pointer
spirv: Clean up vtn_pointer_to_offset
spirv: Allow pointers to have a deref at the base
spirv: Update vtn_pointer_to/from_ssa to handle deref pointers
spirv: Record the type of functions
spirv/cfg: Make the builder fully capable for both walks
nir,spirv: Rework function calls
anv/pipeline: Do less deref instruction lowering
anv/pipeline: Convert lower_input_attachments to deref instructions
anv/pipeline: Convert YCbCr lowering to deref instructiosn
anv/apply_pipeline_layout: Simplify extract_tex_src_plane
anv/pipeline: Convert apply_pipeline_layout to deref instructions
intel/fs: Use image_deref intrinsics instead of image_var
intel/nir: Only lower load/store derefs
src/amd/vulkan/radv_shader.c | 10 +
src/compiler/Makefile.sources | 3 +
src/compiler/glsl/glsl_to_nir.cpp | 265 ++++------
src/compiler/nir/meson.build | 3 +
src/compiler/nir/nir.c | 107 ++--
src/compiler/nir/nir.h | 175 +++++-
src/compiler/nir/nir_builder.h | 236 +++++++++
src/compiler/nir/nir_clone.c | 65 ++-
src/compiler/nir/nir_deref.c | 393 ++++++++++++++
src/compiler/nir/nir_deref.h | 55 ++
src/compiler/nir/nir_gather_info.c | 26 +-
src/compiler/nir/nir_inline_functions.c | 193 +------
src/compiler/nir/nir_instr_set.c | 78 +++
src/compiler/nir/nir_intrinsics.h | 88 ++++
src/compiler/nir/nir_linking_helpers.c | 50 +-
src/compiler/nir/nir_lower_atomics.c | 137 ++++-
.../nir/nir_lower_clip_cull_distance_arrays.c | 69 ++-
src/compiler/nir/nir_lower_global_vars_to_local.c | 62 ++-
src/compiler/nir/nir_lower_indirect_derefs.c | 169 +++++-
src/compiler/nir/nir_lower_io.c | 70 ++-
src/compiler/nir/nir_lower_io_to_temporaries.c | 2 +
src/compiler/nir/nir_lower_system_values.c | 23 +-
src/compiler/nir/nir_lower_var_copies.c | 90 +++-
src/compiler/nir/nir_lower_vars_to_ssa.c | 77 ++-
src/compiler/nir/nir_lower_wpos_center.c | 13 +-
src/compiler/nir/nir_lower_wpos_ytransform.c | 51 +-
src/compiler/nir/nir_opt_copy_prop_vars.c | 19 +-
src/compiler/nir/nir_opt_copy_propagate.c | 62 ++-
src/compiler/nir/nir_opt_dce.c | 7 +
src/compiler/nir/nir_print.c | 119 +++--
src/compiler/nir/nir_propagate_invariant.c | 23 +-
src/compiler/nir/nir_remove_dead_variables.c | 117 +++-
src/compiler/nir/nir_serialize.c | 137 +++--
src/compiler/nir/nir_split_per_member_structs.c | 289 ++++++++++
src/compiler/nir/nir_split_var_copies.c | 42 ++
src/compiler/nir/nir_sweep.c | 4 -
src/compiler/nir/nir_validate.c | 143 +++--
src/compiler/spirv/spirv_to_nir.c | 180 ++++---
src/compiler/spirv/vtn_cfg.c | 231 ++++----
src/compiler/spirv/vtn_glsl450.c | 19 +-
src/compiler/spirv/vtn_private.h | 28 +-
src/compiler/spirv/vtn_variables.c | 586 +++++++--------------
src/gallium/drivers/freedreno/ir3/ir3_cmdline.c | 3 +
src/gallium/drivers/freedreno/ir3/ir3_nir.c | 2 +-
src/intel/compiler/brw_fs.h | 2 +-
src/intel/compiler/brw_fs_nir.cpp | 157 +++---
src/intel/compiler/brw_nir.c | 4 +-
src/intel/compiler/brw_vec4.cpp | 5 +-
src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 187 +++----
src/intel/vulkan/anv_nir_lower_input_attachments.c | 31 +-
src/intel/vulkan/anv_nir_lower_ycbcr_textures.c | 34 +-
src/intel/vulkan/anv_pipeline.c | 19 +-
src/mesa/drivers/dri/i965/brw_nir_uniforms.cpp | 2 +
src/mesa/drivers/dri/i965/brw_program.c | 1 +
src/mesa/program/prog_to_nir.c | 65 +--
src/mesa/state_tracker/st_glsl_to_nir.cpp | 2 +
56 files changed, 3451 insertions(+), 1579 deletions(-)
create mode 100644 src/compiler/nir/nir_deref.c
create mode 100644 src/compiler/nir/nir_deref.h
create mode 100644 src/compiler/nir/nir_split_per_member_structs.c
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list