This is mostly a re-send of my earlier patches but there are a few changes. I think, at this point, that I'm ready to merge it assuming Iago is ok with the changes. The important chages are:
1. The lowering pass has been altered to take a view mask instead of a subpass. The rest of the anv_pipeline code has also been modified to properly incorporate the view mask into the shader key. 2. There have been two fixes to the code which multiplies the number of invocations by the number of views. First was that I accidentally used AND instead of ADD. Second was an off-by-one error when adding ALU operations to an MI_MATH instruction that made us stomp the MI_MATH instruction itself instead of starting on dword 1. 3. I've added a trivial implementation of multiDrawIndirect. This isn't really required but some of the tests erroneously required it by mistake. I'm not 100% sure that I like having a software implementation of multiDrawIndirect but it's no worse (and probably slightly better) than an application fall-back would be. Jason Ekstrand (14): 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: Move shader hashing to anv_pipeline 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 anv: Trivially implement multiDrawIndirect 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 | 234 +++++++++++++++++++++++++++++ src/intel/vulkan/anv_pass.c | 19 +++ src/intel/vulkan/anv_pipeline.c | 83 +++++++--- src/intel/vulkan/anv_pipeline_cache.c | 27 ---- src/intel/vulkan/anv_private.h | 15 +- src/intel/vulkan/genX_cmd_buffer.c | 209 ++++++++++++++++++++++---- src/intel/vulkan/genX_pipeline.c | 9 +- src/mesa/program/prog_print.c | 2 + 20 files changed, 588 insertions(+), 94 deletions(-) create mode 100644 src/intel/vulkan/anv_nir_lower_multiview.c -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev