st/mesa: restore the transfer_inline_write path for BufferData

Version 2 that shouldn't crash.

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Marek Olšák 2013-04-25 22:12:47 +02:00
parent 6a2ad679e6
commit 1ba1d617bf

View file

@ -182,6 +182,21 @@ st_bufferobj_data(struct gl_context *ctx,
struct st_buffer_object *st_obj = st_buffer_object(obj);
unsigned bind, pipe_usage;
if (size && data && st_obj->buffer &&
st_obj->Base.Size == size && st_obj->Base.Usage == usage) {
/* Just discard the old contents and write new data.
* This should be the same as creating a new buffer, but we avoid
* a lot of validation in Mesa.
*/
struct pipe_box box;
u_box_1d(0, size, &box);
pipe->transfer_inline_write(pipe, st_obj->buffer, 0,
PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE,
&box, data, 0, 0);
return GL_TRUE;
}
st_obj->Base.Size = size;
st_obj->Base.Usage = usage;