ENUM(VERT_ATTRIB_COLOR1),
ENUM(VERT_ATTRIB_FOG),
ENUM(VERT_ATTRIB_COLOR_INDEX),
- ENUM(VERT_ATTRIB_EDGEFLAG),
ENUM(VERT_ATTRIB_TEX0),
ENUM(VERT_ATTRIB_TEX1),
ENUM(VERT_ATTRIB_TEX2),
ENUM(VERT_ATTRIB_GENERIC13),
ENUM(VERT_ATTRIB_GENERIC14),
ENUM(VERT_ATTRIB_GENERIC15),
+ ENUM(VERT_ATTRIB_EDGEFLAG),
};
STATIC_ASSERT(ARRAY_SIZE(names) == VERT_ATTRIB_MAX);
return NAME(attrib);
VERT_ATTRIB_COLOR1,
VERT_ATTRIB_FOG,
VERT_ATTRIB_COLOR_INDEX,
- VERT_ATTRIB_EDGEFLAG,
VERT_ATTRIB_TEX0,
VERT_ATTRIB_TEX1,
VERT_ATTRIB_TEX2,
VERT_ATTRIB_GENERIC13,
VERT_ATTRIB_GENERIC14,
VERT_ATTRIB_GENERIC15,
+ /* This must be last to keep VS inputs and vertex attributes in the same
+ * order in st/mesa, and st/mesa always adds edgeflags as the last input.
+ */
+ VERT_ATTRIB_EDGEFLAG,
VERT_ATTRIB_MAX
} gl_vert_attrib;
* Symbolic constats to help iterating over
* specific blocks of vertex attributes.
*
- * VERT_ATTRIB_FF
- * includes all fixed function attributes as well as
- * the aliased GL_NV_vertex_program shader attributes.
* VERT_ATTRIB_TEX
* include the classic texture coordinate attributes.
- * Is a subset of VERT_ATTRIB_FF.
* VERT_ATTRIB_GENERIC
* include the OpenGL 2.0+ GLSL generic shader attributes.
* These alias the generic GL_ARB_vertex_shader attributes.
* They are located at the end of the generic attribute
* block not to overlap with the generic 0 attribute.
*/
-#define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i))
-#define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0
-
#define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i))
#define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS
#define VERT_BIT_COLOR1 BITFIELD_BIT(VERT_ATTRIB_COLOR1)
#define VERT_BIT_FOG BITFIELD_BIT(VERT_ATTRIB_FOG)
#define VERT_BIT_COLOR_INDEX BITFIELD_BIT(VERT_ATTRIB_COLOR_INDEX)
-#define VERT_BIT_EDGEFLAG BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG)
#define VERT_BIT_TEX0 BITFIELD_BIT(VERT_ATTRIB_TEX0)
#define VERT_BIT_TEX1 BITFIELD_BIT(VERT_ATTRIB_TEX1)
#define VERT_BIT_TEX2 BITFIELD_BIT(VERT_ATTRIB_TEX2)
#define VERT_BIT_TEX7 BITFIELD_BIT(VERT_ATTRIB_TEX7)
#define VERT_BIT_POINT_SIZE BITFIELD_BIT(VERT_ATTRIB_POINT_SIZE)
#define VERT_BIT_GENERIC0 BITFIELD_BIT(VERT_ATTRIB_GENERIC0)
+#define VERT_BIT_EDGEFLAG BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG)
#define VERT_BIT(i) BITFIELD_BIT(i)
#define VERT_BIT_ALL BITFIELD_RANGE(0, VERT_ATTRIB_MAX)
-#define VERT_BIT_FF(i) VERT_BIT(i)
-#define VERT_BIT_FF_ALL BITFIELD_RANGE(0, VERT_ATTRIB_FF_MAX)
+#define VERT_BIT_FF_ALL (BITFIELD_RANGE(0, VERT_ATTRIB_GENERIC0) | \
+ VERT_BIT_EDGEFLAG)
#define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i))
#define VERT_BIT_TEX_ALL \
BITFIELD_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
VERT_ATTRIB_COLOR1, /* VERT_ATTRIB_COLOR1 */
VERT_ATTRIB_FOG, /* VERT_ATTRIB_FOG */
VERT_ATTRIB_COLOR_INDEX, /* VERT_ATTRIB_COLOR_INDEX */
- VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
VERT_ATTRIB_TEX0, /* VERT_ATTRIB_TEX0 */
VERT_ATTRIB_TEX1, /* VERT_ATTRIB_TEX1 */
VERT_ATTRIB_TEX2, /* VERT_ATTRIB_TEX2 */
VERT_ATTRIB_GENERIC12, /* VERT_ATTRIB_GENERIC12 */
VERT_ATTRIB_GENERIC13, /* VERT_ATTRIB_GENERIC13 */
VERT_ATTRIB_GENERIC14, /* VERT_ATTRIB_GENERIC14 */
- VERT_ATTRIB_GENERIC15 /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_GENERIC15, /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
},
/* ATTRIBUTE_MAP_MODE_POSITION
VERT_ATTRIB_COLOR1, /* VERT_ATTRIB_COLOR1 */
VERT_ATTRIB_FOG, /* VERT_ATTRIB_FOG */
VERT_ATTRIB_COLOR_INDEX, /* VERT_ATTRIB_COLOR_INDEX */
- VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
VERT_ATTRIB_TEX0, /* VERT_ATTRIB_TEX0 */
VERT_ATTRIB_TEX1, /* VERT_ATTRIB_TEX1 */
VERT_ATTRIB_TEX2, /* VERT_ATTRIB_TEX2 */
VERT_ATTRIB_GENERIC12, /* VERT_ATTRIB_GENERIC12 */
VERT_ATTRIB_GENERIC13, /* VERT_ATTRIB_GENERIC13 */
VERT_ATTRIB_GENERIC14, /* VERT_ATTRIB_GENERIC14 */
- VERT_ATTRIB_GENERIC15 /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_GENERIC15, /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
},
/* ATTRIBUTE_MAP_MODE_GENERIC0
VERT_ATTRIB_COLOR1, /* VERT_ATTRIB_COLOR1 */
VERT_ATTRIB_FOG, /* VERT_ATTRIB_FOG */
VERT_ATTRIB_COLOR_INDEX, /* VERT_ATTRIB_COLOR_INDEX */
- VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
VERT_ATTRIB_TEX0, /* VERT_ATTRIB_TEX0 */
VERT_ATTRIB_TEX1, /* VERT_ATTRIB_TEX1 */
VERT_ATTRIB_TEX2, /* VERT_ATTRIB_TEX2 */
VERT_ATTRIB_GENERIC12, /* VERT_ATTRIB_GENERIC12 */
VERT_ATTRIB_GENERIC13, /* VERT_ATTRIB_GENERIC13 */
VERT_ATTRIB_GENERIC14, /* VERT_ATTRIB_GENERIC14 */
- VERT_ATTRIB_GENERIC15 /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_GENERIC15, /* VERT_ATTRIB_GENERIC15 */
+ VERT_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
}
};
* FLOAT and INT.
*/
if (type == GL_FLOAT) {
- if (attr >= VERT_ATTRIB_GENERIC0) {
+ if (VERT_BIT(attr) & VERT_BIT_GENERIC_ALL) {
base_op = OPCODE_ATTR_1F_ARB;
attr -= VERT_ATTRIB_GENERIC0;
} else {
assert(ctx->API != API_OPENGLES);
/* Other parts of the code assume that inputs[VERT_ATTRIB_POS] through
- * inputs[VERT_ATTRIB_FF_MAX] will be non-NULL. However, in OpenGL
+ * inputs[VERT_ATTRIB_GENERIC0-1] will be non-NULL. However, in OpenGL
* ES 2.0+ or OpenGL core profile, none of these arrays should ever
* be enabled.
*/
"vertex.color.secondary",
"vertex.fogcoord",
"vertex.(six)", /* VERT_ATTRIB_COLOR_INDEX */
- "vertex.(seven)", /* VERT_ATTRIB_EDGEFLAG */
"vertex.texcoord[0]",
"vertex.texcoord[1]",
"vertex.texcoord[2]",
"vertex.texcoord[5]",
"vertex.texcoord[6]",
"vertex.texcoord[7]",
- "vertex.(sixteen)", /* VERT_ATTRIB_POINT_SIZE */
+ "vertex.(pointsize)", /* VERT_ATTRIB_POINT_SIZE */
"vertex.attrib[0]",
"vertex.attrib[1]",
"vertex.attrib[2]",
"vertex.attrib[12]",
"vertex.attrib[13]",
"vertex.attrib[14]",
- "vertex.attrib[15]" /* MAX_VARYING = 16 */
+ "vertex.attrib[15]", /* MAX_VARYING = 16 */
+ "vertex.(edgeflag)", /* VERT_ATTRIB_EDGEFLAG */
};
static const char *const fragAttribs[] = {
"fragment.position",
_TNL_ATTRIB_COLOR1,
_TNL_ATTRIB_FOG,
_TNL_ATTRIB_COLOR_INDEX,
- _TNL_ATTRIB_EDGEFLAG,
_TNL_ATTRIB_TEX0,
_TNL_ATTRIB_TEX1,
_TNL_ATTRIB_TEX2,
_TNL_ATTRIB_GENERIC13,
_TNL_ATTRIB_GENERIC14,
_TNL_ATTRIB_GENERIC15,
+ _TNL_ATTRIB_EDGEFLAG,
_TNL_ATTRIB_MAX,
VBO_ATTRIB_COLOR1,
VBO_ATTRIB_FOG,
VBO_ATTRIB_COLOR_INDEX,
- VBO_ATTRIB_EDGEFLAG,
VBO_ATTRIB_TEX0,
VBO_ATTRIB_TEX1,
VBO_ATTRIB_TEX2,
VBO_ATTRIB_GENERIC13,
VBO_ATTRIB_GENERIC14,
VBO_ATTRIB_GENERIC15,
+ VBO_ATTRIB_EDGEFLAG,
/* XXX: in the vertex program inputs_read flag, we alias
* materials and generics and use knowledge about the program
/** VBO_ATTRIB_POS .. VBO_ATTRIB_POINT_SIZE */
-#define VBO_ATTRIBS_LEGACY BITFIELD64_MASK(VBO_ATTRIB_GENERIC0)
+#define VBO_ATTRIBS_LEGACY (BITFIELD64_MASK(VBO_ATTRIB_GENERIC0) | \
+ BITFIELD64_BIT(VBO_ATTRIB_EDGEFLAG))
/** 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)
+/**
+ * Move material attribs to the last generic attribs, moving LAST_MATERIAL
+ * to GENERIC15, etc.
+ */
+#define VBO_MATERIAL_SHIFT (VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_GENERIC15)
init_legacy_currval(struct gl_context *ctx)
{
struct vbo_context *vbo = vbo_context(ctx);
- GLuint i;
/* Set up a constant (Stride == 0) array for each current
* attribute:
*/
- for (i = 0; i < VERT_ATTRIB_FF_MAX; i++) {
- const unsigned attr = VERT_ATTRIB_FF(i);
+ for (int attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
+ if (VERT_BIT(attr) & VERT_BIT_GENERIC_ALL)
+ continue;
+
struct gl_array_attributes *attrib = &vbo->current[attr];
init_array(ctx, attrib, check_size(ctx->Current.Attrib[attr]),
VBO_ATTRIB_COLOR1, /* VERT_ATTRIB_COLOR1 */
VBO_ATTRIB_FOG, /* VERT_ATTRIB_FOG */
VBO_ATTRIB_COLOR_INDEX, /* VERT_ATTRIB_COLOR_INDEX */
- VBO_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
VBO_ATTRIB_TEX0, /* VERT_ATTRIB_TEX0 */
VBO_ATTRIB_TEX1, /* VERT_ATTRIB_TEX1 */
VBO_ATTRIB_TEX2, /* VERT_ATTRIB_TEX2 */
VBO_ATTRIB_MAT_FRONT_SHININESS, /* VERT_ATTRIB_GENERIC12 */
VBO_ATTRIB_MAT_BACK_SHININESS, /* VERT_ATTRIB_GENERIC13 */
VBO_ATTRIB_MAT_FRONT_INDEXES, /* VERT_ATTRIB_GENERIC14 */
- VBO_ATTRIB_MAT_BACK_INDEXES /* VERT_ATTRIB_GENERIC15 */
+ VBO_ATTRIB_MAT_BACK_INDEXES, /* VERT_ATTRIB_GENERIC15 */
+ VBO_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
},
/* VP_MODE_SHADER: */
VBO_ATTRIB_COLOR1, /* VERT_ATTRIB_COLOR1 */
VBO_ATTRIB_FOG, /* VERT_ATTRIB_FOG */
VBO_ATTRIB_COLOR_INDEX, /* VERT_ATTRIB_COLOR_INDEX */
- VBO_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
VBO_ATTRIB_TEX0, /* VERT_ATTRIB_TEX0 */
VBO_ATTRIB_TEX1, /* VERT_ATTRIB_TEX1 */
VBO_ATTRIB_TEX2, /* VERT_ATTRIB_TEX2 */
VBO_ATTRIB_GENERIC12, /* VERT_ATTRIB_GENERIC12 */
VBO_ATTRIB_GENERIC13, /* VERT_ATTRIB_GENERIC13 */
VBO_ATTRIB_GENERIC14, /* VERT_ATTRIB_GENERIC14 */
- VBO_ATTRIB_GENERIC15 /* VERT_ATTRIB_GENERIC15 */
+ VBO_ATTRIB_GENERIC15, /* VERT_ATTRIB_GENERIC15 */
+ VBO_ATTRIB_EDGEFLAG, /* VERT_ATTRIB_EDGEFLAG */
}
};
struct vbo_save_context *save = &vbo_context(ctx)->save;
GLint i;
- for (i = VBO_ATTRIB_POS; i <= VBO_ATTRIB_GENERIC15; i++) {
+ for (i = VBO_ATTRIB_POS; i <= VBO_ATTRIB_EDGEFLAG; i++) {
const GLuint j = i - VBO_ATTRIB_POS;
assert(j < VERT_ATTRIB_MAX);
save->currentsz[i] = &ctx->ListState.ActiveAttribSize[j];