From 9bda61ae91e52e71e010bc65641b9385af084f1a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 24 Oct 2022 10:03:55 -0400 Subject: [PATCH] zink: don't flag ubo0 as used in shaders with indirect ubo access ubo0 is not a regular ubo, so avoid setting the hint here cc: mesa-stable Reviewed-by: Dave Airlie Part-of: (cherry picked from commit 71ee1dd597e7a5ca6c7847e1110cfc49a4974201) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_compiler.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index a9ce84de079..ae21a983668 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1390,7 +1390,7 @@ "description": "zink: don't flag ubo0 as used in shaders with indirect ubo access", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index a86ead30335..222c22757c8 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -2308,13 +2308,21 @@ unbreak_bos(nir_shader *shader, struct zink_shader *zs, bool needs_size) } static uint32_t -get_src_mask(unsigned total, nir_src src) +get_src_mask_ssbo(unsigned total, nir_src src) { if (nir_src_is_const(src)) return BITFIELD_BIT(nir_src_as_uint(src)); return BITFIELD_MASK(total); } +static uint32_t +get_src_mask_ubo(unsigned total, nir_src src) +{ + if (nir_src_is_const(src)) + return BITFIELD_BIT(nir_src_as_uint(src)); + return BITFIELD_MASK(total) & ~BITFIELD_BIT(0); +} + static bool analyze_io(struct zink_shader *zs, nir_shader *shader) { @@ -2328,11 +2336,11 @@ analyze_io(struct zink_shader *zs, nir_shader *shader) nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); switch (intrin->intrinsic) { case nir_intrinsic_store_ssbo: - zs->ssbos_used |= get_src_mask(shader->info.num_ssbos, intrin->src[1]); + zs->ssbos_used |= get_src_mask_ssbo(shader->info.num_ssbos, intrin->src[1]); break; case nir_intrinsic_get_ssbo_size: { - zs->ssbos_used |= get_src_mask(shader->info.num_ssbos, intrin->src[0]); + zs->ssbos_used |= get_src_mask_ssbo(shader->info.num_ssbos, intrin->src[0]); ret = true; break; } @@ -2351,11 +2359,11 @@ analyze_io(struct zink_shader *zs, nir_shader *shader) case nir_intrinsic_ssbo_atomic_fmax: case nir_intrinsic_ssbo_atomic_fcomp_swap: case nir_intrinsic_load_ssbo: - zs->ssbos_used |= get_src_mask(shader->info.num_ssbos, intrin->src[0]); + zs->ssbos_used |= get_src_mask_ssbo(shader->info.num_ssbos, intrin->src[0]); break; case nir_intrinsic_load_ubo: case nir_intrinsic_load_ubo_vec4: - zs->ubos_used |= get_src_mask(shader->info.num_ubos, intrin->src[0]); + zs->ubos_used |= get_src_mask_ubo(shader->info.num_ubos, intrin->src[0]); break; default: break;