diff options
author | Rob Clark <[email protected]> | 2016-07-05 15:41:26 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2016-07-06 10:17:30 -0400 |
commit | 64d35f817afc3106684dd74491b14be4d676cb88 (patch) | |
tree | 94e3b6297aa32985f8d9f26c72a53f730da4885b /src/mesa/vbo/vbo_exec_api.c | |
parent | 23dd9eaa94e97450582059763fcb479e1e8fe818 (diff) |
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 <[email protected]>
Reviewed-by: Mathias Fröhlich <[email protected]>
Diffstat (limited to 'src/mesa/vbo/vbo_exec_api.c')
-rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index e02bb907c4f..32f15db3900 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -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; |