mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
aco: use binding chasing helpers
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7291>
This commit is contained in:
parent
e732bea536
commit
5cf41814cd
2 changed files with 19 additions and 35 deletions
|
|
@ -5215,13 +5215,11 @@ void visit_load_ubo(isel_context *ctx, nir_intrinsic_instr *instr)
|
|||
|
||||
Builder bld(ctx->program, ctx->block);
|
||||
|
||||
nir_alu_instr* mov_instr = nir_instr_as_alu(instr->src[0].ssa->parent_instr);
|
||||
nir_intrinsic_instr* idx_instr = nir_instr_as_intrinsic(mov_instr->src[0].src.ssa->parent_instr);
|
||||
unsigned desc_set = nir_intrinsic_desc_set(idx_instr);
|
||||
unsigned binding = nir_intrinsic_binding(idx_instr);
|
||||
radv_descriptor_set_layout *layout = ctx->options->layout->set[desc_set].layout;
|
||||
nir_binding binding = nir_chase_binding(instr->src[0]);
|
||||
assert(binding.success);
|
||||
radv_descriptor_set_layout *layout = ctx->options->layout->set[binding.desc_set].layout;
|
||||
|
||||
if (layout->binding[binding].type == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) {
|
||||
if (layout->binding[binding.binding].type == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT) {
|
||||
uint32_t desc_type = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
|
||||
S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
|
||||
S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
|
||||
|
|
|
|||
|
|
@ -133,48 +133,34 @@ inline Temp get_arg(isel_context *ctx, struct ac_arg arg)
|
|||
}
|
||||
|
||||
inline void get_buffer_resource_flags(isel_context *ctx, nir_ssa_def *def, unsigned access,
|
||||
uint8_t **flags, uint32_t *count)
|
||||
uint8_t **flags, uint32_t *count)
|
||||
{
|
||||
int desc_set = -1;
|
||||
unsigned binding = 0;
|
||||
nir_binding binding = {0};
|
||||
/* global resources (def=NULL) are considered aliasing with all other buffers and
|
||||
* buffer images */
|
||||
// TODO: only merge flags of resources which can really alias.
|
||||
if (def)
|
||||
binding = nir_chase_binding(nir_src_for_ssa(def));
|
||||
|
||||
if (!def) {
|
||||
/* global resources are considered aliasing with all other buffers and
|
||||
* buffer images */
|
||||
// TODO: only merge flags of resources which can really alias.
|
||||
} else if (def->parent_instr->type == nir_instr_type_alu) {
|
||||
nir_alu_instr* mov_instr = nir_instr_as_alu(def->parent_instr);
|
||||
if (mov_instr->op == nir_op_mov && mov_instr->src[0].swizzle[0] == 0 &&
|
||||
mov_instr->src[0].src.ssa->parent_instr->type == nir_instr_type_intrinsic) {
|
||||
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(mov_instr->src[0].src.ssa->parent_instr);
|
||||
if (intrin->intrinsic == nir_intrinsic_vulkan_resource_index) {
|
||||
desc_set = nir_intrinsic_desc_set(intrin);
|
||||
binding = nir_intrinsic_binding(intrin);
|
||||
}
|
||||
}
|
||||
} else if (def->parent_instr->type == nir_instr_type_deref) {
|
||||
nir_deref_instr *deref = nir_instr_as_deref(def->parent_instr);
|
||||
assert(deref->type->is_image());
|
||||
if (deref->type->sampler_dimensionality != GLSL_SAMPLER_DIM_BUF) {
|
||||
if (binding.var) {
|
||||
const glsl_type *type = binding.var->type->without_array();
|
||||
assert(type->is_image());
|
||||
if (type->sampler_dimensionality != GLSL_SAMPLER_DIM_BUF) {
|
||||
*flags = NULL;
|
||||
*count = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||
desc_set = var->data.descriptor_set;
|
||||
binding = var->data.binding;
|
||||
}
|
||||
|
||||
if (desc_set < 0) {
|
||||
if (!binding.success) {
|
||||
*flags = ctx->buffer_resource_flags.data();
|
||||
*count = ctx->buffer_resource_flags.size();
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned set_offset = ctx->resource_flag_offsets[desc_set];
|
||||
unsigned set_offset = ctx->resource_flag_offsets[binding.desc_set];
|
||||
|
||||
if (!(ctx->buffer_resource_flags[set_offset + binding] & buffer_is_restrict)) {
|
||||
if (!(ctx->buffer_resource_flags[set_offset + binding.binding] & buffer_is_restrict)) {
|
||||
/* Non-restrict buffers alias only with other non-restrict buffers.
|
||||
* We reserve flags[0] for these. */
|
||||
*flags = ctx->buffer_resource_flags.data();
|
||||
|
|
@ -182,7 +168,7 @@ inline void get_buffer_resource_flags(isel_context *ctx, nir_ssa_def *def, unsig
|
|||
return;
|
||||
}
|
||||
|
||||
*flags = ctx->buffer_resource_flags.data() + set_offset + binding;
|
||||
*flags = ctx->buffer_resource_flags.data() + set_offset + binding.binding;
|
||||
*count = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue