anv/allocator: Return a null state for zero-size allocations
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 26 Apr 2017 10:32:06 +0000 (03:32 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 5 May 2017 02:07:54 +0000 (19:07 -0700)
Reviewed-by: Juan A. Suarez Romero <jasuarez@igalia.com>
src/intel/vulkan/anv_allocator.c
src/intel/vulkan/anv_private.h

index 4cd80590c70bc9a79db902915790a843e630f77f..6358566ae2e4281e0404b6fb496ecd4054a47a17 100644 (file)
@@ -710,6 +710,9 @@ anv_state_pool_alloc_no_vg(struct anv_state_pool *pool,
 struct anv_state
 anv_state_pool_alloc(struct anv_state_pool *pool, size_t size, size_t align)
 {
+   if (size == 0)
+      return ANV_STATE_NULL;
+
    struct anv_state state = anv_state_pool_alloc_no_vg(pool, size, align);
    VG(VALGRIND_MEMPOOL_ALLOC(pool, state.map, size));
    return state;
@@ -731,6 +734,9 @@ anv_state_pool_free_no_vg(struct anv_state_pool *pool, struct anv_state state)
 void
 anv_state_pool_free(struct anv_state_pool *pool, struct anv_state state)
 {
+   if (state.alloc_size == 0)
+      return;
+
    VG(VALGRIND_MEMPOOL_FREE(pool, state.map));
    anv_state_pool_free_no_vg(pool, state);
 }
@@ -791,6 +797,9 @@ struct anv_state
 anv_state_stream_alloc(struct anv_state_stream *stream,
                        uint32_t size, uint32_t alignment)
 {
+   if (size == 0)
+      return ANV_STATE_NULL;
+
    struct anv_state_stream_block *sb = stream->block;
 
    struct anv_state state;
index 21d0ac2122f9fe7854d6cf6f42e84851aaed2623..8652f105f92d328447e4b5bb155c6044951936b6 100644 (file)
@@ -490,6 +490,8 @@ struct anv_state {
    void *map;
 };
 
+#define ANV_STATE_NULL ((struct anv_state) { .alloc_size = 0 })
+
 struct anv_fixed_size_state_pool {
    size_t state_size;
    union anv_free_list free_list;