aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-04-26 03:32:06 -0700
committerJason Ekstrand <[email protected]>2017-05-04 19:07:54 -0700
commite049dea5b280bebd6480823a4cddd70baf46fea7 (patch)
treece81b8789b8db8aaf0e0145c2b5a8047f544f64b
parent45e1829274f9d23d58c9b73188d9413f9e36a751 (diff)
anv/allocator: Return a null state for zero-size allocations
Reviewed-by: Juan A. Suarez Romero <[email protected]>
-rw-r--r--src/intel/vulkan/anv_allocator.c9
-rw-r--r--src/intel/vulkan/anv_private.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c
index 4cd80590c70..6358566ae2e 100644
--- a/src/intel/vulkan/anv_allocator.c
+++ b/src/intel/vulkan/anv_allocator.c
@@ -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;
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 21d0ac2122f..8652f105f92 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -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;