[Mesa-dev] [PATCH 00/56] anv: Add support for Vulkan 1.1

Jason Ekstrand jason at jlekstrand.net
Wed Mar 7 14:34:48 UTC 2018


This patch series adds full support for Vulkan 1.1 to the Intel Linux
Vulkan driver.  As with the initial Vulkan 1.0 drop two years ago, this
driver is 100% Vulkan 1.1 conformant on all shipping Intel hardware gen8
and above.  Unlike our initial Vulkan 1.0 drop two years ago which was
missing piles of features, the Vulkan 1.1 implementation is nearly feature-
complete.  With the exception of 16-bit shader I/O (we have patches but
they are awaiting better testing), every optional feature which was added
to core in Vulkan 1.1 and which can reasonably be reasonably supported by
shipping hardware has been implemented.

The only significant feature implemented by this series is subgroups.  It
is part of Vulkan 1.1 core but there is no corresponding Vulkan extension.
All of the other significant features in Vulkan 1.1 have already been
ratified and released as extension and we have already landed support for
them.

In order to actually advertise support for Vulkan 1.1, we must be able to
advertise VK_KHR_external_fence which requires the SYNCOBJ_WAIT ioctl which
landed in Linux 4.14.  Users may need to update their kernel before they
will get full 1.1 support.

There are also quite a few patches in here to the entrypoints generator
and some of the other generators to handle various things required for
reporting a Vulkan version higher than 1.0.  In particular, we need to
handle name aliasing for entrypoints and enums.

All of the patches in this series have already been reviewed by people at
Intel or Igalia.  Unless there are any complaints, I plan to land the
patches this afternoon.  Dave and Bas also have some 1.1 patches and we're
going to have to work together to land them so that neither driver breaks
when we land the 1.1 XML.


Iago Toral Quiroga (2):
  anv/device: GetDeviceQueue2 should only return queues with matching
    flags
  anv/device: fail to initialize device if we have queues with
    unsupported flags

