Sorry for the lapse and thanks for fixing it. Reviewed-By: Gert Wollny <gw.foss...@gmail.com>
Am Mittwoch, den 13.09.2017, 19:05 +0200 schrieb Nicolai Hähnle: > From: Nicolai Hähnle <nicolai.haeh...@amd.com> > > It can't *really* happen since we don't use subroutines. > CID: 1417491 > --- > src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp > index 374393bb86e..76c198e165b 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp > @@ -610,20 +610,21 @@ static void dump_instruction(int line, > prog_scope *scope, > */ > bool > get_temp_registers_required_lifetimes(void *mem_ctx, exec_list > *instructions, > int ntemps, struct lifetime > *lifetimes) > { > int line = 0; > int loop_id = 0; > int if_id = 0; > int switch_id = 0; > bool is_at_end = false; > + bool ok = true; > int n_scopes = 1; > > /* Count scopes to allocate the needed space without the need for > * re-allocation > */ > foreach_in_list(glsl_to_tgsi_instruction, inst, instructions) { > if (inst->op == TGSI_OPCODE_BGNLOOP || > inst->op == TGSI_OPCODE_SWITCH || > inst->op == TGSI_OPCODE_CASE || > inst->op == TGSI_OPCODE_IF || > @@ -751,21 +752,22 @@ get_temp_registers_required_lifetimes(void > *mem_ctx, exec_list *instructions, > break; > } > case TGSI_OPCODE_CAL: > case TGSI_OPCODE_RET: > /* These opcodes are not supported and if a subroutine > would > * be called in a shader, then the lifetime tracking would > have > * to follow that call to see which registers are used > there. > * Since this is not done, we have to bail out here and > signal > * that no register merge will take place. > */ > - return false; > + ok = false; > + goto out; > default: { > for (unsigned j = 0; j < num_inst_src_regs(inst); j++) { > const st_src_reg& src = inst->src[j]; > if (src.file == PROGRAM_TEMPORARY) > acc[src.index].record_read(line, cur_scope, > src.swizzle); > } > for (unsigned j = 0; j < inst->tex_offset_num_offset; j++) > { > const st_src_reg& src = inst->tex_offsets[j]; > if (src.file == PROGRAM_TEMPORARY) > acc[src.index].record_read(line, cur_scope, > src.swizzle); > @@ -790,22 +792,23 @@ get_temp_registers_required_lifetimes(void > *mem_ctx, exec_list *instructions, > > RENAME_DEBUG(cerr << "========= lifetimes ==============\n"); > for(int i = 0; i < ntemps; ++i) { > RENAME_DEBUG(cerr << setw(4) << i); > lifetimes[i] = acc[i].get_required_lifetime(); > RENAME_DEBUG(cerr << ": [" << lifetimes[i].begin << ", " > << lifetimes[i].end << "]\n"); > } > RENAME_DEBUG(cerr << "==================================\n\n"); > > +out: > delete[] acc; > - return true; > + return ok; > } > > /* Find the next register between [start, end) that has a life time > starting > * at or after bound by using a binary search. > * start points at the beginning of the search range, > * end points at the element past the end of the search range, and > * the array comprising [start, end) must be sorted in ascending > order. > */ > static access_record* > find_next_rename(access_record* start, access_record* end, int > bound) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev