+static boolean
+has_format_bit(struct virgl_supported_format_mask *mask,
+ enum virgl_formats fmt)
+{
+ assert(fmt < VIRGL_FORMAT_MAX);
+ unsigned val = (unsigned)fmt;
+ unsigned idx = val / 32;
+ unsigned bit = val % 32;
+ assert(idx < ARRAY_SIZE(mask->bitmask));
+ return (mask->bitmask[val / 32] & (1u << bit)) != 0;
+}
+
+boolean
+virgl_has_readback_format(struct pipe_screen *screen,
+ enum virgl_formats fmt)
+{
+ struct virgl_screen *vscreen = virgl_screen(screen);
+ return has_format_bit(&vscreen->caps.caps.v2.supported_readback_formats,
+ fmt);
+}
+