Mesa (master): st/mesa: fix a couple of issues in st_bind_ubos

Marek Olšák mareko at kemper.freedesktop.org
Sat May 11 21:58:15 UTC 2013


Module: Mesa
Branch: master
Commit: a17e87d4ebd84c1a01c3821c04ed9d8d7c763983
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a17e87d4ebd84c1a01c3821c04ed9d8d7c763983

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri Apr 26 01:54:41 2013 +0200

st/mesa: fix a couple of issues in st_bind_ubos

- don't reference a buffer for a local variable
  (that's never useful unless it can be the only reference to the buffer)
- check if the buffer is not NULL
- set buffer_size as specified with BindBufferRange

NOTE: This is a candidate for the 9.1 branch.

Reviewed-by: Fredrik Höglund <fredrik at kde.org>
Reviewed-by: Brian Paul <brianp at vmware.com>

---

 src/mesa/state_tracker/st_atom_constbuf.c |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_constbuf.c b/src/mesa/state_tracker/st_atom_constbuf.c
index ef208bc..f72af7a 100644
--- a/src/mesa/state_tracker/st_atom_constbuf.c
+++ b/src/mesa/state_tracker/st_atom_constbuf.c
@@ -194,13 +194,25 @@ static void st_bind_ubos(struct st_context *st,
 
       binding = &st->ctx->UniformBufferBindings[shader->UniformBlocks[i].Binding];
       st_obj = st_buffer_object(binding->BufferObject);
-      pipe_resource_reference(&cb.buffer, st_obj->buffer);
 
-      cb.buffer_size = st_obj->buffer->width0 - binding->Offset;
-      cb.buffer_offset = binding->Offset;
+      cb.buffer = st_obj->buffer;
+
+      if (cb.buffer) {
+         cb.buffer_offset = binding->Offset;
+         cb.buffer_size = cb.buffer->width0 - binding->Offset;
+
+         /* AutomaticSize is FALSE if the buffer was set with BindBufferRange.
+          * Take the minimum just to be sure.
+          */
+         if (!binding->AutomaticSize)
+            cb.buffer_size = MIN2(cb.buffer_size, binding->Size);
+      }
+      else {
+         cb.buffer_offset = 0;
+         cb.buffer_size = 0;
+      }
 
       cso_set_constant_buffer(st->cso_context, shader_type, 1 + i, &cb);
-      pipe_resource_reference(&cb.buffer, NULL);
    }
 }
 




More information about the mesa-commit mailing list