mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 06:40:08 +01:00
270 lines
8.9 KiB
C
270 lines
8.9 KiB
C
/*
|
|
* 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;
|
|
|
|
/**
|
|
* An index for each type of texture object. These correspond to the GL
|
|
* texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc.
|
|
* Note: the order is from highest priority to lowest priority.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TEXTURE_2D_ARRAY_INDEX,
|
|
TEXTURE_1D_ARRAY_INDEX,
|
|
TEXTURE_CUBE_INDEX,
|
|
TEXTURE_3D_INDEX,
|
|
TEXTURE_RECT_INDEX,
|
|
TEXTURE_2D_INDEX,
|
|
TEXTURE_1D_INDEX,
|
|
NUM_TEXTURE_TARGETS
|
|
} gl_texture_index;
|
|
|
|
#endif /* MTYPES_H */
|