mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
mesa/st: create add_buffer_to_load_and_stores() helper
Will be used to add LOAD support to UBOs. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
6fa60b5e40
commit
ee0fbc8b71
1 changed files with 27 additions and 19 deletions
|
|
@ -944,6 +944,32 @@ type_size(const struct glsl_type *type)
|
|||
return type->count_attribute_slots(false);
|
||||
}
|
||||
|
||||
static void
|
||||
add_buffer_to_load_and_stores(glsl_to_tgsi_instruction *inst, st_src_reg *buf,
|
||||
exec_list *instructions, ir_constant *access)
|
||||
{
|
||||
/**
|
||||
* emit_asm() might have actually split the op into pieces, e.g. for
|
||||
* double stores. We have to go back and fix up all the generated ops.
|
||||
*/
|
||||
unsigned op = inst->op;
|
||||
do {
|
||||
inst->resource = *buf;
|
||||
if (access)
|
||||
inst->buffer_access = access->value.u[0];
|
||||
|
||||
if (inst == instructions->get_head_raw())
|
||||
break;
|
||||
inst = (glsl_to_tgsi_instruction *)inst->get_prev();
|
||||
|
||||
if (inst->op == TGSI_OPCODE_UADD) {
|
||||
if (inst == instructions->get_head_raw())
|
||||
break;
|
||||
inst = (glsl_to_tgsi_instruction *)inst->get_prev();
|
||||
}
|
||||
} while (inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the given GLSL type is an array or matrix or a structure containing
|
||||
* an array/matrix member, return true. Else return false.
|
||||
|
|
@ -3340,25 +3366,7 @@ glsl_to_tgsi_visitor::visit_ssbo_intrinsic(ir_call *ir)
|
|||
assert(access);
|
||||
}
|
||||
|
||||
/* The emit_asm() might have actually split the op into pieces, e.g. for
|
||||
* double stores. We have to go back and fix up all the generated ops.
|
||||
*/
|
||||
unsigned op = inst->op;
|
||||
do {
|
||||
inst->resource = buffer;
|
||||
if (access)
|
||||
inst->buffer_access = access->value.u[0];
|
||||
|
||||
if (inst == this->instructions.get_head_raw())
|
||||
break;
|
||||
inst = (glsl_to_tgsi_instruction *)inst->get_prev();
|
||||
|
||||
if (inst->op == TGSI_OPCODE_UADD) {
|
||||
if (inst == this->instructions.get_head_raw())
|
||||
break;
|
||||
inst = (glsl_to_tgsi_instruction *)inst->get_prev();
|
||||
}
|
||||
} while (inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
|
||||
add_buffer_to_load_and_stores(inst, &buffer, &this->instructions, access);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue