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