From: Marek Olšák <marek.ol...@amd.com> I don't know what this was supposed to do, but all TGSI labels were always 0. --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 92 +----------------------------- 1 file changed, 2 insertions(+), 90 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 293654c..65db521 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5096,24 +5096,20 @@ glsl_to_tgsi_visitor::renumber_registers(void) new_index++; } rename_temp_registers(num_renames, renames); this->next_temp = new_index; ralloc_free(renames); ralloc_free(first_reads); } /* ------------------------- TGSI conversion stuff -------------------------- */ -struct label { - unsigned branch_target; - unsigned token; -}; /** * Intermediate state used during shader translation. */ struct st_translate { struct ureg_program *ureg; unsigned temps_size; struct ureg_dst *temps; @@ -5133,39 +5129,21 @@ struct st_translate { struct ureg_src shared_memory; unsigned *array_sizes; struct inout_decl *input_decls; unsigned num_input_decls; struct inout_decl *output_decls; unsigned num_output_decls; const GLuint *inputMapping; const GLuint *outputMapping; - /* For every instruction that contains a label, keep - * details so that we can go back afterwards and emit the correct - * tgsi instruction number for each label. - */ - struct label *labels; - unsigned labels_size; - unsigned labels_count; - - /* Keep a record of the tgsi instruction number that each mesa - * instruction starts at, will be used to fix up labels after - * translation. - */ - unsigned *insn; - unsigned insn_size; - unsigned insn_count; - unsigned procType; /**< PIPE_SHADER_VERTEX/FRAGMENT */ - - boolean error; }; /** Map Mesa's SYSTEM_VALUE_x to TGSI_SEMANTIC_x */ unsigned _mesa_sysval_to_semantic(unsigned sysval) { switch (sysval) { /* Vertex shader */ case SYSTEM_VALUE_VERTEX_ID: return TGSI_SEMANTIC_VERTEXID; @@ -5223,67 +5201,20 @@ _mesa_sysval_to_semantic(unsigned sysval) /* Unhandled */ case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX: case SYSTEM_VALUE_GLOBAL_INVOCATION_ID: case SYSTEM_VALUE_VERTEX_CNT: default: assert(!"Unexpected SYSTEM_VALUE_ enum"); return TGSI_SEMANTIC_COUNT; } } - -/** - * Make note of a branch to a label in the TGSI code. - * After we've emitted all instructions, we'll go over the list - * of labels built here and patch the TGSI code with the actual - * location of each label. - */ -static unsigned *get_label(struct st_translate *t, unsigned branch_target) -{ - unsigned i; - - if (t->labels_count + 1 >= t->labels_size) { - t->labels_size = 1 << (util_logbase2(t->labels_size) + 1); - t->labels = (struct label *)realloc(t->labels, - t->labels_size * sizeof(struct label)); - if (t->labels == NULL) { - static unsigned dummy; - t->error = TRUE; - return &dummy; - } - } - - i = t->labels_count++; - t->labels[i].branch_target = branch_target; - return &t->labels[i].token; -} - -/** - * Called prior to emitting the TGSI code for each instruction. - * Allocate additional space for instructions if needed. - * Update the insn[] array so the next glsl_to_tgsi_instruction points to - * the next TGSI instruction. - */ -static void set_insn_start(struct st_translate *t, unsigned start) -{ - if (t->insn_count + 1 >= t->insn_size) { - t->insn_size = 1 << (util_logbase2(t->insn_size) + 1); - t->insn = (unsigned *)realloc(t->insn, t->insn_size * sizeof(t->insn[0])); - if (t->insn == NULL) { - t->error = TRUE; - return; - } - } - - t->insn[t->insn_count++] = start; -} - /** * Map a glsl_to_tgsi constant/immediate to a TGSI immediate. */ static struct ureg_src emit_immediate(struct st_translate *t, gl_constant_value values[4], int type, int size) { struct ureg_program *ureg = t->ureg; @@ -5570,24 +5501,21 @@ compile_tgsi_instruction(struct st_translate *t, for (i = 0; i < num_src; i++) src[i] = translate_src(t, &inst->src[i]); switch(inst->op) { case TGSI_OPCODE_BGNLOOP: case TGSI_OPCODE_ELSE: case TGSI_OPCODE_ENDLOOP: case TGSI_OPCODE_IF: case TGSI_OPCODE_UIF: assert(num_dst == 0); - ureg_label_insn(ureg, - inst->op, - src, num_src, - get_label(t, 0)); + ureg_insn(ureg, inst->op, NULL, 0, src, num_src); return; case TGSI_OPCODE_TEX: case TGSI_OPCODE_TXB: case TGSI_OPCODE_TXD: case TGSI_OPCODE_TXL: case TGSI_OPCODE_TXP: case TGSI_OPCODE_TXQ: case TGSI_OPCODE_TXQS: case TGSI_OPCODE_TXF: @@ -6300,31 +6228,22 @@ st_translate_program( if (program->images_used & (1 << i)) { t->images[i] = ureg_DECL_image(ureg, i, program->image_targets[i], program->image_formats[i], true, false); } } /* Emit each instruction in turn: */ - foreach_in_list(glsl_to_tgsi_instruction, inst, &program->instructions) { - set_insn_start(t, ureg_get_instruction_number(ureg)); + foreach_in_list(glsl_to_tgsi_instruction, inst, &program->instructions) compile_tgsi_instruction(t, inst); - } - - /* Fix up all emitted labels: - */ - for (i = 0; i < t->labels_count; i++) { - ureg_fixup_label(ureg, t->labels[i].token, - t->insn[t->labels[i].branch_target]); - } /* Set the next shader stage hint for VS and TES. */ switch (procType) { case PIPE_SHADER_VERTEX: case PIPE_SHADER_TESS_EVAL: if (program->shader_program->SeparateShader) break; for (i = program->shader->Stage+1; i <= MESA_SHADER_FRAGMENT; i++) { if (program->shader_program->_LinkedShaders[i]) { @@ -6352,31 +6271,24 @@ st_translate_program( break; } } break; } out: if (t) { free(t->arrays); free(t->temps); - free(t->insn); - free(t->labels); free(t->constants); t->num_constants = 0; free(t->immediates); t->num_immediates = 0; - - if (t->error) { - debug_printf("%s: translate error flag set\n", __func__); - } - FREE(t); } return ret; } /* ----------------------------- End TGSI code ------------------------------ */ /** * Convert a shader's GLSL IR into a Mesa gl_program, although without -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev