Mesa (master): freedreno/ir3: convert over to ralloc

Rob Clark robclark at kemper.freedesktop.org
Mon Apr 25 21:11:19 UTC 2016


Module: Mesa
Branch: master
Commit: 8fe20762433dafc8d6df3a14db7074c1ddf99120
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8fe20762433dafc8d6df3a14db7074c1ddf99120

Author: Rob Clark <robclark at freedesktop.org>
Date:   Sun Apr 24 14:01:58 2016 -0400

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 <robclark at freedesktop.org>

---

 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 f512142..1406856 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3.c
@@ -30,48 +30,23 @@
 #include <stdbool.h>
 #include <errno.h>
 
+#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 a40d3aa..e58618c 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;




More information about the mesa-commit mailing list