dzn: Make sure sampler heaps don't contain more than 2048 samplers
authorBoris Brezillon <boris.brezillon@collabora.com>
Mon, 11 Apr 2022 12:20:04 +0000 (05:20 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 14 Apr 2022 13:14:57 +0000 (13:14 +0000)
The spec says "The maximum number of samplers in a shader visible
descriptor heap is 2048.". Let's make sure we follow this rule
in dozen.

Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15884>

src/microsoft/vulkan/dzn_descriptor_set.cpp

index b98d513..7cfba97 100644 (file)
@@ -1446,6 +1446,14 @@ dzn_descriptor_heap_pool_alloc_slots(dzn_descriptor_heap_pool *pool,
          64 * 1024 : 4 * 1024;
       uint32_t alloc_step = ALIGN_POT(desc_count * pool->desc_sz, granularity);
       uint32_t heap_desc_count = MAX2(alloc_step / pool->desc_sz, 16);
+
+      /* Maximum of 2048 samplers per heap when shader_visible is true. */
+      if (pool->shader_visible &&
+          pool->type == D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) {
+         assert(desc_count <= 2048);
+         heap_desc_count = MIN2(heap_desc_count, 2048);
+      }
+
       dzn_descriptor_heap_pool_entry *new_heap = NULL;
 
       list_for_each_entry_safe(dzn_descriptor_heap_pool_entry, entry, &pool->free_heaps, link) {