[Mesa-dev] [PATCH 17.5/18] anv/allocator: Add support for large stream allocations

Jason Ekstrand jason at jlekstrand.net
Wed Apr 26 17:01:30 UTC 2017


---
 src/intel/vulkan/anv_allocator.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c
index 8f3b31f..61d09f3 100644
--- a/src/intel/vulkan/anv_allocator.c
+++ b/src/intel/vulkan/anv_allocator.c
@@ -881,9 +881,13 @@ anv_state_stream_alloc(struct anv_state_stream *stream,
       return ANV_STATE_NULL;
 
    uint32_t offset = align_u32(stream->next, alignment);
-   if (offset + size > stream->block_size) {
+   if (offset + size > stream->block.alloc_size) {
+      uint32_t block_size = stream->block_size;
+      if (block_size < size)
+         block_size = round_to_power_of_two(size);
+
       stream->block = anv_state_pool_alloc_no_vg(stream->state_pool,
-                                                 stream->block_size,
+                                                 block_size,
                                                  stream->block_size);
 
       struct anv_state_stream_block *sb = stream->block.map;
@@ -898,7 +902,7 @@ anv_state_stream_alloc(struct anv_state_stream *stream,
       stream->next = sizeof(*sb);
 
       offset = align_u32(stream->next, alignment);
-      assert(offset + size <= stream->block_size);
+      assert(offset + size <= stream->block.alloc_size);
    }
 
    struct anv_state state = stream->block;
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list