mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
st/mesa: fix mapping of zero-sized buffer objects
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=31934
This commit is contained in:
parent
5822484510
commit
97ae4dad1c
1 changed files with 18 additions and 12 deletions
|
|
@ -210,6 +210,13 @@ st_bufferobj_data(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dummy data whose's pointer is used for zero size buffers or ranges.
|
||||
*/
|
||||
static long st_bufferobj_zero_length = 0;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Called via glMapBufferARB().
|
||||
*/
|
||||
|
|
@ -233,10 +240,16 @@ st_bufferobj_map(struct gl_context *ctx, GLenum target, GLenum access,
|
|||
break;
|
||||
}
|
||||
|
||||
obj->Pointer = pipe_buffer_map(st_context(ctx)->pipe,
|
||||
st_obj->buffer,
|
||||
flags,
|
||||
&st_obj->transfer);
|
||||
/* Handle zero-size buffers here rather than in drivers */
|
||||
if (obj->Size == 0) {
|
||||
obj->Pointer = &st_bufferobj_zero_length;
|
||||
}
|
||||
else {
|
||||
obj->Pointer = pipe_buffer_map(st_context(ctx)->pipe,
|
||||
st_obj->buffer,
|
||||
flags,
|
||||
&st_obj->transfer);
|
||||
}
|
||||
|
||||
if (obj->Pointer) {
|
||||
obj->Offset = 0;
|
||||
|
|
@ -246,13 +259,6 @@ st_bufferobj_map(struct gl_context *ctx, GLenum target, GLenum access,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dummy data whose's pointer is used for zero length ranges.
|
||||
*/
|
||||
static long
|
||||
st_bufferobj_zero_length_range = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Called via glMapBufferRange().
|
||||
*/
|
||||
|
|
@ -293,7 +299,7 @@ st_bufferobj_map_range(struct gl_context *ctx, GLenum target,
|
|||
* length range from the pipe driver.
|
||||
*/
|
||||
if (!length) {
|
||||
obj->Pointer = &st_bufferobj_zero_length_range;
|
||||
obj->Pointer = &st_bufferobj_zero_length;
|
||||
}
|
||||
else {
|
||||
obj->Pointer = pipe_buffer_map_range(pipe,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue