diff options
author | Brian <[email protected]> | 2007-08-23 14:58:26 -0600 |
---|---|---|
committer | Brian <[email protected]> | 2007-08-23 14:58:26 -0600 |
commit | 074f07176a3c916573d9e2b4cb20316591c1e99e (patch) | |
tree | e43304bb37456da344edf6cf011bfe71190fec4a /src/mesa/pipe | |
parent | ba50b6958ab69e5e3ee190126bb08aad6118c607 (diff) |
define new TGSI_ATTRIB_ tokens for program inputs/outputs, plus translation functions
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r-- | src/mesa/pipe/tgsi/core/tgsi_token.h | 42 | ||||
-rw-r--r-- | src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c | 207 |
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 3e66d55b7da..a12a2d73705 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 eeaed844d5e..dfb263ebdc3 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.
*/
|