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

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 19 13:49:31 UTC 2020


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

Author: Rob Clark <robdclark at chromium.org>
Date:   Mon Jun 15 11:15:52 2020 -0700

freedreno/ir3: convert over to ralloc

The `ir3_shader` is the root mem ctx, with `ir3_shader_variant` hanging
off that, and various variant specific allocations hanging off the
variant.

This lets us delete a bunch of cleanup code.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5508>

---

 src/freedreno/ir3/ir3.c           |  4 ++--
 src/freedreno/ir3/ir3_assembler.c |  4 ++--
 src/freedreno/ir3/ir3_shader.c    | 26 ++++----------------------
 3 files changed, 8 insertions(+), 26 deletions(-)

diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c
index 3d41a7b5cc4..7b1b3043818 100644
--- a/src/freedreno/ir3/ir3.c
+++ b/src/freedreno/ir3/ir3.c
@@ -48,7 +48,7 @@ void * ir3_alloc(struct ir3 *shader, int sz)
 struct ir3 * ir3_create(struct ir3_compiler *compiler,
 		struct ir3_shader_variant *v)
 {
-	struct ir3 *shader = rzalloc(NULL, struct ir3);
+	struct ir3 *shader = rzalloc(v, struct ir3);
 
 	shader->compiler = compiler;
 	shader->type = v->type;
@@ -944,7 +944,7 @@ void * ir3_assemble(struct ir3_shader_variant *v)
 		info->sizedwords = align(info->sizedwords, 4 * 2);
 	}
 
-	ptr = dwords = calloc(4, info->sizedwords);
+	ptr = dwords = rzalloc_size(v, 4 * info->sizedwords);
 
 	foreach_block (block, &shader->block_list) {
 		unsigned sfu_delay = 0;
diff --git a/src/freedreno/ir3/ir3_assembler.c b/src/freedreno/ir3/ir3_assembler.c
index 99104243a53..005f52859a8 100644
--- a/src/freedreno/ir3/ir3_assembler.c
+++ b/src/freedreno/ir3/ir3_assembler.c
@@ -34,12 +34,12 @@
 struct ir3_shader *
 ir3_parse_asm(struct ir3_compiler *c, struct ir3_kernel_info *info, FILE *in)
 {
-	struct ir3_shader *shader = calloc(1, sizeof(*shader));
+	struct ir3_shader *shader = rzalloc_size(NULL, sizeof(*shader));
 	shader->compiler = c;
 	shader->type = MESA_SHADER_COMPUTE;
 	mtx_init(&shader->variants_lock, mtx_plain);
 
-	struct ir3_shader_variant *v = calloc(1, sizeof(*v));
+	struct ir3_shader_variant *v = rzalloc_size(shader, sizeof(*v));
 	v->type = MESA_SHADER_COMPUTE;
 	v->shader = shader;
 
diff --git a/src/freedreno/ir3/ir3_shader.c b/src/freedreno/ir3/ir3_shader.c
index 78ed751a3f2..82b6c59d5af 100644
--- a/src/freedreno/ir3/ir3_shader.c
+++ b/src/freedreno/ir3/ir3_shader.c
@@ -41,18 +41,6 @@ ir3_glsl_type_size(const struct glsl_type *type, bool bindless)
 	return glsl_count_attribute_slots(type, false);
 }
 
-static void
-delete_variant(struct ir3_shader_variant *v)
-{
-	if (v->ir)
-		ir3_destroy(v->ir);
-	assert(!v->bo);
-	if (v->binning)
-		delete_variant(v->binning);
-	free(v->bin);
-	free(v);
-}
-
 /* for vertex shader, the inputs are loaded into registers before the shader
  * is executed, so max_regs from the shader instructions might not properly
  * reflect the # of registers actually used, especially in case passthrough
@@ -184,7 +172,7 @@ static struct ir3_shader_variant *
 create_variant(struct ir3_shader *shader, const struct ir3_shader_key *key,
 		struct ir3_shader_variant *nonbinning)
 {
-	struct ir3_shader_variant *v = CALLOC_STRUCT(ir3_shader_variant);
+	struct ir3_shader_variant *v = rzalloc_size(shader, sizeof(*v));
 	int ret;
 
 	if (!v)
@@ -232,7 +220,7 @@ create_variant(struct ir3_shader *shader, const struct ir3_shader_key *key,
 	return v;
 
 fail:
-	delete_variant(v);
+	ralloc_free(v);
 	return NULL;
 }
 
@@ -283,16 +271,10 @@ ir3_shader_get_variant(struct ir3_shader *shader, const struct ir3_shader_key *k
 void
 ir3_shader_destroy(struct ir3_shader *shader)
 {
-	struct ir3_shader_variant *v, *t;
-	for (v = shader->variants; v; ) {
-		t = v;
-		v = v->next;
-		delete_variant(t);
-	}
 	free(shader->const_state.immediates);
 	ralloc_free(shader->nir);
 	mtx_destroy(&shader->variants_lock);
-	free(shader);
+	ralloc_free(shader);
 }
 
 /**
@@ -355,7 +337,7 @@ struct ir3_shader *
 ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
 		unsigned reserved_user_consts, struct ir3_stream_output_info *stream_output)
 {
-	struct ir3_shader *shader = CALLOC_STRUCT(ir3_shader);
+	struct ir3_shader *shader = rzalloc_size(NULL, sizeof(*shader));
 
 	mtx_init(&shader->variants_lock, mtx_plain);
 	shader->compiler = compiler;



More information about the mesa-commit mailing list