/*
Copyright (C) Intel Corp. 2006. All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
+ Intel funded Tungsten Graphics to
develop this 3D driver.
Permission is hereby granted, free of charge, to any person obtaining
**********************************************************************/
/*
* Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
+ * Keith Whitwell <keithw@vmware.com>
*/
#ifndef VBO_ATTRIB_H
#define VBO_ATTRIB_H
-
/*
- * Note: The first attributes match the VERT_ATTRIB_* definitions
- * in mtypes.h. However, the tnl module has additional attributes
- * for materials, color indexes, edge flags, etc.
- */
-/* Although it's nice to use these as bit indexes in a DWORD flag, we
- * could manage without if necessary. Another limit currently is the
- * number of bits allocated for these numbers in places like vertex
- * program instruction formats and register layouts.
+ * Note: The first 32 attributes match the VERT_ATTRIB_* definitions.
+ * However, we have extra attributes for storing per-vertex glMaterial
+ * values. The material attributes get shifted into the generic positions
+ * at draw time.
+ *
+ * One reason we can't alias materials and generics here is display lists.
+ * A display list might contain both generic attributes and material
+ * attributes which are selected at draw time depending on whether we're
+ * using fixed function or a shader. <sigh>
*/
-enum {
- VBO_ATTRIB_POS = 0,
- VBO_ATTRIB_WEIGHT = 1,
- VBO_ATTRIB_NORMAL = 2,
- VBO_ATTRIB_COLOR0 = 3,
- VBO_ATTRIB_COLOR1 = 4,
- VBO_ATTRIB_FOG = 5,
- VBO_ATTRIB_INDEX = 6,
- VBO_ATTRIB_EDGEFLAG = 7,
- VBO_ATTRIB_TEX0 = 8,
- VBO_ATTRIB_TEX1 = 9,
- VBO_ATTRIB_TEX2 = 10,
- VBO_ATTRIB_TEX3 = 11,
- VBO_ATTRIB_TEX4 = 12,
- VBO_ATTRIB_TEX5 = 13,
- VBO_ATTRIB_TEX6 = 14,
- VBO_ATTRIB_TEX7 = 15,
+enum vbo_attrib {
+ VBO_ATTRIB_POS,
+ VBO_ATTRIB_NORMAL,
+ VBO_ATTRIB_COLOR0,
+ VBO_ATTRIB_COLOR1,
+ VBO_ATTRIB_FOG,
+ VBO_ATTRIB_COLOR_INDEX,
+ VBO_ATTRIB_EDGEFLAG,
+ VBO_ATTRIB_TEX0,
+ VBO_ATTRIB_TEX1,
+ VBO_ATTRIB_TEX2,
+ VBO_ATTRIB_TEX3,
+ VBO_ATTRIB_TEX4,
+ VBO_ATTRIB_TEX5,
+ VBO_ATTRIB_TEX6,
+ VBO_ATTRIB_TEX7,
+ VBO_ATTRIB_POINT_SIZE,
- VBO_ATTRIB_GENERIC0 = 16, /* Not used? */
- VBO_ATTRIB_GENERIC1 = 17,
- VBO_ATTRIB_GENERIC2 = 18,
- VBO_ATTRIB_GENERIC3 = 19,
- VBO_ATTRIB_GENERIC4 = 20,
- VBO_ATTRIB_GENERIC5 = 21,
- VBO_ATTRIB_GENERIC6 = 22,
- VBO_ATTRIB_GENERIC7 = 23,
- VBO_ATTRIB_GENERIC8 = 24,
- VBO_ATTRIB_GENERIC9 = 25,
- VBO_ATTRIB_GENERIC10 = 26,
- VBO_ATTRIB_GENERIC11 = 27,
- VBO_ATTRIB_GENERIC12 = 28,
- VBO_ATTRIB_GENERIC13 = 29,
- VBO_ATTRIB_GENERIC14 = 30,
- VBO_ATTRIB_GENERIC15 = 31,
+ VBO_ATTRIB_GENERIC0, /* Not used? */
+ VBO_ATTRIB_GENERIC1,
+ VBO_ATTRIB_GENERIC2,
+ VBO_ATTRIB_GENERIC3,
+ VBO_ATTRIB_GENERIC4,
+ VBO_ATTRIB_GENERIC5,
+ VBO_ATTRIB_GENERIC6,
+ VBO_ATTRIB_GENERIC7,
+ VBO_ATTRIB_GENERIC8,
+ VBO_ATTRIB_GENERIC9,
+ VBO_ATTRIB_GENERIC10,
+ VBO_ATTRIB_GENERIC11,
+ VBO_ATTRIB_GENERIC12,
+ VBO_ATTRIB_GENERIC13,
+ VBO_ATTRIB_GENERIC14,
+ VBO_ATTRIB_GENERIC15,
- /* XXX: in the vertex program InputsRead flag, we alias
- * materials and generics and use knowledge about the program
- * (whether it is a fixed-function emulation) to
- * differentiate. Here we must keep them apart instead.
- */
- VBO_ATTRIB_MAT_FRONT_AMBIENT = 32,
- VBO_ATTRIB_MAT_BACK_AMBIENT = 33,
- VBO_ATTRIB_MAT_FRONT_DIFFUSE = 34,
- VBO_ATTRIB_MAT_BACK_DIFFUSE = 35,
- VBO_ATTRIB_MAT_FRONT_SPECULAR = 36,
- VBO_ATTRIB_MAT_BACK_SPECULAR = 37,
- VBO_ATTRIB_MAT_FRONT_EMISSION = 38,
- VBO_ATTRIB_MAT_BACK_EMISSION = 39,
- VBO_ATTRIB_MAT_FRONT_SHININESS = 40,
- VBO_ATTRIB_MAT_BACK_SHININESS = 41,
- VBO_ATTRIB_MAT_FRONT_INDEXES = 42,
- VBO_ATTRIB_MAT_BACK_INDEXES = 43,
+ /* XXX: in the vertex program inputs_read flag, we alias
+ * materials and generics and use knowledge about the program
+ * (whether it is a fixed-function emulation) to
+ * differentiate. Here we must keep them apart instead.
+ */
+ VBO_ATTRIB_MAT_FRONT_AMBIENT,
+ VBO_ATTRIB_MAT_BACK_AMBIENT,
+ VBO_ATTRIB_MAT_FRONT_DIFFUSE,
+ VBO_ATTRIB_MAT_BACK_DIFFUSE,
+ VBO_ATTRIB_MAT_FRONT_SPECULAR,
+ VBO_ATTRIB_MAT_BACK_SPECULAR,
+ VBO_ATTRIB_MAT_FRONT_EMISSION,
+ VBO_ATTRIB_MAT_BACK_EMISSION,
+ VBO_ATTRIB_MAT_FRONT_SHININESS,
+ VBO_ATTRIB_MAT_BACK_SHININESS,
+ VBO_ATTRIB_MAT_FRONT_INDEXES,
+ VBO_ATTRIB_MAT_BACK_INDEXES,
- VBO_ATTRIB_MAX = 44
+ VBO_ATTRIB_MAX
};
#define VBO_ATTRIB_FIRST_MATERIAL VBO_ATTRIB_MAT_FRONT_AMBIENT
+#define VBO_ATTRIB_LAST_MATERIAL VBO_ATTRIB_MAT_BACK_INDEXES
-#define VBO_MAX_COPIED_VERTS 3
-struct _mesa_prim {
- GLuint mode:8;
- GLuint indexed:1;
- GLuint begin:1;
- GLuint end:1;
- GLuint weak:1;
- GLuint pad:20;
+/** VBO_ATTRIB_POS .. VBO_ATTRIB_POINT_SIZE */
+#define VBO_ATTRIBS_LEGACY BITFIELD64_MASK(VBO_ATTRIB_GENERIC0)
+
+/** VBO_ATTRIB_MAT_FRONT_AMBIENT .. VBO_ATTRIB_MAT_BACK_INDEXES */
+#define VBO_ATTRIBS_MATERIALS BITFIELD64_RANGE(VBO_ATTRIB_MAT_FRONT_AMBIENT, \
+ VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_FIRST_MATERIAL + 1)
+
+/** Shift to move legacy material attribs into generic slots */
+#define VBO_MATERIAL_SHIFT \
+ (VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_FIRST_MATERIAL + 1)
- GLuint start;
- GLuint count;
-};
-/* Would like to call this a "vbo_index_buffer", but this would be
- * confusing as the indices are not neccessarily yet in a non-null
- * buffer object.
- */
-struct _mesa_index_buffer {
- GLuint count;
- GLenum type;
- struct gl_buffer_object *obj;
- const void *ptr;
- GLuint rebase;
-};
+#define VBO_MAX_COPIED_VERTS 31
#endif