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)