diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h index 9da996014de..59e2e0c2666 100644 --- a/src/mesa/main/arrayobj.h +++ b/src/mesa/main/arrayobj.h @@ -158,18 +158,6 @@ _mesa_vao_enable_to_vp_inputs(gl_attribute_map_mode mode, GLbitfield enabled) } -/** - * Return the vp_inputs enabled bitmask after application of - * the position/generic0 aliasing map. - */ -static inline GLbitfield -_mesa_get_vao_vp_inputs(const struct gl_vertex_array_object *vao) -{ - const gl_attribute_map_mode mode = vao->_AttributeMapMode; - return _mesa_vao_enable_to_vp_inputs(mode, vao->Enabled); -} - - /** * Helper functions for consuming backends to walk the * ctx->Array._DrawVAO for driver side array setup. diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 49a931d1baa..82f79aea8a2 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1658,6 +1658,9 @@ struct gl_vertex_array_object /** Denotes the way the position/generic0 attribute is mapped */ gl_attribute_map_mode _AttributeMapMode; + /** "Enabled" with the position/generic0 attribute aliasing resolved */ + GLbitfield _EnabledWithMapMode; + /** Mask of VERT_BIT_* values indicating changed/dirty arrays */ GLbitfield NewArrays; diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index a461b15b22b..c6a9e9959bb 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -680,8 +680,11 @@ _mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao, new_array = true; } - /* May shuffle the position and generic0 bits around, filter out unwanted */ - const GLbitfield enabled = filter & _mesa_get_vao_vp_inputs(vao); + assert(vao->_EnabledWithMapMode == + _mesa_vao_enable_to_vp_inputs(vao->_AttributeMapMode, vao->Enabled)); + + /* Filter out unwanted arrays. */ + const GLbitfield enabled = filter & vao->_EnabledWithMapMode; if (ctx->Array._DrawVAOEnabledAttribs != enabled) { ctx->Array._DrawVAOEnabledAttribs = enabled; new_array = true; diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 677dd967979..ce8c1d585c1 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -1882,6 +1882,9 @@ _mesa_enable_vertex_array_attribs(struct gl_context *ctx, /* Update the map mode if needed */ if (attrib_bits & (VERT_BIT_POS|VERT_BIT_GENERIC0)) update_attribute_map_mode(ctx, vao); + + vao->_EnabledWithMapMode = + _mesa_vao_enable_to_vp_inputs(vao->_AttributeMapMode, vao->Enabled); } } @@ -1979,6 +1982,9 @@ _mesa_disable_vertex_array_attribs(struct gl_context *ctx, /* Update the map mode if needed */ if (attrib_bits & (VERT_BIT_POS|VERT_BIT_GENERIC0)) update_attribute_map_mode(ctx, vao); + + vao->_EnabledWithMapMode = + _mesa_vao_enable_to_vp_inputs(vao->_AttributeMapMode, vao->Enabled); } } diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c index 1370af691c2..d48687e1db9 100644 --- a/src/mesa/tnl/t_draw.c +++ b/src/mesa/tnl/t_draw.c @@ -557,7 +557,7 @@ update_vao_inputs(struct gl_context *ctx, const struct gl_vertex_array_object *vao = ctx->Array._DrawVAO; /* Make sure we process only arrays enabled in the VAO */ - assert((enable & ~_mesa_get_vao_vp_inputs(vao)) == 0); + assert((enable & ~vao->_EnabledWithMapMode) == 0); /* Fill in the client arrays from the VAO */ const struct gl_vertex_buffer_binding *bindings = &vao->BufferBinding[0];