Mesa (master): st/mesa: restore the transfer_inline_write path for BufferData
Marek Olšák
mareko at kemper.freedesktop.org
Sat May 11 21:58:15 UTC 2013
Module: Mesa
Branch: master
Commit: 1ba1d617bf4eff0f08df80a2805b6f25ebf038fb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ba1d617bf4eff0f08df80a2805b6f25ebf038fb
Author: Marek Olšák <maraeo at gmail.com>
Date: Thu Apr 25 22:12:47 2013 +0200
st/mesa: restore the transfer_inline_write path for BufferData
Version 2 that shouldn't crash.
Reviewed-by: Brian Paul <brianp at vmware.com>
---
src/mesa/state_tracker/st_cb_bufferobjects.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
index d166fe6..c868d5e 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -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;
More information about the mesa-commit
mailing list