Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

On 14/09/17 03:05, Nicolai Hähnle wrote:
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

Reply via email to