Added TGSI_OPCODE_END
authorBrian <brian.paul@tungstengraphics.com>
Tue, 2 Oct 2007 19:49:38 +0000 (13:49 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 2 Oct 2007 19:49:38 +0000 (13:49 -0600)
Halt program execution when we get to END instruction.  The GLSL compiler
puts subroutines after the end instruction so we have to stop before then.

src/mesa/pipe/i915simple/i915_fpc_translate.c
src/mesa/pipe/tgsi/exec/tgsi_dump.c
src/mesa/pipe/tgsi/exec/tgsi_exec.c
src/mesa/pipe/tgsi/exec/tgsi_token.h
src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c

index 24f21f6633a101abc777b7640b318c8a2d2a18ef..24bb1d3e2a984c3ac832adfeb4b2023cffb2de11 100644 (file)
@@ -486,6 +486,10 @@ i915_translate_instruction(struct i915_fp_compile *p,
                       swizzle(src1, ONE, Y, ONE, W), 0);
       break;
 
+   case TGSI_OPCODE_END:
+      /* no-op */
+      break;
+
    case TGSI_OPCODE_EX2:
       src0 = src_vector(p, &inst->FullSrcRegisters[0]);
 
index 4cf3397162c55f4db443ba00ee9650d33c8dc75d..0b273cd6e566f697f98c709413662d3909738269 100755 (executable)
@@ -363,7 +363,8 @@ static const char *TGSI_OPCODES[] =
    "OPCODE_CALLNZ",
    "OPCODE_IFC",
    "OPCODE_BREAKC",
-   "OPCODE_TXP"
+   "OPCODE_TXP",
+   "OPCODE_END"
 };
 
 static const char *TGSI_OPCODES_SHORT[] =
@@ -500,6 +501,8 @@ static const char *TGSI_OPCODES_SHORT[] =
    "CALLNZ",
    "IFC",
    "BREAKC",
+   "TXP",
+   "END"
 };
 
 static const char *TGSI_SATS[] =
index ca397bde6a4bb5651063e989a8d5921d3a4a2341..27154d68839f10003f64bdcffa3cc01f4090834b 100644 (file)
@@ -2029,6 +2029,11 @@ exec_instruction(
       }
       break;
 
+   case TGSI_OPCODE_END:
+      /* halt execution */
+      *pc = -1;
+      break;
+
    case TGSI_OPCODE_ENDIF:
       /* pop CondMask */
       assert(mach->CondStackTop > 0);
@@ -2233,15 +2238,14 @@ tgsi_exec_machine_run( struct tgsi_exec_machine *mach )
 
    {
       uint i;
-      int pc;
+      int pc = 0;
 
       for (i = 0; i < mach->NumDeclarations; i++) {
          exec_declaration( mach, mach->Declarations+i );
       }
 
-      pc = 0;
-
-      while (pc != 99 && pc < mach->NumInstructions) {
+      while (pc != -1) {
+         assert(pc < mach->NumInstructions);
          exec_instruction( mach, mach->Instructions + pc, &pc );
       }
    }
index 1d99a50dde74a6e0b148ce7e94ed81d5626a0f68..d2fa813815908aefccc802560176f09d78c0fb85 100644 (file)
@@ -1100,7 +1100,9 @@ struct tgsi_immediate_float32
 /* TGSI_OPCODE_MOVA */
 /* TGSI_OPCODE_LOGP */
 
-#define TGSI_OPCODE_LAST                133
+#define TGSI_OPCODE_END                 133   /* aka HALT */
+
+#define TGSI_OPCODE_LAST                134
 
 #define TGSI_SAT_NONE            0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
index 5daf50ddef6242fafcd2f27f866731f66c02eab6..5c987436bed6705fb54061d2afeead63c0e05d7f 100644 (file)
@@ -154,7 +154,7 @@ convert_writemask(
    return writemask;\r
 }\r
 \r
-static GLboolean\r
+static void\r
 compile_instruction(\r
    const struct prog_instruction *inst,\r
    struct tgsi_full_instruction *fullinst,\r
@@ -460,12 +460,11 @@ compile_instruction(
       fulldst->DstRegister.WriteMask &= TGSI_WRITEMASK_XYZ;\r
       break;\r
    case OPCODE_END:\r
-      return GL_TRUE;\r
+      fullinst->Instruction.Opcode = TGSI_OPCODE_END;\r
+      break;\r
    default:\r
       assert( 0 );\r
    }\r
-\r
-   return GL_FALSE;\r
 }\r
 \r
 static struct tgsi_full_declaration\r
@@ -658,20 +657,13 @@ tgsi_mesa_compile_fp_program(
 #endif\r
 \r
    for( i = 0; i < program->Base.NumInstructions; i++ ) {\r
-      if( compile_instruction(\r
+      compile_instruction(\r
             &program->Base.Instructions[i],\r
             &fullinst,\r
             inputMapping,\r
             outputMapping,\r
             preamble_size,\r
-            TGSI_PROCESSOR_FRAGMENT ) ) {\r
-         assert( i == program->Base.NumInstructions - 1 );\r
-\r
-         if( TGSI_DEBUG ) {\r
-            tgsi_dump( tokens, 0 );\r
-         }\r
-         break;\r
-      }\r
+            TGSI_PROCESSOR_FRAGMENT );\r
 \r
       ti += tgsi_build_full_instruction(\r
          &fullinst,\r
@@ -741,20 +733,13 @@ tgsi_mesa_compile_vp_program(
 \r
 \r
    for( i = 0; i < program->Base.NumInstructions; i++ ) {\r
-      if( compile_instruction(\r
+      compile_instruction(\r
             &program->Base.Instructions[i],\r
             &fullinst,\r
             inputMapping,\r
             outputMapping,\r
             0,\r
-            TGSI_PROCESSOR_VERTEX ) ) {\r
-         assert( i == program->Base.NumInstructions - 1 );\r
-\r
-        if( TGSI_DEBUG ) {\r
-            tgsi_dump( tokens, 0 );\r
-         }\r
-         break;\r
-      }\r
+            TGSI_PROCESSOR_VERTEX );\r
 \r
       ti += tgsi_build_full_instruction(\r
          &fullinst,\r