mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
vbo: fix attr reset
In bc4e0c4 (vbo: Use a bitmask to track the active arrays in vbo_exec*.)
we stopped looping over all the attributes and resetting all slots.
Which exposed an issue in vbo_exec_bind_arrays() for handling GENERIC0
vs. POS.
Split out a helper which can reset a particular slot, so that
vbo_exec_bind_arrays() can re-use it to reset POS.
This fixes an issue with 0ad (and possibly others).
Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
parent
23dd9eaa94
commit
64d35f817a
3 changed files with 10 additions and 7 deletions
|
|
@ -152,6 +152,7 @@ void vbo_exec_invalidate_state( struct gl_context *ctx, GLbitfield new_state );
|
|||
|
||||
/* Internal functions:
|
||||
*/
|
||||
void vbo_reset_attr(struct vbo_exec_context *exec, GLuint attr);
|
||||
|
||||
void vbo_exec_vtx_init( struct vbo_exec_context *exec );
|
||||
void vbo_exec_vtx_destroy( struct vbo_exec_context *exec );
|
||||
|
|
|
|||
|
|
@ -1275,16 +1275,18 @@ void vbo_exec_FlushVertices( struct gl_context *ctx, GLuint flags )
|
|||
#endif
|
||||
}
|
||||
|
||||
void vbo_reset_attr(struct vbo_exec_context *exec, GLuint attr)
|
||||
{
|
||||
exec->vtx.attrsz[attr] = 0;
|
||||
exec->vtx.attrtype[attr] = GL_FLOAT;
|
||||
exec->vtx.active_sz[attr] = 0;
|
||||
}
|
||||
|
||||
static void reset_attrfv( struct vbo_exec_context *exec )
|
||||
{
|
||||
{
|
||||
while (exec->vtx.enabled) {
|
||||
const int i = u_bit_scan64(&exec->vtx.enabled);
|
||||
assert(exec->vtx.attrsz[i]);
|
||||
|
||||
exec->vtx.attrsz[i] = 0;
|
||||
exec->vtx.attrtype[i] = GL_FLOAT;
|
||||
exec->vtx.active_sz[i] = 0;
|
||||
vbo_reset_attr(exec, i);
|
||||
}
|
||||
|
||||
exec->vtx.vertex_size = 0;
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
|
|||
exec->vtx.inputs[VERT_ATTRIB_GENERIC0] = exec->vtx.inputs[0];
|
||||
exec->vtx.attrsz[VERT_ATTRIB_GENERIC0] = exec->vtx.attrsz[0];
|
||||
exec->vtx.attrptr[VERT_ATTRIB_GENERIC0] = exec->vtx.attrptr[0];
|
||||
exec->vtx.attrsz[0] = 0;
|
||||
vbo_reset_attr(exec, VERT_ATTRIB_POS);
|
||||
exec->vtx.enabled &= (~BITFIELD64_BIT(VBO_ATTRIB_POS));
|
||||
exec->vtx.enabled |= BITFIELD64_BIT(VBO_ATTRIB_GENERIC0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue