Add some prototype code for converting RET to END for main(). Disabled for now.

This commit is contained in:
Brian
2007-12-19 14:06:22 -07:00
parent 4a1776a763
commit e9207430ce
+17 -3
View 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,