From 8a22cc32af325fad49050432374ca249f795c3ce Mon Sep 17 00:00:00 2001 From: Icecream95 Date: Sat, 1 Jan 2022 02:15:21 +1300 Subject: [PATCH] panfrost: Fix ubo_mask calculation BITSET_MASK returns ~0 when given an input of zero, when we need it to return 0 instead. Fixes shaders with only sysvals but no UBOs when push constants are disabled. This breaks when 31 or 32 UBOs are used, but PAN_MAX_CONST_BUFFERS is currently set to 16. Fixes: c246af0dd80 ("panfrost: Only upload UBOs when needed") Part-of: (cherry picked from commit 9d4441c71aa60b275ae1fccfc11b37705b02c118) --- .pick_status.json | 2 +- src/panfrost/bifrost/bifrost_compile.c | 2 +- src/panfrost/midgard/midgard_compile.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 0f7b03c3d6a..acd9eb57408 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -580,7 +580,7 @@ "description": "panfrost: Fix ubo_mask calculation", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c246af0dd805033b743dfe0be96c1077f35e0934" }, diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index d16ba005fad..903ea1b82de 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -4038,7 +4038,7 @@ bifrost_compile_shader_nir(nir_shader *nir, bi_compile_variant(nir, inputs, binary, sysval_to_id, info, BI_IDVS_NONE); } - info->ubo_mask &= BITSET_MASK(nir->info.num_ubos); + info->ubo_mask &= (1 << nir->info.num_ubos) - 1; _mesa_hash_table_u64_destroy(sysval_to_id); } diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 2a0bee92f6a..a40d1a594cb 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -3228,7 +3228,7 @@ midgard_compile_shader_nir(nir_shader *nir, /* Report the very first tag executed */ info->midgard.first_tag = midgard_get_first_tag_from_block(ctx, 0); - info->ubo_mask = ctx->ubo_mask & BITSET_MASK(ctx->nir->info.num_ubos); + info->ubo_mask = ctx->ubo_mask & ((1 << ctx->nir->info.num_ubos) - 1); if ((midgard_debug & MIDGARD_DBG_SHADERS) && ((midgard_debug & MIDGARD_DBG_INTERNAL) || !nir->info.internal)) {