* enabled arrays when a fixed function array draw is executed.
*/
void
-_mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao,
- GLbitfield filter)
+_mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao)
{
struct gl_vertex_array_object **ptr = &ctx->Array._DrawVAO;
- bool new_vertex_buffers = false, new_vertex_elements = false;
if (*ptr != vao) {
_mesa_reference_vao_(ctx, ptr, vao);
- new_vertex_buffers = true;
- new_vertex_elements = true;
+ ctx->Array.NewVAO = true;
}
+}
+
+/**
+ * Update derived VAO state. This determines whether to update gallium vertex
+ * buffers and vertex elements, and it sets which vertex attribs are enabled
+ * according to the filter.
+ */
+void
+_mesa_update_vao_state(struct gl_context *ctx, GLbitfield filter)
+{
+ struct gl_vertex_array_object *vao = ctx->Array._DrawVAO;
+ bool new_vertex_buffers, new_vertex_elements;
+
+ new_vertex_buffers = new_vertex_elements = ctx->Array.NewVAO;
+ ctx->Array.NewVAO = false;
if (vao->NewVertexBuffers || vao->NewVertexElements) {
_mesa_update_vao_derived_arrays(ctx, vao);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
GET_CURRENT_CONTEXT(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
{
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
FLUSH_FOR_DRAW(ctx);
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
if (stride == 0)
stride = 4 * sizeof(GLuint); /* sizeof(DrawArraysIndirectCommand) */
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);
if (stride == 0)
stride = 5 * sizeof(GLuint); /* sizeof(DrawElementsIndirectCommand) */
- _mesa_set_draw_vao(ctx, ctx->Array.VAO,
- ctx->VertexProgram._VPModeInputFilter);
+ _mesa_set_draw_vao(ctx, ctx->Array.VAO);
+ _mesa_update_vao_state(ctx, ctx->VertexProgram._VPModeInputFilter);
if (ctx->NewState)
_mesa_update_state(ctx);