virgl: Use ETC2 formats directly when possible.

Don't emulate them with uncompressed formats if the host
support them since uncompressed formats like GL_R16 could
be not available on GLES hosts.

Signed-off-by: Lepton Wu <lepton@chromium.org>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
This commit is contained in:
Lepton Wu 2020-04-11 15:10:45 -07:00
parent dcb1e8fef8
commit 1c4f68b089
3 changed files with 25 additions and 0 deletions

View file

@ -248,6 +248,16 @@ static const enum virgl_formats virgl_formats_conv_table[PIPE_FORMAT_COUNT] = {
CONV_FORMAT(R10G10B10X2_UNORM)
CONV_FORMAT(A4B4G4R4_UNORM)
CONV_FORMAT(R8_SRGB)
CONV_FORMAT(ETC2_RGB8)
CONV_FORMAT(ETC2_SRGB8)
CONV_FORMAT(ETC2_RGB8A1)
CONV_FORMAT(ETC2_SRGB8A1)
CONV_FORMAT(ETC2_RGBA8)
CONV_FORMAT(ETC2_SRGBA8)
CONV_FORMAT(ETC2_R11_UNORM)
CONV_FORMAT(ETC2_R11_SNORM)
CONV_FORMAT(ETC2_RG11_UNORM)
CONV_FORMAT(ETC2_RG11_SNORM)
};
enum virgl_formats pipe_to_virgl_format(enum pipe_format format)

View file

@ -280,6 +280,18 @@ enum virgl_formats {
VIRGL_FORMAT_BPTC_RGB_FLOAT = 257,
VIRGL_FORMAT_BPTC_RGB_UFLOAT = 258,
/* etc2 compressed */
VIRGL_FORMAT_ETC2_RGB8 = 269,
VIRGL_FORMAT_ETC2_SRGB8 = 270,
VIRGL_FORMAT_ETC2_RGB8A1 = 271,
VIRGL_FORMAT_ETC2_SRGB8A1 = 272,
VIRGL_FORMAT_ETC2_RGBA8 = 273,
VIRGL_FORMAT_ETC2_SRGBA8 = 274,
VIRGL_FORMAT_ETC2_R11_UNORM = 275,
VIRGL_FORMAT_ETC2_R11_SNORM = 276,
VIRGL_FORMAT_ETC2_RG11_UNORM = 277,
VIRGL_FORMAT_ETC2_RG11_SNORM = 278,
VIRGL_FORMAT_R10G10B10X2_UNORM = 308,
VIRGL_FORMAT_A4B4G4R4_UNORM = 311,

View file

@ -759,6 +759,9 @@ virgl_is_format_supported( struct pipe_screen *screen,
if (format_desc->layout == UTIL_FORMAT_LAYOUT_BPTC) {
goto out_lookup;
}
if (format_desc->layout == UTIL_FORMAT_LAYOUT_ETC) {
goto out_lookup;
}
if (format == PIPE_FORMAT_R11G11B10_FLOAT) {
goto out_lookup;