From 074f07176a3c916573d9e2b4cb20316591c1e99e Mon Sep 17 00:00:00 2001 From: Brian Date: Thu, 23 Aug 2007 14:58:26 -0600 Subject: [PATCH] define new TGSI_ATTRIB_ tokens for program inputs/outputs, plus translation functions --- src/mesa/pipe/tgsi/core/tgsi_token.h | 42 +++++ src/mesa/pipe/tgsi/mesa/mesa_to_tgsi.c | 207 +++++++++++++++++++++++++ 2 files changed, 249 insertions(+) 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. */ -- 2.30.2