From 281dad225947b4f00bfc5e785d92d2a7c2f06afe Mon Sep 17 00:00:00 2001 From: michal Date: Tue, 7 Aug 2007 12:50:12 +0100 Subject: Handle labels for IF/ELSE correctly --- src/mesa/pipe/tgsi/core/tgsi_dump.c | 18 ++++++++++++++++-- src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c | 9 +++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/mesa/pipe/tgsi/core/tgsi_dump.c b/src/mesa/pipe/tgsi/core/tgsi_dump.c index 68b81b7ffe..641339c896 100644 --- a/src/mesa/pipe/tgsi/core/tgsi_dump.c +++ b/src/mesa/pipe/tgsi/core/tgsi_dump.c @@ -686,12 +686,15 @@ dump_immediate_verbose( static void dump_instruction_short( struct text_dump *dump, - struct tgsi_full_instruction *inst ) + struct tgsi_full_instruction *inst, + GLuint instno ) { GLuint i; GLboolean first_reg = GL_TRUE; CHR( '\n' ); + UID( instno ); + CHR( ':' ); ENM( inst->Instruction.Opcode, TGSI_OPCODES_SHORT ); switch( inst->Instruction.Saturate ) { @@ -781,6 +784,14 @@ dump_instruction_short( first_reg = GL_FALSE; } + + switch( inst->Instruction.Opcode ) { + case TGSI_OPCODE_IF: + case TGSI_OPCODE_ELSE: + TXT( " : " ); + UID( inst->InstructionExtLabel.Label ); + break; + } } static void @@ -1140,6 +1151,7 @@ tgsi_dump( GLuint verbose = flags & TGSI_DUMP_VERBOSE; GLuint ignored = !(flags & TGSI_DUMP_NO_IGNORED); GLuint deflt = !(flags & TGSI_DUMP_NO_DEFAULT); + GLuint instno = 0; { #if 0 @@ -1206,7 +1218,9 @@ tgsi_dump( case TGSI_TOKEN_TYPE_INSTRUCTION: dump_instruction_short( dump, - &parse.FullToken.FullInstruction ); + &parse.FullToken.FullInstruction, + instno ); + instno++; break; default: diff --git a/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c b/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c index 15f4d1e197..654ec9ac68 100644 --- a/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c +++ b/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c @@ -158,6 +158,7 @@ compile_instruction( const struct prog_instruction *inst, struct tgsi_full_instruction *fullinst, GLuint inputs_read, + GLuint preamble_size, GLuint processor ) { GLuint i; @@ -293,7 +294,7 @@ compile_instruction( break; case OPCODE_ELSE: fullinst->Instruction.Opcode = TGSI_OPCODE_ELSE; - fullinst->InstructionExtLabel.Label = inst->BranchTarget; + fullinst->InstructionExtLabel.Label = inst->BranchTarget + preamble_size; break; case OPCODE_ENDIF: fullinst->Instruction.Opcode = TGSI_OPCODE_ENDIF; @@ -318,7 +319,7 @@ compile_instruction( break; case OPCODE_IF: fullinst->Instruction.Opcode = TGSI_OPCODE_IF; - fullinst->InstructionExtLabel.Label = inst->BranchTarget; + fullinst->InstructionExtLabel.Label = inst->BranchTarget + preamble_size; break; case OPCODE_INT: fullinst->Instruction.Opcode = TGSI_OPCODE_INT; @@ -473,6 +474,7 @@ tgsi_mesa_compile_fp_program( struct tgsi_full_dst_register *fulldst; struct tgsi_full_src_register *fullsrc; GLuint inputs_read; + GLuint preamble_size = 0; *(struct tgsi_version *) &tokens[0] = tgsi_build_version(); @@ -559,12 +561,14 @@ tgsi_mesa_compile_fp_program( &tokens[ti], header, maxTokens - ti ); + preamble_size++; for( i = 0; i < program->Base.NumInstructions; i++ ) { if( compile_instruction( &program->Base.Instructions[i], &fullinst, inputs_read, + preamble_size, TGSI_PROCESSOR_FRAGMENT ) ) { assert( i == program->Base.NumInstructions - 1 ); tgsi_dump( @@ -610,6 +614,7 @@ tgsi_mesa_compile_vp_program( &program->Base.Instructions[ii], &fullinst, inputs_read, + 0, TGSI_PROCESSOR_VERTEX ) ) { assert( ii == program->Base.NumInstructions - 1 ); tgsi_dump( tokens, TGSI_DUMP_NO_IGNORED | TGSI_DUMP_NO_DEFAULT ); -- cgit v1.2.3