anv: simplify push constant emissions
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Tue, 4 Aug 2020 14:25:37 +0000 (17:25 +0300)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 28 Aug 2020 06:58:46 +0000 (09:58 +0300)
commit957bbc6ad907ec3b439bb3cae578001f49a4d6fc
treef9d318e11e50a77edd5b692492138fa74014e973
parent7953402e5751b4179fe778f86a60f385eb766e0e
anv: simplify push constant emissions

Instead of allocating a push constant buffer per stage from the
dynamic state pool, we can use the same one for all stages.

We can do this because the push constant data is supposed to be
identical of all stages. Even if vkCmdPushConstants() allows to update
chunks of the push constant data differently per stage, this valid
usage guarantees that any chunk of push constant data used be 2
different stages must be identical :

   "For each byte in the range specified by offset and size and for
    each push constant range that overlaps that byte, stageFlags must
    include all stages in that push constant range‚Äôs
    VkPushConstantRange::stageFlags"

v2: Fix dirtying of stages (Jason)

v3: Move push constant data into base pipeline state struct (Jason)

v4: Remove duplicated field (Jason)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6183>
src/intel/vulkan/anv_cmd_buffer.c
src/intel/vulkan/anv_descriptor_set.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/genX_cmd_buffer.c