mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
mesa: Implement _mesa_all_varyings_in_vbos.
Implement the equivalent of vbo_all_varyings_in_vbos for vertex array objects. v2: Update comment. Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
f7cb46a972
commit
f8be969b1b
2 changed files with 39 additions and 0 deletions
|
|
@ -359,6 +359,41 @@ _mesa_update_vao_client_arrays(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
_mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao)
|
||||
{
|
||||
/* Walk those enabled arrays that have the default vbo attached */
|
||||
GLbitfield64 mask = vao->_Enabled & ~vao->VertexAttribBufferMask;
|
||||
|
||||
while (mask) {
|
||||
/* Do not use u_bit_scan64 as we can walk multiple
|
||||
* attrib arrays at once
|
||||
*/
|
||||
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 out vao->VertexAttribBufferMask */
|
||||
assert(!_mesa_is_bufferobj(buffer_binding->BufferObj));
|
||||
|
||||
/* Bail out once we find the first non vbo with a non zero stride */
|
||||
if (buffer_binding->Stride != 0)
|
||||
return false;
|
||||
|
||||
/* Note that we cannot use the xor variant since the _BoundArray mask
|
||||
* may contain array attributes that are bound but not enabled.
|
||||
*/
|
||||
mask &= ~buffer_binding->_BoundArrays;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* API Functions */
|
||||
/**********************************************************************/
|
||||
|
|
|
|||
|
|
@ -81,6 +81,10 @@ extern void
|
|||
_mesa_update_vao_client_arrays(struct gl_context *ctx,
|
||||
struct gl_vertex_array_object *vao);
|
||||
|
||||
/* Returns true if all varying arrays reside in vbos */
|
||||
extern bool
|
||||
_mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao);
|
||||
|
||||
/*
|
||||
* API functions
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue