mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
glsl_to_tgsi: remove indirect addressing limitations
They shouldn't be necessary any more. Signed-off-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
3f67251e3d
commit
affdff230b
1 changed files with 3 additions and 33 deletions
|
|
@ -325,7 +325,6 @@ public:
|
||||||
|
|
||||||
int num_address_regs;
|
int num_address_regs;
|
||||||
int samplers_used;
|
int samplers_used;
|
||||||
bool indirect_addr_temps;
|
|
||||||
bool indirect_addr_consts;
|
bool indirect_addr_consts;
|
||||||
|
|
||||||
int glsl_version;
|
int glsl_version;
|
||||||
|
|
@ -557,10 +556,6 @@ glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
|
||||||
/* Update indirect addressing status used by TGSI */
|
/* Update indirect addressing status used by TGSI */
|
||||||
if (dst.reladdr) {
|
if (dst.reladdr) {
|
||||||
switch(dst.file) {
|
switch(dst.file) {
|
||||||
case PROGRAM_TEMPORARY:
|
|
||||||
case PROGRAM_ARRAY:
|
|
||||||
this->indirect_addr_temps = true;
|
|
||||||
break;
|
|
||||||
case PROGRAM_LOCAL_PARAM:
|
case PROGRAM_LOCAL_PARAM:
|
||||||
case PROGRAM_ENV_PARAM:
|
case PROGRAM_ENV_PARAM:
|
||||||
case PROGRAM_STATE_VAR:
|
case PROGRAM_STATE_VAR:
|
||||||
|
|
@ -579,10 +574,6 @@ glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
|
||||||
for (i=0; i<3; i++) {
|
for (i=0; i<3; i++) {
|
||||||
if(inst->src[i].reladdr) {
|
if(inst->src[i].reladdr) {
|
||||||
switch(inst->src[i].file) {
|
switch(inst->src[i].file) {
|
||||||
case PROGRAM_TEMPORARY:
|
|
||||||
case PROGRAM_ARRAY:
|
|
||||||
this->indirect_addr_temps = true;
|
|
||||||
break;
|
|
||||||
case PROGRAM_LOCAL_PARAM:
|
case PROGRAM_LOCAL_PARAM:
|
||||||
case PROGRAM_ENV_PARAM:
|
case PROGRAM_ENV_PARAM:
|
||||||
case PROGRAM_STATE_VAR:
|
case PROGRAM_STATE_VAR:
|
||||||
|
|
@ -3000,7 +2991,6 @@ glsl_to_tgsi_visitor::glsl_to_tgsi_visitor()
|
||||||
current_function = NULL;
|
current_function = NULL;
|
||||||
num_address_regs = 0;
|
num_address_regs = 0;
|
||||||
samplers_used = 0;
|
samplers_used = 0;
|
||||||
indirect_addr_temps = false;
|
|
||||||
indirect_addr_consts = false;
|
indirect_addr_consts = false;
|
||||||
glsl_version = 0;
|
glsl_version = 0;
|
||||||
native_integers = false;
|
native_integers = false;
|
||||||
|
|
@ -3839,7 +3829,6 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
|
||||||
v->next_temp = original->next_temp;
|
v->next_temp = original->next_temp;
|
||||||
v->num_address_regs = original->num_address_regs;
|
v->num_address_regs = original->num_address_regs;
|
||||||
v->samplers_used = prog->SamplersUsed = original->samplers_used;
|
v->samplers_used = prog->SamplersUsed = original->samplers_used;
|
||||||
v->indirect_addr_temps = original->indirect_addr_temps;
|
|
||||||
v->indirect_addr_consts = original->indirect_addr_consts;
|
v->indirect_addr_consts = original->indirect_addr_consts;
|
||||||
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
||||||
v->num_immediates = original->num_immediates;
|
v->num_immediates = original->num_immediates;
|
||||||
|
|
@ -3970,7 +3959,6 @@ get_bitmap_visitor(struct st_fragment_program *fp,
|
||||||
v->next_temp = original->next_temp;
|
v->next_temp = original->next_temp;
|
||||||
v->num_address_regs = original->num_address_regs;
|
v->num_address_regs = original->num_address_regs;
|
||||||
v->samplers_used = prog->SamplersUsed = original->samplers_used;
|
v->samplers_used = prog->SamplersUsed = original->samplers_used;
|
||||||
v->indirect_addr_temps = original->indirect_addr_temps;
|
|
||||||
v->indirect_addr_consts = original->indirect_addr_consts;
|
v->indirect_addr_consts = original->indirect_addr_consts;
|
||||||
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
memcpy(&v->immediates, &original->immediates, sizeof(v->immediates));
|
||||||
v->num_immediates = original->num_immediates;
|
v->num_immediates = original->num_immediates;
|
||||||
|
|
@ -4840,17 +4828,6 @@ st_translate_program(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (program->indirect_addr_temps) {
|
|
||||||
/* If temps are accessed with indirect addressing, declare temporaries
|
|
||||||
* in sequential order. Else, we declare them on demand elsewhere.
|
|
||||||
* (Note: the number of temporaries is equal to program->next_temp)
|
|
||||||
*/
|
|
||||||
for (i = 0; i < (unsigned)program->next_temp; i++) {
|
|
||||||
/* XXX use TGSI_FILE_TEMPORARY_ARRAY when it's supported by ureg */
|
|
||||||
t->temps[i] = ureg_DECL_local_temporary(t->ureg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy over array sizes
|
/* Copy over array sizes
|
||||||
*/
|
*/
|
||||||
memcpy(t->array_sizes, program->array_sizes, sizeof(unsigned) * program->next_array);
|
memcpy(t->array_sizes, program->array_sizes, sizeof(unsigned) * program->next_array);
|
||||||
|
|
@ -5088,16 +5065,9 @@ get_mesa_program(struct gl_context *ctx,
|
||||||
v->copy_propagate();
|
v->copy_propagate();
|
||||||
while (v->eliminate_dead_code_advanced());
|
while (v->eliminate_dead_code_advanced());
|
||||||
|
|
||||||
/* FIXME: These passes to optimize temporary registers don't work when there
|
v->eliminate_dead_code();
|
||||||
* is indirect addressing of the temporary register space. We need proper
|
v->merge_registers();
|
||||||
* array support so that we don't have to give up these passes in every
|
v->renumber_registers();
|
||||||
* shader that uses arrays.
|
|
||||||
*/
|
|
||||||
if (!v->indirect_addr_temps) {
|
|
||||||
v->eliminate_dead_code();
|
|
||||||
v->merge_registers();
|
|
||||||
v->renumber_registers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write the END instruction. */
|
/* Write the END instruction. */
|
||||||
v->emit(NULL, TGSI_OPCODE_END);
|
v->emit(NULL, TGSI_OPCODE_END);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue