nvk: Add a root descriptor table
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Tue, 31 Jan 2023 02:11:48 +0000 (20:11 -0600)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:31:54 +0000 (21:31 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/nvk_cmd_buffer.c
src/nouveau/vulkan/nvk_cmd_buffer.h

index 2ce7596..c3f26df 100644 (file)
@@ -264,6 +264,8 @@ nvk_CmdBindDescriptorSets(VkCommandBuffer commandBuffer,
       VK_FROM_HANDLE(nvk_descriptor_set, set, pDescriptorSets[i]);
 
       if (desc->sets[set_idx] != set) {
+         nvk_push_descriptor_set_ref(cmd->push, set);
+         desc->root.sets[set_idx] = nvk_descriptor_set_addr(set);
          desc->sets[set_idx] = set;
          desc->sets_dirty |= BITFIELD_BIT(set_idx);
       }
index 7dd34ed..3145ee2 100644 (file)
@@ -19,7 +19,19 @@ struct nvk_cmd_pool {
 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_cmd_pool, vk.base, VkCommandPool,
                                VK_OBJECT_TYPE_COMMAND_POOL)
 
+/** Root descriptor table.  This gets pushed to the GPU directly */
+struct nvk_root_descriptor_table {
+   /* Client push constants */
+   uint8_t push[128];
+
+   /* Descriptor set base addresses */
+   uint64_t sets[NVK_MAX_SETS];
+
+   /* TODO: Dynamic buffer bindings */
+};
+
 struct nvk_descriptor_state {
+   struct nvk_root_descriptor_table root;
    struct nvk_descriptor_set *sets[NVK_MAX_SETS];
    uint32_t sets_dirty;
 };