diff --git a/.pick_status.json b/.pick_status.json index 2a0e39f0b15..41886868641 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2713,7 +2713,7 @@ "description": "anv: fix descriptor set free", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index d4d6294ecf8..c46be92e517 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -833,6 +833,7 @@ anv_descriptor_pool_alloc_set(struct anv_descriptor_pool *pool, { if (size <= pool->size - pool->next) { *set = (struct anv_descriptor_set *) (pool->data + pool->next); + (*set)->size = size; pool->next += size; return VK_SUCCESS; } else { @@ -843,6 +844,7 @@ anv_descriptor_pool_alloc_set(struct anv_descriptor_pool *pool, if (size <= entry->size) { *link = entry->next; *set = (struct anv_descriptor_set *) entry; + (*set)->size = entry->size; return VK_SUCCESS; } link = &entry->next; @@ -960,7 +962,6 @@ anv_descriptor_set_create(struct anv_device *device, set->layout = layout; anv_descriptor_set_layout_ref(layout); - set->size = size; set->buffer_views = (struct anv_buffer_view *) &set->descriptors[layout->size]; set->buffer_view_count = layout->buffer_view_count; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index f73b5f053c0..0d13693788e 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1953,6 +1953,10 @@ struct anv_descriptor { struct anv_descriptor_set { struct anv_descriptor_pool *pool; struct anv_descriptor_set_layout *layout; + + /* Amount of space occupied in the the pool by this descriptor set. It can + * be larger than the size of the descriptor set. + */ uint32_t size; /* State relative to anv_descriptor_pool::bo */