aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/arrayobj.c28
-rw-r--r--src/mesa/main/arrayobj.h4
-rw-r--r--src/mesa/vbo/vbo_exec_array.c36
3 files changed, 33 insertions, 35 deletions
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index becf32f5cda..2d3b69cd8de 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -393,6 +393,34 @@ _mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao)
return true;
}
+bool
+_mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao)
+{
+ /* Walk the enabled arrays that have a vbo attached */
+ GLbitfield64 mask = vao->_Enabled & vao->VertexAttribBufferMask;
+
+ while (mask) {
+ const int i = ffsll(mask) - 1;
+ const struct gl_vertex_attrib_array *attrib_array =
+ &vao->VertexAttrib[i];
+ const struct gl_vertex_buffer_binding *buffer_binding =
+ &vao->VertexBinding[attrib_array->VertexBinding];
+
+ /* Only enabled arrays shall appear in the _Enabled bitmask */
+ assert(attrib_array->Enabled);
+ /* We have already masked with vao->VertexAttribBufferMask */
+ assert(_mesa_is_bufferobj(buffer_binding->BufferObj));
+
+ /* Bail out once we find the first disallowed mapping */
+ if (_mesa_check_disallowed_mapping(buffer_binding->BufferObj))
+ return false;
+
+ /* We have handled everything that is bound to this buffer_binding. */
+ mask &= ~buffer_binding->_BoundArrays;
+ }
+
+ return true;
+}
/**********************************************************************/
/* API Functions */
diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h
index d30c85c7cc5..830502e23a9 100644
--- a/src/mesa/main/arrayobj.h
+++ b/src/mesa/main/arrayobj.h
@@ -85,6 +85,10 @@ _mesa_update_vao_client_arrays(struct gl_context *ctx,
extern bool
_mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao);
+/* Returns true if all vbos are unmapped */
+extern bool
+_mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao);
+
/*
* API functions
*/
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 87898370217..e1aa3ace32a 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -43,40 +43,6 @@
/**
- * All vertex buffers should be in an unmapped state when we're about
- * to draw.
- */
-static bool
-check_input_buffers_are_unmapped(const struct gl_vertex_array_object *vao)
-{
- /* Walk the enabled arrays that have a vbo attached */
- GLbitfield64 mask = vao->_Enabled & vao->VertexAttribBufferMask;
-
- while (mask) {
- int i = ffsll(mask) - 1;
- const struct gl_vertex_attrib_array *attrib_array =
- &vao->VertexAttrib[i];
- const struct gl_vertex_buffer_binding *buffer_binding =
- &vao->VertexBinding[attrib_array->VertexBinding];
-
- /* Only enabled arrays shall appear in the _Enabled bitmask */
- assert(attrib_array->Enabled);
- /* We have already masked with vao->VertexAttribBufferMask */
- assert(_mesa_is_bufferobj(buffer_binding->BufferObj));
-
- /* Bail out once we find the first disallowed mapping */
- if (_mesa_check_disallowed_mapping(buffer_binding->BufferObj))
- return false;
-
- /* We have handled everything that is bound to this buffer_binding. */
- mask &= ~buffer_binding->_BoundArrays;
- }
-
- return true;
-}
-
-
-/**
* Check that element 'j' of the array has reasonable data.
* Map VBO if needed.
* For debugging purposes; not normally used.
@@ -430,7 +396,7 @@ vbo_bind_arrays(struct gl_context *ctx)
}
}
- if (!check_input_buffers_are_unmapped(ctx->Array.VAO)) {
+ if (!_mesa_all_buffers_are_unmapped(ctx->Array.VAO)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"draw call (vertex buffers are mapped)");
return false;