* In that case we effectively need to route the data from
* glVertexAttrib(0, val) calls to feed into the GENERIC0 input.
*/
- if ((ctx->VertexProgram._Current->info.inputs_read &
- VERT_BIT_POS) == 0 &&
- (ctx->VertexProgram._Current->info.inputs_read &
- VERT_BIT_GENERIC0)) {
+ const GLbitfield64 inputs_read =
+ ctx->VertexProgram._Current->info.inputs_read;
+ if ((inputs_read & VERT_BIT_POS) == 0 &&
+ (inputs_read & VERT_BIT_GENERIC0)) {
save->inputs[VERT_ATTRIB_GENERIC0] = save->inputs[0];
node_attrsz[VERT_ATTRIB_GENERIC0] = node_attrsz[0];
node_attrtype[VERT_ATTRIB_GENERIC0] = node_attrtype[0];
}
break;
default:
- assert(0);
+ unreachable("Bad vertex program mode");
}
for (attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
const GLuint src = map[attr];
if (node_attrsz[src]) {
+ struct gl_vertex_array *array = &arrays[attr];
+
/* override the default array set above */
- save->inputs[attr] = &arrays[attr];
-
- arrays[attr].Ptr = (const GLubyte *) NULL + buffer_offset;
- arrays[attr].Size = node_attrsz[src];
- arrays[attr].StrideB = node->vertex_size * sizeof(GLfloat);
- arrays[attr].Type = node_attrtype[src];
- arrays[attr].Integer =
- vbo_attrtype_to_integer_flag(node_attrtype[src]);
- arrays[attr].Format = GL_RGBA;
- arrays[attr]._ElementSize = arrays[attr].Size * sizeof(GLfloat);
+ save->inputs[attr] = array;
+
+ array->Ptr = (const GLubyte *) NULL + buffer_offset;
+ array->Size = node_attrsz[src];
+ array->StrideB = node->vertex_size * sizeof(GLfloat);
+ array->Type = node_attrtype[src];
+ array->Integer = vbo_attrtype_to_integer_flag(node_attrtype[src]);
+ array->Format = GL_RGBA;
+ array->_ElementSize = array->Size * sizeof(GLfloat);
_mesa_reference_buffer_object(ctx,
- &arrays[attr].BufferObj,
+ &array->BufferObj,
node->vertex_store->bufferobj);
- assert(arrays[attr].BufferObj->Name);
+ assert(array->BufferObj->Name);
buffer_offset += node_attrsz[src] * sizeof(GLfloat);
varying_inputs |= VERT_BIT(attr);
list->vertex_store->bufferobj,
MAP_INTERNAL);
+ unsigned buffer_offset =
+ aligned_vertex_buffer_offset(list) ? 0 : list->buffer_offset;
+
vbo_loopback_vertex_list(ctx,
- (const GLfloat *)(buffer + list->buffer_offset),
+ (const GLfloat *) (buffer + buffer_offset),
list->attrsz,
list->prims,
list->prim_count,