* Keith Whitwell <keithw@vmware.com>
*/
-#include "main/mtypes.h"
+#include "main/errors.h"
#include "main/bufferobj.h"
#include "math/m_eval.h"
#include "main/vtxfmt.h"
{
memset(attrib, 0, sizeof(*attrib));
- attrib->Size = size;
- attrib->Type = GL_FLOAT;
- attrib->Format = GL_RGBA;
+ vbo_set_vertex_format(&attrib->Format, size, GL_FLOAT);
attrib->Stride = 0;
- attrib->_ElementSize = size * sizeof(GLfloat);
attrib->Ptr = pointer;
}
struct vbo_context *vbo = vbo_context(ctx);
struct vbo_exec_context *exec = &vbo->exec;
- if (ctx->NewState & (_NEW_PROGRAM | _NEW_ARRAY)) {
+ if (ctx->NewState & _NEW_ARRAY) {
_ae_invalidate_state(ctx);
}
if (ctx->NewState & _NEW_EVAL)
vbo->VAO = _mesa_new_vao(ctx, ~((GLuint)0));
/* The exec VAO assumes to have all arributes bound to binding 0 */
for (unsigned i = 0; i < VERT_ATTRIB_MAX; ++i)
- _mesa_vertex_attrib_binding(ctx, vbo->VAO, i, 0, false);
+ _mesa_vertex_attrib_binding(ctx, vbo->VAO, i, 0);
_math_init_eval();
}
-void
-_vbo_draw_indirect(struct gl_context *ctx, GLuint mode,
- struct gl_buffer_object *indirect_data,
- GLsizeiptr indirect_offset, unsigned draw_count,
- unsigned stride,
- struct gl_buffer_object *indirect_draw_count_buffer,
- GLsizeiptr indirect_draw_count_offset,
- const struct _mesa_index_buffer *ib)
+const struct gl_array_attributes *
+_vbo_current_attrib(const struct gl_context *ctx, gl_vert_attrib attr)
{
- struct _mesa_prim *prim;
-
- prim = calloc(draw_count, sizeof(*prim));
- if (prim == NULL) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "gl%sDraw%sIndirect%s",
- (draw_count > 1) ? "Multi" : "",
- ib ? "Elements" : "Arrays",
- indirect_data ? "CountARB" : "");
- return;
- }
-
- prim[0].begin = 1;
- prim[draw_count - 1].end = 1;
- for (unsigned i = 0; i < draw_count; ++i, indirect_offset += stride) {
- prim[i].mode = mode;
- prim[i].indexed = !!ib;
- prim[i].indirect_offset = indirect_offset;
- prim[i].is_indirect = 1;
- prim[i].draw_id = i;
- }
-
- /* This should always be true at this time */
- assert(indirect_data == ctx->DrawIndirectBuffer);
+ const struct vbo_context *vbo = vbo_context_const(ctx);
+ const gl_vertex_processing_mode vmp = ctx->VertexProgram._VPMode;
+ return &vbo->current[_vbo_attribute_alias_map[vmp][attr]];
+}
- ctx->Driver.Draw(ctx, prim, draw_count,
- ib, false, 0, ~0,
- NULL, 0,
- indirect_data);
- free(prim);
+const struct gl_vertex_buffer_binding *
+_vbo_current_binding(const struct gl_context *ctx)
+{
+ const struct vbo_context *vbo = vbo_context_const(ctx);
+ return &vbo->binding;
}