From 05d3238692b3144acdcd9bfcf515cccebe79fb9c Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 28 Dec 2022 21:56:00 -0500 Subject: [PATCH] nir/opt_preamble: Treat *size as an input Some backends may wish to reserve early uniforms for internal system values, and use the remaining space for preamble storage. In this case, it's convenient to teach nir_opt_preamble about a reserved offset. It's logical to treat the output *size instead of an in/out variable that nir_opt_preamble adds to. This requires a slight change to the consumers to zero the input. Signed-off-by: Alyssa Rosenzweig Acked-by-(with-sparkles): Asahi Lina Part-of: --- src/compiler/nir/nir_opt_preamble.c | 8 +++----- src/freedreno/ir3/ir3_nir_opt_preamble.c | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/compiler/nir/nir_opt_preamble.c b/src/compiler/nir/nir_opt_preamble.c index ee3ffacf41f..e5e2696935f 100644 --- a/src/compiler/nir/nir_opt_preamble.c +++ b/src/compiler/nir/nir_opt_preamble.c @@ -421,7 +421,6 @@ nir_opt_preamble(nir_shader *shader, const nir_opt_preamble_options *options, } if (num_candidates == 0) { - *size = 0; free(ctx.states); return false; } @@ -485,7 +484,6 @@ nir_opt_preamble(nir_shader *shader, const nir_opt_preamble_options *options, num_candidates = candidate_idx; if (num_candidates == 0) { - *size = 0; free(ctx.states); free(candidates); return false; @@ -498,11 +496,11 @@ nir_opt_preamble(nir_shader *shader, const nir_opt_preamble_options *options, * divided by size. */ - if (total_size > options->preamble_storage_size) { - qsort(candidates, num_candidates, sizeof(*candidates), candidate_sort); + if (((*size) + total_size) > options->preamble_storage_size) { + qsort(candidates, num_candidates, sizeof(*candidates), candidate_sort); } - unsigned offset = 0; + unsigned offset = *size; for (unsigned i = 0; i < num_candidates; i++) { def_state *state = candidates[i]; offset = ALIGN_POT(offset, state->align); diff --git a/src/freedreno/ir3/ir3_nir_opt_preamble.c b/src/freedreno/ir3/ir3_nir_opt_preamble.c index 43f757f9722..2dfacd1fd80 100644 --- a/src/freedreno/ir3/ir3_nir_opt_preamble.c +++ b/src/freedreno/ir3/ir3_nir_opt_preamble.c @@ -284,7 +284,7 @@ ir3_nir_opt_preamble(nir_shader *nir, struct ir3_shader_variant *v) .rewrite_cost_cb = rewrite_cost, }; - unsigned size; + unsigned size = 0; bool progress = nir_opt_preamble(nir, &options, &size); if (!v->binning_pass)