virgl: Add code to accept BGRx_SRGB as RGBx_SRGB

This will be enabled in later patches by the emulation tweak.

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
This commit is contained in:
Gert Wollny 2019-05-27 16:26:25 +02:00
parent d8967b7951
commit 22edafb239
2 changed files with 23 additions and 3 deletions

View File

@ -595,13 +595,30 @@ virgl_is_vertex_format_supported(struct pipe_screen *screen,
static boolean
virgl_format_check_bitmask(enum pipe_format format,
uint32_t bitmask[16])
uint32_t bitmask[16],
boolean may_emulate_bgra)
{
int big = format / 32;
int small = format % 32;
if ((bitmask[big] & (1 << small)))
return TRUE;
/* On GLES hosts we don't advertise BGRx_SRGB, but we may be able
* emulate it by using a swizzled RGBx */
if (may_emulate_bgra) {
if (format == PIPE_FORMAT_B8G8R8A8_SRGB)
format = PIPE_FORMAT_R8G8B8A8_SRGB;
else if (format == PIPE_FORMAT_B8G8R8X8_SRGB)
format = PIPE_FORMAT_R8G8B8X8_SRGB;
else {
return FALSE;
}
big = format / 32;
small = format % 32;
if (bitmask[big] & (1 << small))
return TRUE;
}
return FALSE;
}
@ -693,7 +710,8 @@ virgl_is_format_supported( struct pipe_screen *screen,
return FALSE;
if (!virgl_format_check_bitmask(format,
vscreen->caps.caps.v1.render.bitmask))
vscreen->caps.caps.v1.render.bitmask,
may_emulate_bgra))
return FALSE;
}
@ -738,7 +756,8 @@ virgl_is_format_supported( struct pipe_screen *screen,
out_lookup:
return virgl_format_check_bitmask(format,
vscreen->caps.caps.v1.sampler.bitmask);
vscreen->caps.caps.v1.sampler.bitmask,
may_emulate_bgra);
}
static void virgl_flush_frontbuffer(struct pipe_screen *screen,

View File

@ -46,6 +46,7 @@ struct virgl_screen {
struct slab_parent_pool transfer_pool;
uint32_t sub_ctx_id;
bool tweak_gles_emulate_bgra;
};