egl_dri2: refactor droid_get_buffers_with_format
authorChia-I Wu <olv@lunarg.com>
Fri, 26 Aug 2011 15:49:04 +0000 (23:49 +0800)
committerChia-I Wu <olv@lunarg.com>
Wed, 31 Aug 2011 03:51:54 +0000 (11:51 +0800)
Move the loop to parse attachments to its own function.

Reviewed-by: Chad Versace <chad@chad-versace.us>
src/egl/drivers/dri2/platform_android.c

index 284dc3a661b026032908c2c35503b6e0b501760f..2bbd21067c4feef59b2773b90eb42c2a89a9a109 100644 (file)
@@ -369,36 +369,18 @@ droid_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate)
 {
 }
 
-static __DRIbuffer *
-droid_get_buffers_with_format(__DRIdrawable * driDrawable,
-                            int *width, int *height,
-                            unsigned int *attachments, int count,
-                            int *out_count, void *loaderPrivate)
+static int
+droid_get_buffers_parse_attachments(struct dri2_egl_surface *dri2_surf,
+                                    unsigned int *attachments, int count)
 {
-   struct dri2_egl_surface *dri2_surf = loaderPrivate;
-   struct dri2_egl_display *dri2_dpy =
-      dri2_egl_display(dri2_surf->base.Resource.Display);
-   int i;
+   int num_buffers = 0, i;
 
-   if (!dri2_surf->buffer) {
-      if (!droid_window_dequeue_buffer(dri2_surf))
-         return NULL;
-   }
-
-   /* free outdated buffers and update the surface size */
-   if (dri2_surf->base.Width != dri2_surf->buffer->width ||
-       dri2_surf->base.Height != dri2_surf->buffer->height) {
-      droid_free_local_buffers(dri2_surf);
-      dri2_surf->base.Width = dri2_surf->buffer->width;
-      dri2_surf->base.Height = dri2_surf->buffer->height;
-   }
-
-   dri2_surf->buffer_count = 0;
+   /* fill dri2_surf->buffers */
    for (i = 0; i < count * 2; i += 2) {
       __DRIbuffer *buf, *local;
 
-      assert(dri2_surf->buffer_count < ARRAY_SIZE(dri2_surf->buffers));
-      buf = &dri2_surf->buffers[dri2_surf->buffer_count];
+      assert(num_buffers < ARRAY_SIZE(dri2_surf->buffers));
+      buf = &dri2_surf->buffers[num_buffers];
 
       switch (attachments[i]) {
       case __DRI_BUFFER_BACK_LEFT:
@@ -409,7 +391,7 @@ droid_get_buffers_with_format(__DRIdrawable * driDrawable,
          buf->flags = 0;
 
          if (buf->name)
-            dri2_surf->buffer_count++;
+            num_buffers++;
          break;
       case __DRI_BUFFER_DEPTH:
       case __DRI_BUFFER_STENCIL:
@@ -421,7 +403,7 @@ droid_get_buffers_with_format(__DRIdrawable * driDrawable,
 
          if (local) {
             *buf = *local;
-            dri2_surf->buffer_count++;
+            num_buffers++;
          }
          break;
       case __DRI_BUFFER_FRONT_LEFT:
@@ -435,6 +417,36 @@ droid_get_buffers_with_format(__DRIdrawable * driDrawable,
       }
    }
 
+   return num_buffers;
+}
+
+static __DRIbuffer *
+droid_get_buffers_with_format(__DRIdrawable * driDrawable,
+                            int *width, int *height,
+                            unsigned int *attachments, int count,
+                            int *out_count, void *loaderPrivate)
+{
+   struct dri2_egl_surface *dri2_surf = loaderPrivate;
+   struct dri2_egl_display *dri2_dpy =
+      dri2_egl_display(dri2_surf->base.Resource.Display);
+   int i;
+
+   if (!dri2_surf->buffer) {
+      if (!droid_window_dequeue_buffer(dri2_surf))
+         return NULL;
+   }
+
+   /* free outdated buffers and update the surface size */
+   if (dri2_surf->base.Width != dri2_surf->buffer->width ||
+       dri2_surf->base.Height != dri2_surf->buffer->height) {
+      droid_free_local_buffers(dri2_surf);
+      dri2_surf->base.Width = dri2_surf->buffer->width;
+      dri2_surf->base.Height = dri2_surf->buffer->height;
+   }
+
+   dri2_surf->buffer_count =
+      droid_get_buffers_parse_attachments(dri2_surf, attachments, count);
+
    if (width)
       *width = dri2_surf->base.Width;
    if (height)