1848b8605Smrg/*
2848b8605Smrg Copyright (C) Intel Corp.  2006.  All Rights Reserved.
3848b8605Smrg Intel funded Tungsten Graphics to
4848b8605Smrg develop this 3D driver.
5848b8605Smrg
6848b8605Smrg Permission is hereby granted, free of charge, to any person obtaining
7848b8605Smrg a copy of this software and associated documentation files (the
8848b8605Smrg "Software"), to deal in the Software without restriction, including
9848b8605Smrg without limitation the rights to use, copy, modify, merge, publish,
10848b8605Smrg distribute, sublicense, and/or sell copies of the Software, and to
11848b8605Smrg permit persons to whom the Software is furnished to do so, subject to
12848b8605Smrg the following conditions:
13848b8605Smrg
14848b8605Smrg The above copyright notice and this permission notice (including the
15848b8605Smrg next paragraph) shall be included in all copies or substantial
16848b8605Smrg portions of the Software.
17848b8605Smrg
18848b8605Smrg THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19848b8605Smrg EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20848b8605Smrg MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21848b8605Smrg IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22848b8605Smrg LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23848b8605Smrg OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24848b8605Smrg WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25848b8605Smrg
26848b8605Smrg **********************************************************************/
27848b8605Smrg /*
28848b8605Smrg  * Authors:
29848b8605Smrg  *   Keith Whitwell <keithw@vmware.com>
30848b8605Smrg  */
31848b8605Smrg
32848b8605Smrg#ifndef VBO_ATTRIB_H
33848b8605Smrg#define VBO_ATTRIB_H
34848b8605Smrg
35848b8605Smrg/*
36b8e80941Smrg * Note: The first 32 attributes match the VERT_ATTRIB_* definitions.
37b8e80941Smrg * However, we have extra attributes for storing per-vertex glMaterial
38b8e80941Smrg * values.  The material attributes get shifted into the generic positions
39b8e80941Smrg * at draw time.
40b8e80941Smrg *
41b8e80941Smrg * One reason we can't alias materials and generics here is display lists.
42b8e80941Smrg * A display list might contain both generic attributes and material
43b8e80941Smrg * attributes which are selected at draw time depending on whether we're
44b8e80941Smrg * using fixed function or a shader.  <sigh>
45848b8605Smrg */
46b8e80941Smrgenum vbo_attrib {
47b8e80941Smrg   VBO_ATTRIB_POS,
48b8e80941Smrg   VBO_ATTRIB_NORMAL,
49b8e80941Smrg   VBO_ATTRIB_COLOR0,
50b8e80941Smrg   VBO_ATTRIB_COLOR1,
51b8e80941Smrg   VBO_ATTRIB_FOG,
52b8e80941Smrg   VBO_ATTRIB_COLOR_INDEX,
53b8e80941Smrg   VBO_ATTRIB_EDGEFLAG,
54b8e80941Smrg   VBO_ATTRIB_TEX0,
55b8e80941Smrg   VBO_ATTRIB_TEX1,
56b8e80941Smrg   VBO_ATTRIB_TEX2,
57b8e80941Smrg   VBO_ATTRIB_TEX3,
58b8e80941Smrg   VBO_ATTRIB_TEX4,
59b8e80941Smrg   VBO_ATTRIB_TEX5,
60b8e80941Smrg   VBO_ATTRIB_TEX6,
61b8e80941Smrg   VBO_ATTRIB_TEX7,
62b8e80941Smrg   VBO_ATTRIB_POINT_SIZE,
63848b8605Smrg
64b8e80941Smrg   VBO_ATTRIB_GENERIC0, /* Not used? */
65b8e80941Smrg   VBO_ATTRIB_GENERIC1,
66b8e80941Smrg   VBO_ATTRIB_GENERIC2,
67b8e80941Smrg   VBO_ATTRIB_GENERIC3,
68b8e80941Smrg   VBO_ATTRIB_GENERIC4,
69b8e80941Smrg   VBO_ATTRIB_GENERIC5,
70b8e80941Smrg   VBO_ATTRIB_GENERIC6,
71b8e80941Smrg   VBO_ATTRIB_GENERIC7,
72b8e80941Smrg   VBO_ATTRIB_GENERIC8,
73b8e80941Smrg   VBO_ATTRIB_GENERIC9,
74b8e80941Smrg   VBO_ATTRIB_GENERIC10,
75b8e80941Smrg   VBO_ATTRIB_GENERIC11,
76b8e80941Smrg   VBO_ATTRIB_GENERIC12,
77b8e80941Smrg   VBO_ATTRIB_GENERIC13,
78b8e80941Smrg   VBO_ATTRIB_GENERIC14,
79b8e80941Smrg   VBO_ATTRIB_GENERIC15,
80848b8605Smrg
81b8e80941Smrg   /* XXX: in the vertex program inputs_read flag, we alias
82b8e80941Smrg    * materials and generics and use knowledge about the program
83b8e80941Smrg    * (whether it is a fixed-function emulation) to
84b8e80941Smrg    * differentiate.  Here we must keep them apart instead.
85b8e80941Smrg    */
86b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_AMBIENT,
87b8e80941Smrg   VBO_ATTRIB_MAT_BACK_AMBIENT,
88b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_DIFFUSE,
89b8e80941Smrg   VBO_ATTRIB_MAT_BACK_DIFFUSE,
90b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_SPECULAR,
91b8e80941Smrg   VBO_ATTRIB_MAT_BACK_SPECULAR,
92b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_EMISSION,
93b8e80941Smrg   VBO_ATTRIB_MAT_BACK_EMISSION,
94b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_SHININESS,
95b8e80941Smrg   VBO_ATTRIB_MAT_BACK_SHININESS,
96b8e80941Smrg   VBO_ATTRIB_MAT_FRONT_INDEXES,
97b8e80941Smrg   VBO_ATTRIB_MAT_BACK_INDEXES,
98848b8605Smrg
99b8e80941Smrg   VBO_ATTRIB_MAX
100848b8605Smrg};
101848b8605Smrg
102848b8605Smrg#define VBO_ATTRIB_FIRST_MATERIAL VBO_ATTRIB_MAT_FRONT_AMBIENT
103848b8605Smrg#define VBO_ATTRIB_LAST_MATERIAL VBO_ATTRIB_MAT_BACK_INDEXES
104848b8605Smrg
105b8e80941Smrg
106b8e80941Smrg/** VBO_ATTRIB_POS .. VBO_ATTRIB_POINT_SIZE */
107b8e80941Smrg#define VBO_ATTRIBS_LEGACY  BITFIELD64_MASK(VBO_ATTRIB_GENERIC0)
108b8e80941Smrg
109b8e80941Smrg/** VBO_ATTRIB_MAT_FRONT_AMBIENT .. VBO_ATTRIB_MAT_BACK_INDEXES */
110b8e80941Smrg#define VBO_ATTRIBS_MATERIALS BITFIELD64_RANGE(VBO_ATTRIB_MAT_FRONT_AMBIENT, \
111b8e80941Smrg                     VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_FIRST_MATERIAL + 1)
112b8e80941Smrg
113b8e80941Smrg/** Shift to move legacy material attribs into generic slots */
114b8e80941Smrg#define VBO_MATERIAL_SHIFT \
115b8e80941Smrg   (VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_FIRST_MATERIAL + 1)
116b8e80941Smrg
117b8e80941Smrg
118b8e80941Smrg
119848b8605Smrg#define VBO_MAX_COPIED_VERTS 3
120848b8605Smrg
121848b8605Smrg#endif
122