\r
#define TGSI_DEBUG 0\r
\r
-#if 0\r
-/**\r
- * Convert a VERT_ATTRIB_x to a TGSI_ATTRIB_y\r
- */\r
-uint\r
-tgsi_mesa_translate_vertex_input(GLuint attrib)\r
-{\r
- /* XXX these could be implemented with array lookups too.... */\r
- switch (attrib) {\r
- case VERT_ATTRIB_POS:\r
- return TGSI_ATTRIB_POS;\r
- case VERT_ATTRIB_WEIGHT:\r
- return TGSI_ATTRIB_WEIGHT;\r
- case VERT_ATTRIB_NORMAL:\r
- return TGSI_ATTRIB_NORMAL;\r
- case VERT_ATTRIB_COLOR0:\r
- return TGSI_ATTRIB_COLOR0;\r
- case VERT_ATTRIB_COLOR1:\r
- return TGSI_ATTRIB_COLOR1;\r
- case VERT_ATTRIB_FOG:\r
- return TGSI_ATTRIB_FOG;\r
- case VERT_ATTRIB_COLOR_INDEX:\r
- return TGSI_ATTRIB_COLOR_INDEX;\r
- case VERT_ATTRIB_EDGEFLAG:\r
- return TGSI_ATTRIB_EDGEFLAG;\r
- case VERT_ATTRIB_TEX0:\r
- return TGSI_ATTRIB_TEX0;\r
- case VERT_ATTRIB_TEX1:\r
- return TGSI_ATTRIB_TEX1;\r
- case VERT_ATTRIB_TEX2:\r
- return TGSI_ATTRIB_TEX2;\r
- case VERT_ATTRIB_TEX3:\r
- return TGSI_ATTRIB_TEX3;\r
- case VERT_ATTRIB_TEX4:\r
- return TGSI_ATTRIB_TEX4;\r
- case VERT_ATTRIB_TEX5:\r
- return TGSI_ATTRIB_TEX5;\r
- case VERT_ATTRIB_TEX6:\r
- return TGSI_ATTRIB_TEX6;\r
- case VERT_ATTRIB_TEX7:\r
- return TGSI_ATTRIB_TEX7;\r
- case VERT_ATTRIB_GENERIC0:\r
- return TGSI_ATTRIB_VAR0;\r
- case VERT_ATTRIB_GENERIC1:\r
- return TGSI_ATTRIB_VAR1;\r
- case VERT_ATTRIB_GENERIC2:\r
- return TGSI_ATTRIB_VAR2;\r
- case VERT_ATTRIB_GENERIC3:\r
- return TGSI_ATTRIB_VAR3;\r
- case VERT_ATTRIB_GENERIC4:\r
- return TGSI_ATTRIB_VAR4;\r
- case VERT_ATTRIB_GENERIC5:\r
- return TGSI_ATTRIB_VAR5;\r
- case VERT_ATTRIB_GENERIC6:\r
- return TGSI_ATTRIB_VAR6;\r
- case VERT_ATTRIB_GENERIC7:\r
- return TGSI_ATTRIB_VAR7;\r
- default:\r
- assert(0);\r
- return 0;\r
- }\r
-}\r
-\r
-\r
-/**\r
- * Convert VERT_RESULT_x to TGSI_ATTRIB_y\r
- */\r
-uint\r
-tgsi_mesa_translate_vertex_output(GLuint attrib)\r
-{\r
- switch (attrib) {\r
- case VERT_RESULT_HPOS:\r
- return TGSI_ATTRIB_POS;\r
- case VERT_RESULT_COL0:\r
- return TGSI_ATTRIB_COLOR0;\r
- case VERT_RESULT_COL1:\r
- return TGSI_ATTRIB_COLOR1;\r
- case VERT_RESULT_FOGC:\r
- return TGSI_ATTRIB_FOG;\r
- case VERT_RESULT_TEX0:\r
- return TGSI_ATTRIB_TEX0;\r
- case VERT_RESULT_TEX1:\r
- return TGSI_ATTRIB_TEX1;\r
- case VERT_RESULT_TEX2:\r
- return TGSI_ATTRIB_TEX2;\r
- case VERT_RESULT_TEX3:\r
- return TGSI_ATTRIB_TEX3;\r
- case VERT_RESULT_TEX4:\r
- return TGSI_ATTRIB_TEX4;\r
- case VERT_RESULT_TEX5:\r
- return TGSI_ATTRIB_TEX5;\r
- case VERT_RESULT_TEX6:\r
- return TGSI_ATTRIB_TEX6;\r
- case VERT_RESULT_TEX7:\r
- return TGSI_ATTRIB_TEX7;\r
- case VERT_RESULT_PSIZ:\r
- return TGSI_ATTRIB_POINTSIZE;\r
- case VERT_RESULT_BFC0:\r
- return TGSI_ATTRIB_BFC0;\r
- case VERT_RESULT_BFC1:\r
- return TGSI_ATTRIB_BFC1;\r
- case VERT_RESULT_VAR0:\r
- return TGSI_ATTRIB_VAR0;\r
- case VERT_RESULT_VAR0 + 1:\r
- return TGSI_ATTRIB_VAR1;\r
- case VERT_RESULT_VAR0 + 2:\r
- return TGSI_ATTRIB_VAR2;\r
- case VERT_RESULT_VAR0 + 3:\r
- return TGSI_ATTRIB_VAR3;\r
- case VERT_RESULT_VAR0 + 4:\r
- return TGSI_ATTRIB_VAR4;\r
- case VERT_RESULT_VAR0 + 5:\r
- return TGSI_ATTRIB_VAR5;\r
- case VERT_RESULT_VAR0 + 6:\r
- return TGSI_ATTRIB_VAR6;\r
- case VERT_RESULT_VAR0 + 7:\r
- return TGSI_ATTRIB_VAR7;\r
- default:\r
- assert(0);\r
- return 0;\r
- }\r
-}\r
-\r
-\r
-/**\r
- * Convert a FRAG_ATTRIB_x to a TGSI_ATTRIB_y\r
- */\r
-uint\r
-tgsi_mesa_translate_fragment_input(GLuint attrib)\r
-{\r
- switch (attrib) {\r
- case FRAG_ATTRIB_WPOS:\r
- return TGSI_ATTRIB_POS;\r
- case FRAG_ATTRIB_COL0:\r
- return TGSI_ATTRIB_COLOR0;\r
- case FRAG_ATTRIB_COL1:\r
- return TGSI_ATTRIB_COLOR1;\r
- case FRAG_ATTRIB_FOGC:\r
- return TGSI_ATTRIB_FOG;\r
- case FRAG_ATTRIB_TEX0:\r
- return TGSI_ATTRIB_TEX0;\r
- case FRAG_ATTRIB_TEX1:\r
- return TGSI_ATTRIB_TEX1;\r
- case FRAG_ATTRIB_TEX2:\r
- return TGSI_ATTRIB_TEX2;\r
- case FRAG_ATTRIB_TEX3:\r
- return TGSI_ATTRIB_TEX3;\r
- case FRAG_ATTRIB_TEX4:\r
- return TGSI_ATTRIB_TEX4;\r
- case FRAG_ATTRIB_TEX5:\r
- return TGSI_ATTRIB_TEX5;\r
- case FRAG_ATTRIB_TEX6:\r
- return TGSI_ATTRIB_TEX6;\r
- case FRAG_ATTRIB_TEX7:\r
- return TGSI_ATTRIB_TEX7;\r
- case FRAG_ATTRIB_VAR0:\r
- return TGSI_ATTRIB_VAR0;\r
- case FRAG_ATTRIB_VAR0 + 1:\r
- return TGSI_ATTRIB_VAR1;\r
- case FRAG_ATTRIB_VAR0 + 2:\r
- return TGSI_ATTRIB_VAR2;\r
- case FRAG_ATTRIB_VAR0 + 3:\r
- return TGSI_ATTRIB_VAR3;\r
- case FRAG_ATTRIB_VAR0 + 4:\r
- return TGSI_ATTRIB_VAR4;\r
- case FRAG_ATTRIB_VAR0 + 5:\r
- return TGSI_ATTRIB_VAR5;\r
- case FRAG_ATTRIB_VAR0 + 6:\r
- return TGSI_ATTRIB_VAR6;\r
- case FRAG_ATTRIB_VAR0 + 7:\r
- return TGSI_ATTRIB_VAR7;\r
- default:\r
- assert(0);\r
- return 0;\r
- }\r
-}\r
-\r
-\r
-/**\r
- * Convert FRAG_RESULT_x to TGSI_ATTRIB_y\r
- */\r
-uint\r
-tgsi_mesa_translate_fragment_output(GLuint attrib)\r
-{\r
- switch (attrib) {\r
- case FRAG_RESULT_DEPR:\r
- return TGSI_ATTRIB_POS;\r
- case FRAG_RESULT_COLR:\r
- /* fall-through */\r
- case FRAG_RESULT_COLH:\r
- /* fall-through */\r
- case FRAG_RESULT_DATA0:\r
- return TGSI_ATTRIB_COLOR0;\r
- case FRAG_RESULT_DATA0 + 1:\r
- return TGSI_ATTRIB_COLOR0 + 1;\r
- case FRAG_RESULT_DATA0 + 2:\r
- return TGSI_ATTRIB_COLOR0 + 2;\r
- case FRAG_RESULT_DATA0 + 3:\r
- return TGSI_ATTRIB_COLOR0 + 3;\r
- default:\r
- assert(0);\r
- return 0;\r
- }\r
-}\r
-#endif\r
-\r
-\r
-#if 0\r
-uint\r
-tgsi_mesa_translate_vertex_input_mask(GLbitfield mask)\r
-{\r
- uint tgsiMask = 0x0;\r
- uint i;\r
- for (i = 0; i < VERT_ATTRIB_MAX && mask; i++) {\r
- if (mask & (1 << i)) {\r
- tgsiMask |= 1 << tgsi_mesa_translate_vertex_input(i);\r
- }\r
- mask &= ~(1 << i);\r
- }\r
- return tgsiMask;\r
-}\r
-\r
-uint\r
-tgsi_mesa_translate_vertex_output_mask(GLbitfield mask)\r
-{\r
- uint tgsiMask = 0x0;\r
- uint i;\r
- for (i = 0; i < VERT_RESULT_MAX && mask; i++) {\r
- if (mask & (1 << i)) {\r
- tgsiMask |= 1 << tgsi_mesa_translate_vertex_output(i);\r
- }\r
- mask &= ~(1 << i);\r
- }\r
- return tgsiMask;\r
-}\r
-\r
-uint\r
-tgsi_mesa_translate_fragment_input_mask(GLbitfield mask)\r
-{\r
- uint tgsiMask = 0x0;\r
- uint i;\r
- for (i = 0; i < FRAG_ATTRIB_MAX && mask; i++) {\r
- if (mask & (1 << i)) {\r
- tgsiMask |= 1 << tgsi_mesa_translate_fragment_input(i);\r
- }\r
- mask &= ~(1 << i);\r
- }\r
- return tgsiMask;\r
-}\r
-\r
-\r
-uint\r
-tgsi_mesa_translate_fragment_output_mask(GLbitfield mask)\r
-{\r
- uint tgsiMask = 0x0;\r
- uint i;\r
- for (i = 0; i < FRAG_RESULT_MAX && mask; i++) {\r
- if (mask & (1 << i)) {\r
- tgsiMask |= 1 << tgsi_mesa_translate_fragment_output(i);\r
- }\r
- mask &= ~(1 << i);\r
- }\r
- return tgsiMask;\r
-}\r
-\r
-\r
-#endif\r
-\r
-\r
-\r
\r
/*\r
* Map mesa register file to TGSI register file.\r
GLuint processor,\r
GLuint file,\r
GLuint index,\r
-#if 0\r
- GLbitfield usage_bitmask,\r
-#endif\r
const GLuint inputMapping[],\r
const GLuint outputMapping[])\r
{\r
GLuint mapped_index;\r
-#if 0\r
- GLuint i;\r
-#endif\r
\r
assert(processor == TGSI_PROCESSOR_FRAGMENT\r
|| processor == TGSI_PROCESSOR_VERTEX);\r
* If a program uses 3 input attribs, the mapped indexes will be 1,2,3.\r
* etc.\r
*/\r
- assert( index < 32 );\r
- if (inputMapping) {\r
- printf("New map %d input %d to %d\n", processor, index,\r
- inputMapping[index]);\r
- return inputMapping[index];\r
- }\r
- assert(0);\r
-#if 0\r
- assert( usage_bitmask & (1 << index) );\r
- mapped_index = 0;\r
- for( i = 0; i < index; i++ ) {\r
- if( usage_bitmask & (1 << i) ) {\r
- mapped_index++;\r
- }\r
- }\r
printf("Map %d input %d to %d\n", processor, index, mapped_index);\r
-#endif\r
- break;\r
+ return inputMapping[index];\r
\r
case TGSI_FILE_OUTPUT:\r
/*\r
else {\r
/* vertex output slots are tightly packed, find mapped pos */\r
/* mapped_index = VERT_RESULT_x */\r
-#if 0\r
- mapped_index = 0;\r
- for( i = 0; i < index; i++ ) {\r
- if( usage_bitmask & (1 << i) ) {\r
- mapped_index++;\r
- }\r
- }\r
- assert(outputMapping[index] == mapped_index);\r
-#endif\r
mapped_index = outputMapping[index];\r
printf("Map VP output from %d to %d\n", index, mapped_index);\r
}\r
compile_instruction(\r
const struct prog_instruction *inst,\r
struct tgsi_full_instruction *fullinst,\r
-#if 0\r
- GLuint inputs_read,\r
- GLuint outputs_written,\r
-#endif\r
const GLuint inputMapping[],\r
const GLuint outputMapping[],\r
GLuint preamble_size,\r
processor,\r
fulldst->DstRegister.File,\r
inst->DstReg.Index,\r
-#if 0\r
- outputs_written,\r
-#endif\r
-#if 0\r
- NULL,\r
-#else\r
inputMapping,\r
-#endif\r
outputMapping\r
);\r
fulldst->DstRegister.WriteMask = convert_writemask( inst->DstReg.WriteMask );\r
processor,\r
fullsrc->SrcRegister.File,\r
inst->SrcReg[i].Index,\r
-#if 0\r
- inputs_read,\r
-#endif\r
inputMapping,\r
outputMapping );\r
\r
struct tgsi_token *tokens,\r
GLuint maxTokens )\r
{\r
- GLuint i, ti, count;\r
+ GLuint i;\r
+ GLuint ti; /* token index */\r
struct tgsi_header *header;\r
struct tgsi_processor *processor;\r
struct tgsi_full_declaration fulldecl;\r
\r
ti = 3;\r
\r
-#if 0\r
- reads_wpos = program->Base.InputsRead & (1 << FRAG_ATTRIB_WPOS);\r
- inputs_read = program->Base.InputsRead | (1 << FRAG_ATTRIB_WPOS);\r
-\r
- /*\r
- * Declare input attributes. Note that we do not interpolate fragment position.\r
- */\r
- reads_wpos = 1;\r
- /* Fragment position. */\r
- if( reads_wpos ) {\r
- fulldecl = make_frag_input_decl(\r
- 0,\r
- TGSI_INTERPOLATE_CONSTANT,\r
- TGSI_WRITEMASK_XY,\r
- TGSI_SEMANTIC_POSITION );\r
- ti += tgsi_build_full_declaration(\r
- &fulldecl,\r
- &tokens[ti],\r
- header,\r
- maxTokens - ti );\r
- }\r
-\r
- /* Fragment zw. */\r
- fulldecl = make_frag_input_decl(\r
- 0,\r
- TGSI_INTERPOLATE_LINEAR,\r
- reads_wpos ? TGSI_WRITEMASK_ZW : TGSI_WRITEMASK_Z,\r
- TGSI_SEMANTIC_POSITION );\r
- ti += tgsi_build_full_declaration(\r
- &fulldecl,\r
- &tokens[ti],\r
- header,\r
- maxTokens - ti );\r
-\r
- count = 0;\r
- for( i = 1; i < 32; i++ ) {\r
- if( inputs_read & (1 << i) ) {\r
- count++;\r
- fulldecl = make_frag_input_decl(count,\r
- interpMode[i],\r
- TGSI_WRITEMASK_XYZW,\r
- inputSemantic[count] );\r
- ti += tgsi_build_full_declaration(&fulldecl,\r
- &tokens[ti],\r
- header,\r
- maxTokens - ti );\r
- }\r
- } \r
-#else\r
-\r
for (i = 0; i < numInputs; i++) {\r
switch (inputSemantic[i]) {\r
case TGSI_SEMANTIC_POSITION:\r
break;\r
}\r
}\r
-#endif\r
\r
\r
/*\r
if( compile_instruction(\r
&program->Base.Instructions[i],\r
&fullinst,\r
-#if 0\r
- inputs_read,\r
- ~0, /*outputs_written*/\r
-#endif\r
inputMapping,\r
outputMapping,\r
preamble_size,\r
struct tgsi_header *header;\r
struct tgsi_processor *processor;\r
struct tgsi_full_instruction fullinst;\r
-#if 0\r
- GLuint inputs_read = ~0;\r
- GLuint outputs_written;\r
-\r
- outputs_written = program->Base.OutputsWritten;\r
-#endif\r
\r
*(struct tgsi_version *) &tokens[0] = tgsi_build_version();\r
\r
if( compile_instruction(\r
&program->Base.Instructions[i],\r
&fullinst,\r
-#if 0\r
- inputs_read,\r
- outputs_written,\r
-#endif\r
inputMapping,\r
outputMapping,\r
0,\r