anv: Account for the header in anv_state_stream_alloc
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 26 Mar 2020 17:22:48 +0000 (12:22 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 31 Mar 2020 08:12:07 +0000 (08:12 +0000)
If we have an allocation that's exactly the block size, we end up
computing a new block size to allocate that's exactly the block size,
add in the header, and then assert fail.  When computing the block size,
we need to account for the header.

Fixes: 955127db937 "anv/allocator: Add support for large stream..."
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4336>

src/intel/vulkan/anv_allocator.c

index 4ab5827623ea268e02084c263b34413dfff2fbea..535657c45d8f8a8dbcd7cf1a55c5407752f59068 100644 (file)
@@ -1226,9 +1226,10 @@ anv_state_stream_alloc(struct anv_state_stream *stream,
 
    uint32_t offset = align_u32(stream->next, alignment);
    if (offset + size > stream->block.alloc_size) {
+      uint32_t min_block_size = size + sizeof(struct anv_state_stream_block);
       uint32_t block_size = stream->block_size;
-      if (block_size < size)
-         block_size = round_to_power_of_two(size);
+      if (block_size < min_block_size)
+         block_size = round_to_power_of_two(min_block_size);
 
       stream->block = anv_state_pool_alloc_no_vg(stream->state_pool,
                                                  block_size, PAGE_SIZE);