anv: Completely rework descriptor set layouts
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 14 Oct 2015 22:18:49 +0000 (15:18 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Oct 2015 01:38:33 +0000 (18:38 -0700)
commitb37c38c1cada402a258079c6b4e70d5783fb96c5
tree855578c4b7405b6b2ec220bbd2c2ff0a7c460c51
parent7965fe7da6b72ad4ba259a9d68bd362c2c1dd5db
anv: Completely rework descriptor set layouts

This patch reworks a bunch of stuff in the way we do descriptor set
layouts.  Our previous approach had a couple of problems.  First, it was
based on a misunderstanding of arrays in descriptor sets.  Second, it
didn't properly handle descriptor sets where some bindings were missing
stages.  The new apporach should be correct and also makes some operations,
particularly those on the hot-path, a bit easier.

We use the descriptor set layout for four things:

 1) To determine the map from bindings to the actual flattened descriptor
    set in vkUpdateDescriptorSets().

 2) To determine the descriptor <-> binding table entry mapping to use in
    anv_cmd_buffer_flush_descriptor_sets().

 3) To determine the mappings of dynamic indices.

 4) To determine the (set, binding, array index) -> binding table entry
    mapping inside of shaders.

The new approach is directly taylored towards these operations.
src/vulkan/anv_cmd_buffer.c
src/vulkan/anv_compiler.cpp
src/vulkan/anv_device.c
src/vulkan/anv_nir_apply_dynamic_offsets.c
src/vulkan/anv_pipeline.c
src/vulkan/anv_private.h