define new TGSI_ATTRIB_ tokens for program inputs/outputs, plus translation functions
authorBrian <brian.paul@tungstengraphics.com>
Thu, 23 Aug 2007 20:58:26 +0000 (14:58 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 23 Aug 2007 20:58:26 +0000 (14:58 -0600)
src/mesa/pipe/tgsi/core/tgsi_token.h
src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c

index 3e66d55..a12a2d7 100644 (file)
@@ -1477,6 +1477,48 @@ struct tgsi_dst_register_ext_predicate
    unsigned Extended     : 1;    /* BOOL */
 };
 
+
+/**
+ * The specific values here are not important.
+ */
+enum {
+   TGSI_ATTRIB_POS = 0,
+   TGSI_ATTRIB_WEIGHT = 1,
+   TGSI_ATTRIB_NORMAL = 2,
+   TGSI_ATTRIB_COLOR0 = 3,
+   TGSI_ATTRIB_COLOR1 = 4,
+   TGSI_ATTRIB_FOG = 5,
+   TGSI_ATTRIB_COLOR_INDEX = 6,  /* XXX omit? */
+   TGSI_ATTRIB_EDGEFLAG = 7,
+   TGSI_ATTRIB_TEX0 = 8,
+   TGSI_ATTRIB_TEX1 = 9,
+   TGSI_ATTRIB_TEX2 = 10,
+   TGSI_ATTRIB_TEX3 = 11,
+   TGSI_ATTRIB_TEX4 = 12,
+   TGSI_ATTRIB_TEX5 = 13,
+   TGSI_ATTRIB_TEX6 = 14,
+   TGSI_ATTRIB_TEX7 = 15,
+   TGSI_ATTRIB_VAR0 = 16,
+   TGSI_ATTRIB_VAR1 = 17,
+   TGSI_ATTRIB_VAR2 = 18,
+   TGSI_ATTRIB_VAR3 = 19,
+   TGSI_ATTRIB_VAR4 = 20,
+   TGSI_ATTRIB_VAR5 = 21,
+   TGSI_ATTRIB_VAR6 = 22,
+   TGSI_ATTRIB_VAR7 = 23,
+   TGSI_ATTRIB_POINTSIZE = 24,
+   TGSI_ATTRIB_BFC0 = 25,
+   TGSI_ATTRIB_BFC1 = 26,
+   TGSI_ATTRIB_CLIP_POS = 27,
+   TGSI_ATTRIB_VERTEX_HEADER = 28,
+   TGSI_ATTRIB_MAX = 29
+};
+
+
+#define TGSI_MAX_TEXTURE 8
+#define TGSI_MAX_VARYING 8
+
+
 #if defined __cplusplus
 } // extern "C"
 #endif // defined __cplusplus
index eeaed84..dfb263e 100644 (file)
@@ -3,6 +3,213 @@
 \r
 #define TGSI_DEBUG 1\r
 \r
+\r
+/**\r
+ * Convert a VERT_ATTRIB_x to a TGSI_ATTRIB_y\r
+ */\r
+static GLuint\r
+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
+static GLuint\r
+translate_vertex_ouput(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
+static GLuint\r
+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
+static GLuint\r
+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
+\r
+\r
+\r
 /*\r
  * Map mesa register file to TGSI register file.\r
  */\r