Jason Ekstrand (54):
  spirv: Add a vtn_constant_value helper
  spirv: Rework barriers
  vulkan: Rename multiview from KHX to KHR
  anv/entrypoints: Generalize the string map a bit
  anv/entrypoints_gen: A bit of refactoring
  anv/entrypoints_gen: Allow the string map to grow
  anv/entrypoints: Add an is_device_entrypoint helper
  anv/entrypoints: Allow an entrypoint to require multiple extensions
  anv/entrypoints_gen: Add support for aliases in the XML
  anv/extensions: Add support for multiple API versions
  anv/entrypoints: Generate #ifdef guards from platform attributes
  vulkan/enum_to_str: Add a add_value_from_xml helper to VkEnum
  vulkan/enum_to_str: Add support for aliases and new Vulkan versions
  vulkan: Update the XML and headers to 1.1.70
  spirv: Update the SPIR-V headers and json to 1.3.1
  anv: Add version 1.1.0 but leave it disabled
  Get rid of a bunch of KHR suffixes
  anv/entrypoints: Drop support for protect attributes
  anv: Support VkPhysicalDeviceShaderDrawParameterFeatures
  anv: Implement VK_KHR_maintenance3
  nir/spirv: Add support for device groups
  anv: Implement vkCmdDispatchBase
  anv: Trivially implement VK_KHR_device_group
  anv: Implement GetDeviceQueue2
  anv: Support querying for protected memory
  anv: Implement vkEnumerateInstanceVersion
  anv: Stop returning VK_ERROR_INCOMPATIBLE_DRIVER
  spirv: Handle the new OpModuleProcessed instruction
  nir: Add new SPIR-V ballot ALU intrinsics and lowering
  compiler: Add two new system values for subgroups
  nir: Add new SPIR-V ballot intrinsics and lowering
  spirv: Add initial subgroup support
  i965/fs: Implement basic SPIR-V subgroup intrinsics
  spirv: Add subgroup ballot support
  nir: Generalize nir_intrinsic_vote_eq
  spirv: Add subgroup vote support
  nir/lower_subgroups: Add scalarizing for vote_eq
  i965/fs: Support nir_intrinsic_vote_feq
  nir: Add subgroup shuffle intrinsics and lowering
  spirv: Add subgroup shuffle support
  i965/fs: Add support for nir_intrinsic_shuffle
  nir: Add quad operations and lowering
  spirv: Add subgroup quad support
  nir: Add subgroup arithmetic reduction intrinsics
  nir: Add a helper for getting binop identities
  spirv: Add support for subgroup arithmetic
  intel/fs: Add a couple of simple helper opcodes
  intel/fs: Add a helper for emitting scan operations
  intel/fs: Implement reduce and scan opeprations
  intel/fs: Add support for subgroup quad operations
  anv: Add support for SPIR-V 1.3 subgroup operations
  anv: Enable Vulkan 1.1
  vulkan/util: Add a helper to get a version override
  anv: Support version overrides

 docs/envvars.html                                 |   10 +
 include/vulkan/vk_platform.h                      |   28 -
 include/vulkan/vulkan.h                           | 7029 +-------------------
 include/vulkan/vulkan_android.h                   |   60 +
 include/vulkan/vulkan_core.h                      | 7293 +++++++++++++++++++++
 include/vulkan/vulkan_ios.h                       |   58 +
 include/vulkan/vulkan_macos.h                     |   58 +
 include/vulkan/vulkan_mir.h                       |   65 +
 include/vulkan/vulkan_vi.h                        |   58 +
 include/vulkan/vulkan_wayland.h                   |   65 +
 include/vulkan/vulkan_win32.h                     |  276 +
 include/vulkan/vulkan_xcb.h                       |   66 +
 include/vulkan/vulkan_xlib.h                      |   66 +
 include/vulkan/vulkan_xlib_randr.h                |   54 +
 include/vulkan/vulkan_xlib_xrandr.h               |   54 +
 src/compiler/Makefile.sources                     |    1 +
 src/compiler/glsl/glsl_to_nir.cpp                 |    5 +-
 src/compiler/nir/meson.build                      |    1 +
 src/compiler/nir/nir.c                            |   76 +
 src/compiler/nir/nir.h                            |   18 +
 src/compiler/nir/nir_intrinsics.h                 |   62 +-
 src/compiler/nir/nir_lower_subgroups.c            |  203 +-
 src/compiler/nir/nir_lower_system_values.c        |    5 +
 src/compiler/nir/nir_opt_intrinsics.c             |    3 +-
 src/compiler/nir/nir_print.c                      |    5 +
 src/compiler/shader_enums.c                       |    3 +
 src/compiler/shader_enums.h                       |   11 +
 src/compiler/shader_info.h                        |    7 +
 src/compiler/spirv/spirv.core.grammar.json        |  885 ++-
 src/compiler/spirv/spirv.h                        |   60 +-
 src/compiler/spirv/spirv_to_nir.c                 |  199 +-
 src/compiler/spirv/vtn_private.h                  |    9 +
 src/compiler/spirv/vtn_subgroup.c                 |  379 ++
 src/compiler/spirv/vtn_variables.c                |   40 +
 src/intel/Makefile.sources                        |    1 +
 src/intel/compiler/brw_compiler.c                 |    1 +
 src/intel/compiler/brw_compiler.h                 |   11 +
 src/intel/compiler/brw_eu_defines.h               |   27 +
 src/intel/compiler/brw_fs.cpp                     |   35 +
 src/intel/compiler/brw_fs.h                       |    5 +
 src/intel/compiler/brw_fs_builder.h               |  141 +
 src/intel/compiler/brw_fs_generator.cpp           |  171 +
 src/intel/compiler/brw_fs_nir.cpp                 |  272 +-
 src/intel/compiler/brw_ir_fs.h                    |    7 +
 src/intel/compiler/brw_nir.c                      |    4 +-
 src/intel/compiler/brw_nir_lower_cs_intrinsics.c  |   18 +
 src/intel/compiler/brw_reg.h                      |    8 +
 src/intel/compiler/brw_shader.cpp                 |    9 +
 src/intel/vulkan/anv_batch_chain.c                |    2 +-
 src/intel/vulkan/anv_cmd_buffer.c                 |   19 +-
 src/intel/vulkan/anv_descriptor_set.c             |   63 +-
 src/intel/vulkan/anv_device.c                     |  303 +-
 src/intel/vulkan/anv_entrypoints_gen.py           |  302 +-
 src/intel/vulkan/anv_extensions.py                |   46 +-
 src/intel/vulkan/anv_extensions_gen.py            |   26 +-
 src/intel/vulkan/anv_formats.c                    |  174 +-
 src/intel/vulkan/anv_image.c                      |   52 +-
 src/intel/vulkan/anv_nir.h                        |    3 +
 src/intel/vulkan/anv_nir_add_base_work_group_id.c |   93 +
 src/intel/vulkan/anv_nir_lower_ycbcr_textures.c   |   20 +-
 src/intel/vulkan/anv_pass.c                       |    4 +-
 src/intel/vulkan/anv_pipeline.c                   |    9 +
 src/intel/vulkan/anv_private.h                    |   58 +-
 src/intel/vulkan/anv_queue.c                      |   78 +-
 src/intel/vulkan/anv_wsi.c                        |   22 +
 src/intel/vulkan/genX_cmd_buffer.c                |   59 +-
 src/intel/vulkan/genX_pipeline.c                  |    2 +-
 src/intel/vulkan/genX_state.c                     |    6 +-
 src/intel/vulkan/meson.build                      |    1 +
 src/intel/vulkan/vk_format_info.h                 |   50 +-
 src/vulkan/registry/vk.xml                        | 3400 ++++++----
 src/vulkan/util/gen_enum_to_str.py                |   49 +-
 src/vulkan/util/vk_util.c                         |   20 +
 src/vulkan/util/vk_util.h                         |    2 +
 74 files changed, 13667 insertions(+), 9118 deletions(-)
 create mode 100644 include/vulkan/vulkan_android.h
 create mode 100644 include/vulkan/vulkan_core.h
 create mode 100644 include/vulkan/vulkan_ios.h
 create mode 100644 include/vulkan/vulkan_macos.h
 create mode 100644 include/vulkan/vulkan_mir.h
 create mode 100644 include/vulkan/vulkan_vi.h
 create mode 100644 include/vulkan/vulkan_wayland.h
 create mode 100644 include/vulkan/vulkan_win32.h
 create mode 100644 include/vulkan/vulkan_xcb.h
 create mode 100644 include/vulkan/vulkan_xlib.h
 create mode 100644 include/vulkan/vulkan_xlib_randr.h
 create mode 100644 include/vulkan/vulkan_xlib_xrandr.h
 create mode 100644 src/compiler/spirv/vtn_subgroup.c
 create mode 100644 src/intel/vulkan/anv_nir_add_base_work_group_id.c

-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list