--- src/gallium/auxiliary/util/u_semantics.h | 123 ++++++++++++++++++++++++++++++ 1 files changed, 123 insertions(+), 0 deletions(-) create mode 100644 src/gallium/auxiliary/util/u_semantics.h
diff --git a/src/gallium/auxiliary/util/u_semantics.h b/src/gallium/auxiliary/util/u_semantics.h new file mode 100644 index 0000000..d620619 --- /dev/null +++ b/src/gallium/auxiliary/util/u_semantics.h @@ -0,0 +1,123 @@ +#ifndef U_SEMANTICS_H_ +#define U_SEMANTICS_H_ + +#include "pipe/p_compiler.h" +#include "pipe/p_shader_tokens.h" + +/* same as SM3 values */ +#define TGSI_SEMANTIC_BYTE_POSITION 0 +#define TGSI_SEMANTIC_BYTE_PSIZE (4 << 4) +#define TGSI_SEMANTIC_BYTE_COLOR0 (10 << 4) +#define TGSI_SEMANTIC_BYTE_COLOR1 (TGSI_SEMANTIC_BYTE_COLOR0 + 1) +#define TGSI_SEMANTIC_BYTE_FOG (11 << 4) +#define TGSI_SEMANTIC_BYTE_BCOLOR0 (14 << 4) +#define TGSI_SEMANTIC_BYTE_BCOLOR1 (TGSI_SEMANTIC_BYTE_BCOLOR0 + 1) +#define TGSI_SEMANTIC_BYTE_TGSI (15 << 4) + +static INLINE unsigned char +pipe_semantic_to_byte(unsigned name, unsigned index) +{ + switch (name) + { + case TGSI_SEMANTIC_POSITION: + return TGSI_SEMANTIC_BYTE_POSITION; + case TGSI_SEMANTIC_PSIZE: + return TGSI_SEMANTIC_BYTE_PSIZE; + case TGSI_SEMANTIC_FOG: + return TGSI_SEMANTIC_BYTE_FOG; + case TGSI_SEMANTIC_COLOR: + return TGSI_SEMANTIC_BYTE_COLOR0 + index; + case TGSI_SEMANTIC_GENERIC: + ++index; + if(index >= TGSI_SEMANTIC_BYTE_PSIZE) + { + ++index; + if(index >= TGSI_SEMANTIC_BYTE_COLOR0) + { + index += 2; + if(index >= TGSI_SEMANTIC_BYTE_FOG) + ++index; + } + } + return index; + case TGSI_SEMANTIC_BCOLOR: + return TGSI_SEMANTIC_BYTE_BCOLOR0 + index; + default: + return TGSI_SEMANTIC_BYTE_TGSI + name; + } +} + +/* this fits BCOLOR in the SM3 range, but is not reversible */ +static INLINE unsigned char +pipe_semantic_to_byte_sm3(unsigned name, unsigned index) +{ + if(name == TGSI_SEMANTIC_BCOLOR) + return TGSI_SEMANTIC_BYTE_BCOLOR0 - 1 - index; + return pipe_semantic_to_byte(name, index); +} + +static INLINE unsigned +pipe_semantic_name_from_byte(unsigned char value) +{ + switch (value) + { + case TGSI_SEMANTIC_BYTE_POSITION: + return TGSI_SEMANTIC_POSITION; + case TGSI_SEMANTIC_BYTE_PSIZE: + return TGSI_SEMANTIC_PSIZE; + case TGSI_SEMANTIC_BYTE_FOG: + return TGSI_SEMANTIC_FOG; + case TGSI_SEMANTIC_BYTE_COLOR0: + case TGSI_SEMANTIC_BYTE_COLOR1: + return TGSI_SEMANTIC_COLOR; + case TGSI_SEMANTIC_BYTE_BCOLOR0: + case TGSI_SEMANTIC_BYTE_BCOLOR1: + return TGSI_SEMANTIC_BCOLOR; + default: + if(value < TGSI_SEMANTIC_BYTE_TGSI) + return TGSI_SEMANTIC_GENERIC; + else + return value - TGSI_SEMANTIC_BYTE_TGSI; + } +} + +static INLINE unsigned +pipe_semantic_index_from_byte(unsigned char value) +{ + if(value == TGSI_SEMANTIC_BYTE_POSITION) + return 0; + + if(value <= TGSI_SEMANTIC_BYTE_PSIZE) + { + if(value < TGSI_SEMANTIC_BYTE_PSIZE) + return value - 1; + else + return 0; + } + + if(value < (TGSI_SEMANTIC_BYTE_COLOR0 + 2)) + { + if(value < TGSI_SEMANTIC_BYTE_COLOR0) + return value - 2; + else + return value - TGSI_SEMANTIC_BYTE_COLOR0; + } + + if(value <= TGSI_SEMANTIC_BYTE_FOG) + { + if(value < TGSI_SEMANTIC_BYTE_FOG) + return value - 4; + else + return 0; + } + + if(value < TGSI_SEMANTIC_BYTE_BCOLOR0) + return value - 5; + + if(value == (TGSI_SEMANTIC_BYTE_BCOLOR1)) + return 1; + + return 0; +} + +#endif /* U_SEMANTICS_H_ */ -- 1.7.0.1.147.g6d84b ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev