Mesa (master): ir3: Pass reserved_user_consts to ir3_shader_from_nir()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 17 13:31:01 UTC 2020


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

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Tue Jun 16 14:02:24 2020 +0200

ir3: Pass reserved_user_consts to ir3_shader_from_nir()

ir3_shader_from_nir() calls ir3_optimize_nir(), which currently sets up
the const state. However, we need to know the number of user consts
reserved by the driver before setting up the const state, which means
that this information needs to be passed into ir3_shader_from_nir()
somehow rather than being set in the shader.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5500>

---

 src/freedreno/ir3/ir3_shader.c                  | 3 ++-
 src/freedreno/ir3/ir3_shader.h                  | 2 +-
 src/gallium/drivers/freedreno/ir3/ir3_gallium.c | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/freedreno/ir3/ir3_shader.c b/src/freedreno/ir3/ir3_shader.c
index ddb2c997baf..c0f33263e88 100644
--- a/src/freedreno/ir3/ir3_shader.c
+++ b/src/freedreno/ir3/ir3_shader.c
@@ -335,7 +335,7 @@ ir3_setup_used_key(struct ir3_shader *shader)
 
 struct ir3_shader *
 ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
-		struct ir3_stream_output_info *stream_output)
+		unsigned reserved_user_consts, struct ir3_stream_output_info *stream_output)
 {
 	struct ir3_shader *shader = CALLOC_STRUCT(ir3_shader);
 
@@ -345,6 +345,7 @@ ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
 	shader->type = nir->info.stage;
 	if (stream_output)
 		memcpy(&shader->stream_output, stream_output, sizeof(shader->stream_output));
+	shader->const_state.num_reserved_user_consts = reserved_user_consts;
 
 	if (nir->info.stage == MESA_SHADER_GEOMETRY)
 		NIR_PASS_V(nir, ir3_nir_lower_gs);
diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h
index 9fc175595ba..2fe79ea7a0f 100644
--- a/src/freedreno/ir3/ir3_shader.h
+++ b/src/freedreno/ir3/ir3_shader.h
@@ -646,7 +646,7 @@ void * ir3_shader_assemble(struct ir3_shader_variant *v, uint32_t gpu_id);
 struct ir3_shader_variant * ir3_shader_get_variant(struct ir3_shader *shader,
 		struct ir3_shader_key *key, bool binning_pass, bool *created);
 struct ir3_shader * ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
-		struct ir3_stream_output_info *stream_output);
+		unsigned reserved_user_consts, struct ir3_stream_output_info *stream_output);
 void ir3_shader_destroy(struct ir3_shader *shader);
 void ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out);
 uint64_t ir3_shader_outputs(const struct ir3_shader *so);
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
index 5544e0e50c7..cc986f3dc4e 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
@@ -168,7 +168,7 @@ ir3_shader_create(struct ir3_compiler *compiler,
 	struct ir3_stream_output_info stream_output;
 	copy_stream_out(&stream_output, &cso->stream_output);
 
-	struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, &stream_output);
+	struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, 0, &stream_output);
 
 	/* Compile standard variants immediately to try to avoid draw-time stalls
 	 * to run the compiler.
@@ -234,7 +234,7 @@ ir3_shader_create_compute(struct ir3_compiler *compiler,
 		nir = tgsi_to_nir(cso->prog, screen, false);
 	}
 
-	struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, NULL);
+	struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, 0, NULL);
 
 	/* Immediately compile a standard variant.  We have so few variants in our
 	 * shaders, that doing so almost eliminates draw-time recompiles.  (This



More information about the mesa-commit mailing list