mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 22:00:11 +01:00
st/mesa: fix zero-sized user vertex buffer bug
Commit 4c4ab5668c didn't properly
handle the stride==0 case.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=35961
This commit is contained in:
parent
e397b3a7c0
commit
6cab07685f
1 changed files with 23 additions and 13 deletions
|
|
@ -406,26 +406,36 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
|
|||
}
|
||||
else {
|
||||
/* wrap user data */
|
||||
uint bytes;
|
||||
void *ptr;
|
||||
|
||||
if (arrays[mesaAttr]->Ptr) {
|
||||
uint divisor = arrays[mesaAttr]->InstanceDivisor;
|
||||
uint length = (divisor ? num_instances / divisor : max_index) + 1;
|
||||
vbuffer[attr].buffer =
|
||||
pipe_user_buffer_create(pipe->screen,
|
||||
(void *) arrays[mesaAttr]->Ptr,
|
||||
stride * length,
|
||||
PIPE_BIND_VERTEX_BUFFER);
|
||||
if (stride == 0) {
|
||||
bytes = _mesa_sizeof_type(arrays[mesaAttr]->Type)
|
||||
* arrays[mesaAttr]->Size;
|
||||
}
|
||||
else {
|
||||
uint divisor = arrays[mesaAttr]->InstanceDivisor;
|
||||
uint length = (divisor ? num_instances / divisor : max_index) + 1;
|
||||
bytes = stride * length;
|
||||
}
|
||||
|
||||
ptr = (void *) arrays[mesaAttr]->Ptr;
|
||||
}
|
||||
else {
|
||||
/* no array, use ctx->Current.Attrib[] value */
|
||||
uint bytes = sizeof(ctx->Current.Attrib[0]);
|
||||
vbuffer[attr].buffer =
|
||||
pipe_user_buffer_create(pipe->screen,
|
||||
(void *) ctx->Current.Attrib[mesaAttr],
|
||||
bytes,
|
||||
PIPE_BIND_VERTEX_BUFFER);
|
||||
bytes = sizeof(ctx->Current.Attrib[0]);
|
||||
ptr = (void *) ctx->Current.Attrib[mesaAttr];
|
||||
stride = 0;
|
||||
}
|
||||
|
||||
assert(ptr);
|
||||
assert(bytes);
|
||||
|
||||
vbuffer[attr].buffer =
|
||||
pipe_user_buffer_create(pipe->screen, ptr, bytes,
|
||||
PIPE_BIND_VERTEX_BUFFER);
|
||||
|
||||
vbuffer[attr].buffer_offset = 0;
|
||||
|
||||
/* Track user vertex buffers. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue