[Mesa-dev] [PATCH 00/22] intel: Do storage image lowering in NIR
Jason Ekstrand
jason at jlekstrand.net
Fri Aug 17 20:06:06 UTC 2018
This patch series has been on my mind to write for a very long time now.
It moves the storage image lowering we have to do for Intel hardware into
NIR. This series makes several improvements:
1) The NIR optimizer can go to town on it and we can just improve the
optimizer instead of spending time carefully tuning our code-gen.
2) It also provides a nice separation between the image references
themselves and the parameters we have to push into the shader for
address calculations on BDW and earlier. This has always bothered me
in Vulkan because there we don't have a contiguous array of image slots
like in GL.
3) After this series, the binding table indices are passed directly into
the dataport messages instead of being pulled from a uniform. This
should be more efficient and makes shaders easier to read. It's also a
good step in the direction of being able to start using bindless for
images.
4) On Sky Lake and above, brw_image_param is no longer needed at all.
This will make Ken's life way easier as he tries to hook up images in
the new Gallium driver.
This series is also available as a branch on GitLab:
https://gitlab.freedesktop.org/jekstrand/mesa/commits/review/nir-image-load-store
Jason Ekstrand (22):
nir/algebraic: Be more careful converting ushr to extract_u8/16
nir/algebraic: Add more extract_[iu](8|16) optimizations
nir/algebraic: Add some max/min optimizations
nir/opcodes: Make unpack_half_2x16_split_* variable-width
nir/format_convert: Add support for unpacking signed integers
nir/format_convert: Add vec mask and sign-extend helpers
nir/format_convert: Rename nir_format_bitcast_uint_vec
nir/format_convert: Add [us]norm conversion helpers
nir/format_convert: Rename pack_r11g11b10f to pack_11f11f10f
nir/format_convert: Fix a bitmask in unpack_11f11f10f
nir: Make image load/store intrinsics variable-width
anv/pipeline: Remove dead image loads in lower_input_attacnments
nir/types: Add a wrapper for coordinate_components
intel/compiler: Do image load/store lowering to NIR
isl: Use the view array length for the image size
intel/compiler: Use two components for 1D array image sizes
glsl/link,i965: Make ImageAccess four-state
intel: Use TXQ for image_size when we have a typed surface
nir: Use a bitfield for image access qualifiers
nir: Add handle/index-based image intrinsics
anv,i965: Lower away image derefs in the driver
intel/compiler: Remove surface_idx from brw_image_param
src/amd/common/ac_nir_to_llvm.c | 4 +-
src/compiler/glsl/gl_nir_link_uniforms.c | 10 +-
src/compiler/glsl/glsl_to_nir.cpp | 28 +-
src/compiler/glsl/link_uniforms.cpp | 8 +-
src/compiler/nir/nir.h | 36 +-
src/compiler/nir/nir_format_convert.h | 137 ++-
src/compiler/nir/nir_intrinsics.py | 57 +-
src/compiler/nir/nir_opcodes.py | 8 +-
src/compiler/nir/nir_opt_algebraic.py | 20 +-
src/compiler/nir/nir_print.c | 33 +-
src/compiler/nir_types.cpp | 7 +
src/compiler/nir_types.h | 1 +
src/compiler/shader_enums.h | 10 +-
src/compiler/spirv/spirv_to_nir.c | 2 +
src/compiler/spirv/vtn_variables.c | 10 +-
src/intel/Makefile.sources | 1 +
src/intel/blorp/blorp_blit.c | 2 +-
src/intel/compiler/brw_compiler.h | 16 +-
src/intel/compiler/brw_eu_defines.h | 3 +
src/intel/compiler/brw_fs.cpp | 18 +-
src/intel/compiler/brw_fs.h | 3 +-
src/intel/compiler/brw_fs_generator.cpp | 26 +-
src/intel/compiler/brw_fs_nir.cpp | 319 +++--
src/intel/compiler/brw_fs_surface_builder.cpp | 1030 -----------------
src/intel/compiler/brw_fs_surface_builder.h | 20 -
src/intel/compiler/brw_nir.h | 8 +
.../compiler/brw_nir_lower_image_load_store.c | 867 ++++++++++++++
src/intel/compiler/brw_shader.cpp | 5 +
src/intel/compiler/meson.build | 1 +
src/intel/isl/isl_storage_image.c | 17 +-
.../vulkan/anv_nir_apply_pipeline_layout.c | 160 ++-
.../vulkan/anv_nir_lower_input_attachments.c | 4 +-
src/intel/vulkan/anv_pipeline.c | 2 +
src/intel/vulkan/genX_cmd_buffer.c | 2 -
.../drivers/dri/i965/brw_nir_uniforms.cpp | 133 ++-
src/mesa/drivers/dri/i965/brw_program.c | 3 +
.../drivers/dri/i965/brw_wm_surface_state.c | 24 +-
src/mesa/main/mtypes.h | 9 +-
38 files changed, 1630 insertions(+), 1414 deletions(-)
create mode 100644 src/intel/compiler/brw_nir_lower_image_load_store.c
--
2.17.1
More information about the mesa-dev
mailing list