summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-08-23 14:58:26 -0600
committerBrian <brian.paul@tungstengraphics.com>2007-08-23 14:58:26 -0600
commit074f07176a3c916573d9e2b4cb20316591c1e99e (patch)
treee43304bb37456da344edf6cf011bfe71190fec4a
parentba50b6958ab69e5e3ee190126bb08aad6118c607 (diff)
define new TGSI_ATTRIB_ tokens for program inputs/outputs, plus translation functions
-rw-r--r--src/mesa/pipe/tgsi/core/tgsi_token.h42
-rw-r--r--src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c207
2 files changed, 249 insertions, 0 deletions
diff --git a/src/mesa/pipe/tgsi/core/tgsi_token.h b/src/mesa/pipe/tgsi/core/tgsi_token.h
index 3e66d55b7d..a12a2d7370 100644
--- a/src/mesa/pipe/tgsi/core/tgsi_token.h
+++ b/src/mesa/pipe/tgsi/core/tgsi_token.h
@@ -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
diff --git a/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c b/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c
index eeaed844d5..dfb263ebdc 100644
--- a/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c
+++ b/src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c
@@ -3,6 +3,213 @@
#define TGSI_DEBUG 1
+
+/**
+ * Convert a VERT_ATTRIB_x to a TGSI_ATTRIB_y
+ */
+static GLuint
+translate_vertex_input(GLuint attrib)
+{
+ /* XXX these could be implemented with array lookups too.... */
+ switch (attrib) {
+ case VERT_ATTRIB_POS:
+ return TGSI_ATTRIB_POS;
+ case VERT_ATTRIB_WEIGHT:
+ return TGSI_ATTRIB_WEIGHT;
+ case VERT_ATTRIB_NORMAL:
+ return TGSI_ATTRIB_NORMAL;
+ case VERT_ATTRIB_COLOR0:
+ return TGSI_ATTRIB_COLOR0;
+ case VERT_ATTRIB_COLOR1:
+ return TGSI_ATTRIB_COLOR1;
+ case VERT_ATTRIB_FOG:
+ return TGSI_ATTRIB_FOG;
+ case VERT_ATTRIB_COLOR_INDEX:
+ return TGSI_ATTRIB_COLOR_INDEX;
+ case VERT_ATTRIB_EDGEFLAG:
+ return TGSI_ATTRIB_EDGEFLAG;
+ case VERT_ATTRIB_TEX0:
+ return TGSI_ATTRIB_TEX0;
+ case VERT_ATTRIB_TEX1:
+ return TGSI_ATTRIB_TEX1;
+ case VERT_ATTRIB_TEX2:
+ return TGSI_ATTRIB_TEX2;
+ case VERT_ATTRIB_TEX3:
+ return TGSI_ATTRIB_TEX3;
+ case VERT_ATTRIB_TEX4:
+ return TGSI_ATTRIB_TEX4;
+ case VERT_ATTRIB_TEX5:
+ return TGSI_ATTRIB_TEX5;
+ case VERT_ATTRIB_TEX6:
+ return TGSI_ATTRIB_TEX6;
+ case VERT_ATTRIB_TEX7:
+ return TGSI_ATTRIB_TEX7;
+ case VERT_ATTRIB_GENERIC0:
+ return TGSI_ATTRIB_VAR0;
+ case VERT_ATTRIB_GENERIC1:
+ return TGSI_ATTRIB_VAR1;
+ case VERT_ATTRIB_GENERIC2:
+ return TGSI_ATTRIB_VAR2;
+ case VERT_ATTRIB_GENERIC3:
+ return TGSI_ATTRIB_VAR3;
+ case VERT_ATTRIB_GENERIC4:
+ return TGSI_ATTRIB_VAR4;
+ case VERT_ATTRIB_GENERIC5:
+ return TGSI_ATTRIB_VAR5;
+ case VERT_ATTRIB_GENERIC6:
+ return TGSI_ATTRIB_VAR6;
+ case VERT_ATTRIB_GENERIC7:
+ return TGSI_ATTRIB_VAR7;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+
+/**
+ * Convert VERT_RESULT_x to TGSI_ATTRIB_y
+ */
+static GLuint
+translate_vertex_ouput(GLuint attrib)
+{
+ switch (attrib) {
+ case VERT_RESULT_HPOS:
+ return TGSI_ATTRIB_POS;
+ case VERT_RESULT_COL0:
+ return TGSI_ATTRIB_COLOR0;
+ case VERT_RESULT_COL1:
+ return TGSI_ATTRIB_COLOR1;
+ case VERT_RESULT_FOGC:
+ return TGSI_ATTRIB_FOG;
+ case VERT_RESULT_TEX0:
+ return TGSI_ATTRIB_TEX0;
+ case VERT_RESULT_TEX1:
+ return TGSI_ATTRIB_TEX1;
+ case VERT_RESULT_TEX2:
+ return TGSI_ATTRIB_TEX2;
+ case VERT_RESULT_TEX3:
+ return TGSI_ATTRIB_TEX3;
+ case VERT_RESULT_TEX4:
+ return TGSI_ATTRIB_TEX4;
+ case VERT_RESULT_TEX5:
+ return TGSI_ATTRIB_TEX5;
+ case VERT_RESULT_TEX6:
+ return TGSI_ATTRIB_TEX6;
+ case VERT_RESULT_TEX7:
+ return TGSI_ATTRIB_TEX7;
+ case VERT_RESULT_PSIZ:
+ return TGSI_ATTRIB_POINTSIZE;
+ case VERT_RESULT_BFC0:
+ return TGSI_ATTRIB_BFC0;
+ case VERT_RESULT_BFC1:
+ return TGSI_ATTRIB_BFC1;
+ case VERT_RESULT_VAR0:
+ return TGSI_ATTRIB_VAR0;
+ case VERT_RESULT_VAR0 + 1:
+ return TGSI_ATTRIB_VAR1;
+ case VERT_RESULT_VAR0 + 2:
+ return TGSI_ATTRIB_VAR2;
+ case VERT_RESULT_VAR0 + 3:
+ return TGSI_ATTRIB_VAR3;
+ case VERT_RESULT_VAR0 + 4:
+ return TGSI_ATTRIB_VAR4;
+ case VERT_RESULT_VAR0 + 5:
+ return TGSI_ATTRIB_VAR5;
+ case VERT_RESULT_VAR0 + 6:
+ return TGSI_ATTRIB_VAR6;
+ case VERT_RESULT_VAR0 + 7:
+ return TGSI_ATTRIB_VAR7;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+
+/**
+ * Convert a FRAG_ATTRIB_x to a TGSI_ATTRIB_y
+ */
+static GLuint
+translate_fragment_input(GLuint attrib)
+{
+ switch (attrib) {
+ case FRAG_ATTRIB_WPOS:
+ return TGSI_ATTRIB_POS;
+ case FRAG_ATTRIB_COL0:
+ return TGSI_ATTRIB_COLOR0;
+ case FRAG_ATTRIB_COL1:
+ return TGSI_ATTRIB_COLOR1;
+ case FRAG_ATTRIB_FOGC:
+ return TGSI_ATTRIB_FOG;
+ case FRAG_ATTRIB_TEX0:
+ return TGSI_ATTRIB_TEX0;
+ case FRAG_ATTRIB_TEX1:
+ return TGSI_ATTRIB_TEX1;
+ case FRAG_ATTRIB_TEX2:
+ return TGSI_ATTRIB_TEX2;
+ case FRAG_ATTRIB_TEX3:
+ return TGSI_ATTRIB_TEX3;
+ case FRAG_ATTRIB_TEX4:
+ return TGSI_ATTRIB_TEX4;
+ case FRAG_ATTRIB_TEX5:
+ return TGSI_ATTRIB_TEX5;
+ case FRAG_ATTRIB_TEX6:
+ return TGSI_ATTRIB_TEX6;
+ case FRAG_ATTRIB_TEX7:
+ return TGSI_ATTRIB_TEX7;
+ case FRAG_ATTRIB_VAR0:
+ return TGSI_ATTRIB_VAR0;
+ case FRAG_ATTRIB_VAR0 + 1:
+ return TGSI_ATTRIB_VAR1;
+ case FRAG_ATTRIB_VAR0 + 2:
+ return TGSI_ATTRIB_VAR2;
+ case FRAG_ATTRIB_VAR0 + 3:
+ return TGSI_ATTRIB_VAR3;
+ case FRAG_ATTRIB_VAR0 + 4:
+ return TGSI_ATTRIB_VAR4;
+ case FRAG_ATTRIB_VAR0 + 5:
+ return TGSI_ATTRIB_VAR5;
+ case FRAG_ATTRIB_VAR0 + 6:
+ return TGSI_ATTRIB_VAR6;
+ case FRAG_ATTRIB_VAR0 + 7:
+ return TGSI_ATTRIB_VAR7;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+
+/**
+ * Convert FRAG_RESULT_x to TGSI_ATTRIB_y
+ */
+static GLuint
+translate_fragment_output(GLuint attrib)
+{
+ switch (attrib) {
+ case FRAG_RESULT_DEPR:
+ return TGSI_ATTRIB_POS;
+ case FRAG_RESULT_COLR:
+ /* fall-through */
+ case FRAG_RESULT_COLH:
+ /* fall-through */
+ case FRAG_RESULT_DATA0:
+ return TGSI_ATTRIB_COLOR0;
+ case FRAG_RESULT_DATA0 + 1:
+ return TGSI_ATTRIB_COLOR0 + 1;
+ case FRAG_RESULT_DATA0 + 2:
+ return TGSI_ATTRIB_COLOR0 + 2;
+ case FRAG_RESULT_DATA0 + 3:
+ return TGSI_ATTRIB_COLOR0 + 3;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+
+
/*
* Map mesa register file to TGSI register file.
*/