[Mesa-dev] [RFC 00/12] anv: A first pass at VK_KHX_multiview

Jason Ekstrand jason at jlekstrand.net
Thu Mar 23 04:00:59 UTC 2017


This little series is a first pass at implementing the VK_KHX_multiview
extension.  The basic method employed is to multiply the number of
instances in each draw call by the number of views in the subpass.  We then
emit shader code to sort out the gl_InstanceId and gl_ViewIndex builtin
variables.  Properly computing gl_ViewIndex takes a bit of work because
gl_InstanceId % bitcount(subpass->view_mask) is not quite the view index we
want.  We have to convert from this "compacted" view index to the actual
view index by use of a remap table.

This implementation is good enough to get us going with the extension and
passes the currently available CTS tests.  However, it does not yet support
input attachments.

Jason Ekstrand (12):
  compiler: Add a system value and varying for ViewIndex
  spirv: Bump the SPIR-V header to the latest public version
  spirv: Add support for SPV_KHR_multiview
  anv/nir: Delete the apply_dynamic_offsets prototype
  anv: Add the KHX_multiview boilerplate
  anv/pass: Store the per-subpass view mask
  anv/pipeline: Call nir_gather_info later
  anv/pipeline: Add a subpass field to anv_pipeline
  anv/pipeline: Add shader lowering for multiview
  anv/cmd_buffer: Pull indirect draw parameter loading into a helper
  anv/cmd_buffer: Emit instanced draws for multiple views
  anv: Enable VK_KHX_multiview and SPV_KHR_multiview

 src/compiler/nir/nir.c                     |   4 +
 src/compiler/nir/nir_intrinsics.h          |   1 +
 src/compiler/shader_enums.c                |   2 +
 src/compiler/shader_enums.h                |   4 +
 src/compiler/spirv/nir_spirv.h             |   1 +
 src/compiler/spirv/spirv.h                 |  34 ++++-
 src/compiler/spirv/spirv_to_nir.c          |   4 +
 src/compiler/spirv/vtn_variables.c         |   4 +
 src/intel/Makefile.sources                 |   1 +
 src/intel/vulkan/anv_device.c              |  23 ++-
 src/intel/vulkan/anv_entrypoints_gen.py    |   1 +
 src/intel/vulkan/anv_nir.h                 |   5 +-
 src/intel/vulkan/anv_nir_lower_multiview.c | 235 +++++++++++++++++++++++++++++
 src/intel/vulkan/anv_pass.c                |  19 +++
 src/intel/vulkan/anv_pipeline.c            |  19 ++-
 src/intel/vulkan/anv_private.h             |   9 ++
 src/intel/vulkan/genX_cmd_buffer.c         | 173 +++++++++++++++++++--
 src/intel/vulkan/genX_pipeline.c           |  10 +-
 18 files changed, 521 insertions(+), 28 deletions(-)
 create mode 100644 src/intel/vulkan/anv_nir_lower_multiview.c

-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list