st/osmesa: check buffer size when searching for buffers
authorBrian Paul <brianp@vmware.com>
Sat, 1 Mar 2014 18:16:27 +0000 (11:16 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 4 Mar 2014 15:49:15 +0000 (08:49 -0700)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75543
Cc: "10.1" <mesa-stable@lists.freedesktop.org>
src/gallium/state_trackers/osmesa/osmesa.c

index 8b30025b717107d878700ad9fe27a334da22eebf..6b27c8af12c393be5e225150a43d98d07727eaa5 100644 (file)
@@ -480,12 +480,13 @@ osmesa_create_buffer(enum pipe_format color_format,
 
 
 /**
- * Search linked list for a buffer with matching pixel formats.
+ * Search linked list for a buffer with matching pixel formats and size.
  */
 static struct osmesa_buffer *
 osmesa_find_buffer(enum pipe_format color_format,
                    enum pipe_format ds_format,
-                   enum pipe_format accum_format)
+                   enum pipe_format accum_format,
+                   GLsizei width, GLsizei height)
 {
    struct osmesa_buffer *b;
 
@@ -493,7 +494,9 @@ osmesa_find_buffer(enum pipe_format color_format,
    for (b = BufferList; b; b = b->next) {
       if (b->visual.color_format == color_format &&
           b->visual.depth_stencil_format == ds_format &&
-          b->visual.accum_format == accum_format) {
+          b->visual.accum_format == accum_format &&
+          b->width == width &&
+          b->height == height) {
          return b;
       }
    }
@@ -673,7 +676,7 @@ OSMesaMakeCurrent(OSMesaContext osmesa, void *buffer, GLenum type,
    /* See if we already have a buffer that uses these pixel formats */
    osbuffer = osmesa_find_buffer(color_format,
                                  osmesa->depth_stencil_format,
-                                 osmesa->accum_format);
+                                 osmesa->accum_format, width, height);
    if (!osbuffer) {
       /* Existing buffer found, create new buffer */
       osbuffer = osmesa_create_buffer(color_format,