diff options
author | Alyssa Rosenzweig <alyssa@rosenzweig.io> | 2024-04-30 16:41:15 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2024-05-14 04:57:26 +0000 |
commit | 6d518609e33c7ebd1b8eddbf1555ccf2f198318d (patch) | |
tree | ede5c700a5ab7a9af72aa1bf920a9c016fb79048 /src | |
parent | 0e845e38f960663c5d9ebdee6f81e7e8d1d50d11 (diff) |
asahi: eliminate troublesome empty uniforms
these don't do what you expect and are wasteful.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29179>
Diffstat (limited to 'src')
-rw-r--r-- | src/asahi/lib/agx_usc.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/asahi/agx_nir_lower_sysvals.c | 27 |
2 files changed, 16 insertions, 12 deletions
diff --git a/src/asahi/lib/agx_usc.h b/src/asahi/lib/agx_usc.h index 163c8d1ac4b..ed835291476 100644 --- a/src/asahi/lib/agx_usc.h +++ b/src/asahi/lib/agx_usc.h @@ -76,6 +76,7 @@ agx_usc_uniform(struct agx_usc_builder *b, unsigned start_halfs, { assert((start_halfs + size_halfs) <= (1 << 9) && "uniform file overflow"); assert(size_halfs <= 64 && "caller's responsibility to split"); + assert(size_halfs > 0 && "no empty uniforms"); if (start_halfs & BITFIELD_BIT(8)) { agx_usc_pack(b, UNIFORM_HIGH, cfg) { diff --git a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c index b17d3dfb5d0..88bd0651050 100644 --- a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c +++ b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c @@ -375,19 +375,22 @@ lay_out_uniforms(struct agx_compiled_shader *shader, struct state *state) DIV_ROUND_UP(BITSET_LAST_BIT(shader->attrib_components_read), 4); struct agx_draw_uniforms *u = NULL; - shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 0, - .table = AGX_SYSVAL_TABLE_ROOT, - .offset = (uintptr_t)&u->attrib_base, - .length = 4 * count, - }; - shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 4 * count, - .table = AGX_SYSVAL_TABLE_ROOT, - .offset = (uintptr_t)&u->attrib_clamp, - .length = 2 * count, - }; + if (count) { + shader->push[shader->push_range_count++] = (struct agx_push_range){ + .uniform = 0, + .table = AGX_SYSVAL_TABLE_ROOT, + .offset = (uintptr_t)&u->attrib_base, + .length = 4 * count, + }; + + shader->push[shader->push_range_count++] = (struct agx_push_range){ + .uniform = 4 * count, + .table = AGX_SYSVAL_TABLE_ROOT, + .offset = (uintptr_t)&u->attrib_clamp, + .length = 2 * count, + }; + } shader->push[shader->push_range_count++] = (struct agx_push_range){ .uniform = 6 * count, |