mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2025-03-03 07:38:31 +00:00
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 <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19281> (cherry picked from commit 71ee1dd597e7a5ca6c7847e1110cfc49a4974201)
This commit is contained in:
parent
677721202e
commit
9bda61ae91
@ -1390,7 +1390,7 @@
|
|||||||
"description": "zink: don't flag ubo0 as used in shaders with indirect ubo access",
|
"description": "zink: don't flag ubo0 as used in shaders with indirect ubo access",
|
||||||
"nominated": true,
|
"nominated": true,
|
||||||
"nomination_type": 0,
|
"nomination_type": 0,
|
||||||
"resolution": 0,
|
"resolution": 1,
|
||||||
"main_sha": null,
|
"main_sha": null,
|
||||||
"because_sha": null
|
"because_sha": null
|
||||||
},
|
},
|
||||||
|
@ -2308,13 +2308,21 @@ unbreak_bos(nir_shader *shader, struct zink_shader *zs, bool needs_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
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))
|
if (nir_src_is_const(src))
|
||||||
return BITFIELD_BIT(nir_src_as_uint(src));
|
return BITFIELD_BIT(nir_src_as_uint(src));
|
||||||
return BITFIELD_MASK(total);
|
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
|
static bool
|
||||||
analyze_io(struct zink_shader *zs, nir_shader *shader)
|
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);
|
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
|
||||||
switch (intrin->intrinsic) {
|
switch (intrin->intrinsic) {
|
||||||
case nir_intrinsic_store_ssbo:
|
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;
|
break;
|
||||||
|
|
||||||
case nir_intrinsic_get_ssbo_size: {
|
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;
|
ret = true;
|
||||||
break;
|
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_fmax:
|
||||||
case nir_intrinsic_ssbo_atomic_fcomp_swap:
|
case nir_intrinsic_ssbo_atomic_fcomp_swap:
|
||||||
case nir_intrinsic_load_ssbo:
|
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;
|
break;
|
||||||
case nir_intrinsic_load_ubo:
|
case nir_intrinsic_load_ubo:
|
||||||
case nir_intrinsic_load_ubo_vec4:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user