diff options
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r-- | src/egl/drivers/dri2/platform_android.c | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 284dc3a661b..2bbd21067c4 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -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) |