summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2024-04-30 16:41:15 -0400
committerMarge Bot <emma+marge@anholt.net>2024-05-14 04:57:26 +0000
commit6d518609e33c7ebd1b8eddbf1555ccf2f198318d (patch)
treeede5c700a5ab7a9af72aa1bf920a9c016fb79048 /src
parent0e845e38f960663c5d9ebdee6f81e7e8d1d50d11 (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.h1
-rw-r--r--src/gallium/drivers/asahi/agx_nir_lower_sysvals.c27
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,