mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-07 06:08:16 +02:00
vulkan: fix determining the heap ptr
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40729>
This commit is contained in:
parent
521b1c9584
commit
61c85c8d31
1 changed files with 17 additions and 1 deletions
|
|
@ -459,6 +459,14 @@ vk_build_descriptor_heap_address(nir_builder *b,
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
var_is_heap_ptr(nir_variable *var)
|
||||
{
|
||||
return (var->data.mode == nir_var_uniform || var->data.mode == nir_var_image) &&
|
||||
(var->data.location == SYSTEM_VALUE_SAMPLER_HEAP_PTR ||
|
||||
var->data.location == SYSTEM_VALUE_RESOURCE_HEAP_PTR);
|
||||
}
|
||||
|
||||
static nir_deref_instr *
|
||||
deref_get_root_cast(nir_deref_instr *deref)
|
||||
{
|
||||
|
|
@ -470,6 +478,9 @@ deref_get_root_cast(nir_deref_instr *deref)
|
|||
if (!parent)
|
||||
break;
|
||||
|
||||
if (parent->deref_type == nir_deref_type_var && var_is_heap_ptr(parent->var))
|
||||
break;
|
||||
|
||||
deref = parent;
|
||||
}
|
||||
assert(deref->deref_type == nir_deref_type_cast);
|
||||
|
|
@ -482,8 +493,13 @@ deref_cast_is_heap_ptr(nir_deref_instr *deref)
|
|||
{
|
||||
assert(deref->deref_type == nir_deref_type_cast);
|
||||
nir_intrinsic_instr *intrin = nir_src_as_intrinsic(deref->parent);
|
||||
if (intrin == NULL)
|
||||
if (intrin == NULL) {
|
||||
nir_deref_instr *parent_deref = nir_src_as_deref(deref->parent);
|
||||
if (parent_deref != NULL && parent_deref->deref_type == nir_deref_type_var)
|
||||
return var_is_heap_ptr(parent_deref->var);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (intrin->intrinsic) {
|
||||
case nir_intrinsic_load_deref: {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue