123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /*
- * Mesa 3-D graphics library
- * Version: 7.7
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
- /**
- * \file mtypes.h
- * Main Mesa data structures.
- *
- * Please try to mark derived values with a leading underscore ('_').
- */
-
- #ifndef MTYPES_H
- #define MTYPES_H
-
- #define MAX_DRAW_BUFFERS 8
- #define MAX_VARYING 16
-
- #include <GL/gl.h>
-
- /**
- * Indexes for vertex program attributes.
- * GL_NV_vertex_program aliases generic attributes over the conventional
- * attributes. In GL_ARB_vertex_program shader the aliasing is optional.
- * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the
- * generic attributes are distinct/separate).
- */
- typedef enum
- {
- VERT_ATTRIB_POS = 0,
- VERT_ATTRIB_WEIGHT = 1,
- VERT_ATTRIB_NORMAL = 2,
- VERT_ATTRIB_COLOR0 = 3,
- VERT_ATTRIB_COLOR1 = 4,
- VERT_ATTRIB_FOG = 5,
- VERT_ATTRIB_COLOR_INDEX = 6,
- VERT_ATTRIB_POINT_SIZE = 6, /*alias*/
- VERT_ATTRIB_EDGEFLAG = 7,
- VERT_ATTRIB_TEX0 = 8,
- VERT_ATTRIB_TEX1 = 9,
- VERT_ATTRIB_TEX2 = 10,
- VERT_ATTRIB_TEX3 = 11,
- VERT_ATTRIB_TEX4 = 12,
- VERT_ATTRIB_TEX5 = 13,
- VERT_ATTRIB_TEX6 = 14,
- VERT_ATTRIB_TEX7 = 15,
- VERT_ATTRIB_GENERIC0 = 16,
- VERT_ATTRIB_GENERIC1 = 17,
- VERT_ATTRIB_GENERIC2 = 18,
- VERT_ATTRIB_GENERIC3 = 19,
- VERT_ATTRIB_GENERIC4 = 20,
- VERT_ATTRIB_GENERIC5 = 21,
- VERT_ATTRIB_GENERIC6 = 22,
- VERT_ATTRIB_GENERIC7 = 23,
- VERT_ATTRIB_GENERIC8 = 24,
- VERT_ATTRIB_GENERIC9 = 25,
- VERT_ATTRIB_GENERIC10 = 26,
- VERT_ATTRIB_GENERIC11 = 27,
- VERT_ATTRIB_GENERIC12 = 28,
- VERT_ATTRIB_GENERIC13 = 29,
- VERT_ATTRIB_GENERIC14 = 30,
- VERT_ATTRIB_GENERIC15 = 31,
- VERT_ATTRIB_MAX = 32
- } gl_vert_attrib;
-
- /**
- * Bitflags for vertex attributes.
- * These are used in bitfields in many places.
- */
- /*@{*/
- #define VERT_BIT_POS (1 << VERT_ATTRIB_POS)
- #define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT)
- #define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL)
- #define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0)
- #define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1)
- #define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG)
- #define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX)
- #define VERT_BIT_EDGEFLAG (1 << VERT_ATTRIB_EDGEFLAG)
- #define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0)
- #define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1)
- #define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2)
- #define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3)
- #define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4)
- #define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5)
- #define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6)
- #define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7)
- #define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0)
- #define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1)
- #define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2)
- #define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3)
- #define VERT_BIT_GENERIC4 (1 << VERT_ATTRIB_GENERIC4)
- #define VERT_BIT_GENERIC5 (1 << VERT_ATTRIB_GENERIC5)
- #define VERT_BIT_GENERIC6 (1 << VERT_ATTRIB_GENERIC6)
- #define VERT_BIT_GENERIC7 (1 << VERT_ATTRIB_GENERIC7)
- #define VERT_BIT_GENERIC8 (1 << VERT_ATTRIB_GENERIC8)
- #define VERT_BIT_GENERIC9 (1 << VERT_ATTRIB_GENERIC9)
- #define VERT_BIT_GENERIC10 (1 << VERT_ATTRIB_GENERIC10)
- #define VERT_BIT_GENERIC11 (1 << VERT_ATTRIB_GENERIC11)
- #define VERT_BIT_GENERIC12 (1 << VERT_ATTRIB_GENERIC12)
- #define VERT_BIT_GENERIC13 (1 << VERT_ATTRIB_GENERIC13)
- #define VERT_BIT_GENERIC14 (1 << VERT_ATTRIB_GENERIC14)
- #define VERT_BIT_GENERIC15 (1 << VERT_ATTRIB_GENERIC15)
-
- #define VERT_BIT_TEX(u) (1 << (VERT_ATTRIB_TEX0 + (u)))
- #define VERT_BIT_GENERIC(g) (1 << (VERT_ATTRIB_GENERIC0 + (g)))
- /*@}*/
-
-
- /**
- * Indexes for vertex program result attributes
- */
- typedef enum
- {
- VERT_RESULT_HPOS = 0,
- VERT_RESULT_COL0 = 1,
- VERT_RESULT_COL1 = 2,
- VERT_RESULT_FOGC = 3,
- VERT_RESULT_TEX0 = 4,
- VERT_RESULT_TEX1 = 5,
- VERT_RESULT_TEX2 = 6,
- VERT_RESULT_TEX3 = 7,
- VERT_RESULT_TEX4 = 8,
- VERT_RESULT_TEX5 = 9,
- VERT_RESULT_TEX6 = 10,
- VERT_RESULT_TEX7 = 11,
- VERT_RESULT_PSIZ = 12,
- VERT_RESULT_BFC0 = 13,
- VERT_RESULT_BFC1 = 14,
- VERT_RESULT_EDGE = 15,
- VERT_RESULT_VAR0 = 16, /**< shader varying */
- VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING)
- } gl_vert_result;
-
-
- /**
- * Indexes for fragment program input attributes.
- */
- typedef enum
- {
- FRAG_ATTRIB_WPOS = 0,
- FRAG_ATTRIB_COL0 = 1,
- FRAG_ATTRIB_COL1 = 2,
- FRAG_ATTRIB_FOGC = 3,
- FRAG_ATTRIB_TEX0 = 4,
- FRAG_ATTRIB_TEX1 = 5,
- FRAG_ATTRIB_TEX2 = 6,
- FRAG_ATTRIB_TEX3 = 7,
- FRAG_ATTRIB_TEX4 = 8,
- FRAG_ATTRIB_TEX5 = 9,
- FRAG_ATTRIB_TEX6 = 10,
- FRAG_ATTRIB_TEX7 = 11,
- FRAG_ATTRIB_FACE = 12, /**< front/back face */
- FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */
- FRAG_ATTRIB_VAR0 = 14, /**< shader varying */
- FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING)
- } gl_frag_attrib;
-
- /**
- * Bitflags for fragment program input attributes.
- */
- /*@{*/
- #define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS)
- #define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0)
- #define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1)
- #define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC)
- #define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE)
- #define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC)
- #define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0)
- #define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1)
- #define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2)
- #define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3)
- #define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4)
- #define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5)
- #define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6)
- #define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7)
- #define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0)
-
- #define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U))
- #define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V))
-
- #define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \
- FRAG_BIT_TEX1| \
- FRAG_BIT_TEX2| \
- FRAG_BIT_TEX3| \
- FRAG_BIT_TEX4| \
- FRAG_BIT_TEX5| \
- FRAG_BIT_TEX6| \
- FRAG_BIT_TEX7)
- /*@}*/
-
-
- /**
- * Fragment program results
- */
- typedef enum
- {
- FRAG_RESULT_DEPTH = 0,
- FRAG_RESULT_COLOR = 1,
- FRAG_RESULT_DATA0 = 2,
- FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)
- } gl_frag_result;
-
- /**
- * Names of the various vertex/fragment program register files, etc.
- *
- * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c)
- * All values should fit in a 4-bit field.
- *
- * NOTE: PROGRAM_ENV_PARAM, PROGRAM_STATE_VAR, PROGRAM_NAMED_PARAM,
- * PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be considered to
- * be "uniform" variables since they can only be set outside glBegin/End.
- * They're also all stored in the same Parameters array.
- */
- typedef enum
- {
- PROGRAM_TEMPORARY, /**< machine->Temporary[] */
- PROGRAM_INPUT, /**< machine->Inputs[] */
- PROGRAM_OUTPUT, /**< machine->Outputs[] */
- PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */
- PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */
- PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */
- PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */
- PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */
- PROGRAM_CONSTANT, /**< gl_program->Parameters[] */
- PROGRAM_UNIFORM, /**< gl_program->Parameters[] */
- PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */
- PROGRAM_ADDRESS, /**< machine->AddressReg */
- PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */
- PROGRAM_UNDEFINED, /**< Invalid/TBD value */
- PROGRAM_FILE_MAX
- } gl_register_file;
-
- #endif
|