egl_dri2: refactor droid_get_buffers_with_format

Move the loop to parse attachments to its own function.

Reviewed-by: Chad Versace <chad@chad-versace.us>
This commit is contained in:
Chia-I Wu 2011-08-26 23:49:04 +08:00
parent 357d3f30f3
commit 384f228a25
1 changed files with 53 additions and 41 deletions

View File

@ -369,6 +369,57 @@ droid_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate)
{
}
static int
droid_get_buffers_parse_attachments(struct dri2_egl_surface *dri2_surf,
unsigned int *attachments, int count)
{
int num_buffers = 0, i;
/* fill dri2_surf->buffers */
for (i = 0; i < count * 2; i += 2) {
__DRIbuffer *buf, *local;
assert(num_buffers < ARRAY_SIZE(dri2_surf->buffers));
buf = &dri2_surf->buffers[num_buffers];
switch (attachments[i]) {
case __DRI_BUFFER_BACK_LEFT:
buf->attachment = attachments[i];
buf->name = get_native_buffer_name(dri2_surf->buffer);
buf->cpp = get_format_bpp(dri2_surf->buffer->format);
buf->pitch = dri2_surf->buffer->stride * buf->cpp;
buf->flags = 0;
if (buf->name)
num_buffers++;
break;
case __DRI_BUFFER_DEPTH:
case __DRI_BUFFER_STENCIL:
case __DRI_BUFFER_ACCUM:
case __DRI_BUFFER_DEPTH_STENCIL:
case __DRI_BUFFER_HIZ:
local = droid_alloc_local_buffer(dri2_surf,
attachments[i], attachments[i + 1]);
if (local) {
*buf = *local;
num_buffers++;
}
break;
case __DRI_BUFFER_FRONT_LEFT:
case __DRI_BUFFER_FRONT_RIGHT:
case __DRI_BUFFER_FAKE_FRONT_LEFT:
case __DRI_BUFFER_FAKE_FRONT_RIGHT:
case __DRI_BUFFER_BACK_RIGHT:
default:
/* no front or right buffers */
break;
}
}
return num_buffers;
}
static __DRIbuffer *
droid_get_buffers_with_format(__DRIdrawable * driDrawable,
int *width, int *height,
@ -393,47 +444,8 @@ droid_get_buffers_with_format(__DRIdrawable * driDrawable,
dri2_surf->base.Height = dri2_surf->buffer->height;
}
dri2_surf->buffer_count = 0;
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];
switch (attachments[i]) {
case __DRI_BUFFER_BACK_LEFT:
buf->attachment = attachments[i];
buf->name = get_native_buffer_name(dri2_surf->buffer);
buf->cpp = get_format_bpp(dri2_surf->buffer->format);
buf->pitch = dri2_surf->buffer->stride * buf->cpp;
buf->flags = 0;
if (buf->name)
dri2_surf->buffer_count++;
break;
case __DRI_BUFFER_DEPTH:
case __DRI_BUFFER_STENCIL:
case __DRI_BUFFER_ACCUM:
case __DRI_BUFFER_DEPTH_STENCIL:
case __DRI_BUFFER_HIZ:
local = droid_alloc_local_buffer(dri2_surf,
attachments[i], attachments[i + 1]);
if (local) {
*buf = *local;
dri2_surf->buffer_count++;
}
break;
case __DRI_BUFFER_FRONT_LEFT:
case __DRI_BUFFER_FRONT_RIGHT:
case __DRI_BUFFER_FAKE_FRONT_LEFT:
case __DRI_BUFFER_FAKE_FRONT_RIGHT:
case __DRI_BUFFER_BACK_RIGHT:
default:
/* no front or right buffers */
break;
}
}
dri2_surf->buffer_count =
droid_get_buffers_parse_attachments(dri2_surf, attachments, count);
if (width)
*width = dri2_surf->base.Width;