Add some prototype code for converting RET to END for main(). Disabled for now.
authorBrian <brian.paul@tungstengraphics.com>
Wed, 19 Dec 2007 21:06:22 +0000 (14:06 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Wed, 19 Dec 2007 21:06:22 +0000 (14:06 -0700)
src/mesa/state_tracker/st_mesa_to_tgsi.c

index 470cef8e8542b976517d3c7cd58ef9f32692e48d..01dc70b66e89e79cbc817ed4f85d81f3d5ee26ec 100644 (file)
@@ -180,7 +180,8 @@ compile_instruction(
    const GLuint outputMapping[],
    const GLuint immediateMapping[],
    GLuint preamble_size,
-   GLuint processor )
+   GLuint processor,
+   GLboolean *insideSubroutine)
 {
    GLuint i;
    struct tgsi_full_dst_register *fulldst;
@@ -283,6 +284,7 @@ compile_instruction(
       break;
    case OPCODE_BGNSUB:
       fullinst->Instruction.Opcode = TGSI_OPCODE_BGNSUB;
+      *insideSubroutine = GL_TRUE;
       break;
    case OPCODE_BRA:
       fullinst->Instruction.Opcode = TGSI_OPCODE_BRA;
@@ -334,6 +336,7 @@ compile_instruction(
       break;
    case OPCODE_ENDSUB:
       fullinst->Instruction.Opcode = TGSI_OPCODE_ENDSUB;
+      *insideSubroutine = GL_FALSE;
       break;
    case OPCODE_EX2:
       fullinst->Instruction.Opcode = TGSI_OPCODE_EX2;
@@ -412,7 +415,16 @@ compile_instruction(
       fullinst->Instruction.Opcode = TGSI_OPCODE_RCP;
       break;
    case OPCODE_RET:
-      fullinst->Instruction.Opcode = TGSI_OPCODE_RET;
+      /* If RET is used inside main (not a real subroutine) we may want
+       * to execute END instead of RET.  TBD...
+       */
+      if (1 /*  *insideSubroutine */) {
+         fullinst->Instruction.Opcode = TGSI_OPCODE_RET;
+      }
+      else {
+         /* inside main() pseudo-function */
+         fullinst->Instruction.Opcode = TGSI_OPCODE_END;
+      }
       break;
    case OPCODE_RSQ:
       fullinst->Instruction.Opcode = TGSI_OPCODE_RSQ;
@@ -682,6 +694,7 @@ tgsi_translate_mesa_program(
    GLuint preamble_size = 0;
    GLuint immediates[1000];
    GLuint numImmediates = 0;
+   GLboolean insideSubroutine = GL_FALSE;
 
    assert(procType == TGSI_PROCESSOR_FRAGMENT ||
           procType == TGSI_PROCESSOR_VERTEX);
@@ -879,7 +892,8 @@ tgsi_translate_mesa_program(
             outputMapping,
             immediates,
             preamble_size,
-            procType );
+            procType,
+            &insideSubroutine);
 
       ti += tgsi_build_full_instruction(
          &fullinst,