From 8fe20762433dafc8d6df3a14db7074c1ddf99120 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sun, 24 Apr 2016 14:01:58 -0400 Subject: [PATCH] freedreno/ir3: convert over to ralloc The home-grown heap scheme (which is ultra-simple but probably not good to always allocate and memset such a chunk of memory up front) was a remnant of fdre (where the ir originally came from). But since we have ralloc in mesa, lets just use that instead. Signed-off-by: Rob Clark --- src/gallium/drivers/freedreno/ir3/ir3.c | 41 ++++--------------------- src/gallium/drivers/freedreno/ir3/ir3.h | 5 --- 2 files changed, 6 insertions(+), 40 deletions(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3.c b/src/gallium/drivers/freedreno/ir3/ir3.c index f512142c535..1406856a4a0 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.c +++ b/src/gallium/drivers/freedreno/ir3/ir3.c @@ -30,48 +30,23 @@ #include #include +#include "util/ralloc.h" + #include "freedreno_util.h" #include "instr-a3xx.h" -#define CHUNK_SZ 1020 - -struct ir3_heap_chunk { - struct ir3_heap_chunk *next; - uint32_t heap[CHUNK_SZ]; -}; - -static void grow_heap(struct ir3 *shader) -{ - struct ir3_heap_chunk *chunk = calloc(1, sizeof(*chunk)); - chunk->next = shader->chunk; - shader->chunk = chunk; - shader->heap_idx = 0; -} - /* simple allocator to carve allocations out of an up-front allocated heap, * so that we can free everything easily in one shot. */ void * ir3_alloc(struct ir3 *shader, int sz) { - void *ptr; - - sz = align(sz, 4) / 4; - - if ((shader->heap_idx + sz) > CHUNK_SZ) - grow_heap(shader); - - ptr = &shader->chunk->heap[shader->heap_idx]; - shader->heap_idx += sz; - - return ptr; + return ralloc_size(shader, sz); } struct ir3 * ir3_create(struct ir3_compiler *compiler, unsigned nin, unsigned nout) { - struct ir3 *shader = calloc(1, sizeof(struct ir3)); - - grow_heap(shader); + struct ir3 *shader = ralloc(compiler, struct ir3); shader->compiler = compiler; shader->ninputs = nin; @@ -88,17 +63,13 @@ struct ir3 * ir3_create(struct ir3_compiler *compiler, void ir3_destroy(struct ir3 *shader) { - while (shader->chunk) { - struct ir3_heap_chunk *chunk = shader->chunk; - shader->chunk = chunk->next; - free(chunk); - } + /* TODO convert the dynamic array to ralloc too: */ free(shader->indirects); free(shader->predicates); free(shader->baryfs); free(shader->keeps); free(shader->astc_srgb); - free(shader); + ralloc_free(shader); } #define iassert(cond) do { \ diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index a40d3aa3b40..e58618ca432 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -337,8 +337,6 @@ static inline int ir3_neighbor_count(struct ir3_instruction *instr) return num; } -struct ir3_heap_chunk; - struct ir3 { struct ir3_compiler *compiler; @@ -388,9 +386,6 @@ struct ir3 { /* List of ir3_array's: */ struct list_head array_list; - - unsigned heap_idx; - struct ir3_heap_chunk *chunk; }; typedef struct nir_variable nir_variable; -- 2.30.2