virgl: fixup_readback_format --> fixup_formats

This function is generalizable.

Suggested-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
This commit is contained in:
Gurchetan Singh 2019-08-07 16:22:16 -07:00
parent bf0ca99ec7
commit 3da029ac1a
1 changed files with 7 additions and 8 deletions

View File

@ -842,21 +842,19 @@ virgl_destroy_screen(struct pipe_screen *screen)
}
static void
fixup_readback_format(union virgl_caps *caps)
fixup_formats(union virgl_caps *caps, struct virgl_supported_format_mask *mask)
{
const size_t size = ARRAY_SIZE(caps->v2.supported_readback_formats.bitmask);
const size_t size = ARRAY_SIZE(mask->bitmask);
for (int i = 0; i < size; ++i) {
if (caps->v2.supported_readback_formats.bitmask[i] != 0)
if (mask->bitmask[i] != 0)
return; /* we got some formats, we definately have a new protocol */
}
/* old protocol used; fall back to considering all sampleable formats valid
* readback-formats
*/
for (int i = 0; i < size; ++i) {
caps->v2.supported_readback_formats.bitmask[i] =
caps->v1.sampler.bitmask[i];
}
for (int i = 0; i < size; ++i)
mask->bitmask[i] = caps->v1.sampler.bitmask[i];
}
struct pipe_screen *
@ -905,7 +903,8 @@ virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *c
virgl_init_screen_resource_functions(&screen->base);
vws->get_caps(vws, &screen->caps);
fixup_readback_format(&screen->caps.caps);
fixup_formats(&screen->caps.caps,
&screen->caps.caps.v2.supported_readback_formats);
screen->refcnt = 1;