vbo: move DLIST_DANGLING_REFS from mtypes.h to vbo_save_api.c
[mesa.git] / src / mesa / vbo / vbo_save_draw.c
index c1298f95a0ce35659a1c1de0f0f6d77a9643651b..a63e0674d898047510b7b85750651ef66564efc0 100644 (file)
@@ -183,10 +183,10 @@ bind_vertex_list(struct gl_context *ctx,
        * 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];
@@ -194,29 +194,30 @@ bind_vertex_list(struct gl_context *ctx,
       }
       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);
@@ -239,8 +240,11 @@ loopback_vertex_list(struct gl_context *ctx,
                                  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,