st/dri: Fix for X server 1.6.0 (DRI2 version 1)
authorJakob Bornecrantz <wallbraker@gmail.com>
Wed, 24 Mar 2010 23:27:46 +0000 (00:27 +0100)
committerJakob Bornecrantz <wallbraker@gmail.com>
Wed, 24 Mar 2010 23:45:28 +0000 (00:45 +0100)
src/gallium/state_trackers/dri/dri_st_api.c

index 2cde01967d80c894a1a447bb6f2a9a9c7dc583b7..263c1e19a7036c235bdfe258009b76e5a4fe4bf8 100644 (file)
@@ -168,13 +168,18 @@ dri_drawable_get_buffers(struct dri_drawable *drawable,
    boolean with_format;
    __DRIbuffer *buffers;
    int num_buffers;
-   unsigned attachments[8];
+   unsigned attachments[10];
    unsigned num_attachments, i;
 
    assert(loader);
    with_format = (loader->base.version > 2 && loader->getBuffersWithFormat);
 
    num_attachments = 0;
+
+   /* for Xserver 1.6.0 (DRI2 version 1) we always need to ask for the front */
+   if (!with_format)
+      attachments[num_attachments++] = __DRI_BUFFER_FRONT_LEFT;
+
    for (i = 0; i < *count; i++) {
       enum pipe_format format;
       int att;
@@ -185,6 +190,9 @@ dri_drawable_get_buffers(struct dri_drawable *drawable,
 
       switch (statts[i]) {
       case ST_ATTACHMENT_FRONT_LEFT:
+         /* already added */
+         if (!with_format)
+            continue;
          att = __DRI_BUFFER_FRONT_LEFT;
          break;
       case ST_ATTACHMENT_BACK_LEFT: