From 6f4c4df6c2da6b2c055952df78bad8edf83c4dc8 Mon Sep 17 00:00:00 2001 From: cheyang Date: Fri, 26 Feb 2021 17:47:27 +0800 Subject: [PATCH] virgl: add astc 2d compressed formats Signed-off-by: cheyang Signed-off-by: hexin Reviewed-by: Gert Wollny Part-of: --- src/gallium/drivers/virgl/virgl_encode.c | 28 ++++++++++++++++++++++++++++ src/gallium/drivers/virgl/virgl_screen.c | 5 +++++ src/virtio/virtio-gpu/virgl_hw.h | 30 ++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/gallium/drivers/virgl/virgl_encode.c b/src/gallium/drivers/virgl/virgl_encode.c index 47a44c3..d93fb85 100644 --- a/src/gallium/drivers/virgl/virgl_encode.c +++ b/src/gallium/drivers/virgl/virgl_encode.c @@ -259,6 +259,34 @@ static const enum virgl_formats virgl_formats_conv_table[PIPE_FORMAT_COUNT] = { CONV_FORMAT(ETC2_R11_SNORM) CONV_FORMAT(ETC2_RG11_UNORM) CONV_FORMAT(ETC2_RG11_SNORM) + CONV_FORMAT(ASTC_4x4) + CONV_FORMAT(ASTC_5x4) + CONV_FORMAT(ASTC_5x5) + CONV_FORMAT(ASTC_6x5) + CONV_FORMAT(ASTC_6x6) + CONV_FORMAT(ASTC_8x5) + CONV_FORMAT(ASTC_8x6) + CONV_FORMAT(ASTC_8x8) + CONV_FORMAT(ASTC_10x5) + CONV_FORMAT(ASTC_10x6) + CONV_FORMAT(ASTC_10x8) + CONV_FORMAT(ASTC_10x10) + CONV_FORMAT(ASTC_12x10) + CONV_FORMAT(ASTC_12x12) + CONV_FORMAT(ASTC_4x4_SRGB) + CONV_FORMAT(ASTC_5x4_SRGB) + CONV_FORMAT(ASTC_5x5_SRGB) + CONV_FORMAT(ASTC_6x5_SRGB) + CONV_FORMAT(ASTC_6x6_SRGB) + CONV_FORMAT(ASTC_8x5_SRGB) + CONV_FORMAT(ASTC_8x6_SRGB) + CONV_FORMAT(ASTC_8x8_SRGB ) + CONV_FORMAT(ASTC_10x5_SRGB) + CONV_FORMAT(ASTC_10x6_SRGB) + CONV_FORMAT(ASTC_10x8_SRGB) + CONV_FORMAT(ASTC_10x10_SRGB) + CONV_FORMAT(ASTC_12x10_SRGB) + CONV_FORMAT(ASTC_12x12_SRGB) }; enum virgl_formats pipe_to_virgl_format(enum pipe_format format) diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 1189a3e..24c692d 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -670,6 +670,7 @@ virgl_is_format_supported( struct pipe_screen *screen, if ((format_desc->layout == UTIL_FORMAT_LAYOUT_RGTC || format_desc->layout == UTIL_FORMAT_LAYOUT_ETC || + format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC || format_desc->layout == UTIL_FORMAT_LAYOUT_S3TC) && target == PIPE_TEXTURE_3D) return false; @@ -731,6 +732,10 @@ virgl_is_format_supported( struct pipe_screen *screen, goto out_lookup; } + if (format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC) { + goto out_lookup; + } + /* Find the first non-VOID channel. */ for (i = 0; i < 4; i++) { if (format_desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) { diff --git a/src/virtio/virtio-gpu/virgl_hw.h b/src/virtio/virtio-gpu/virgl_hw.h index 94997a3..c77d1fc 100644 --- a/src/virtio/virtio-gpu/virgl_hw.h +++ b/src/virtio/virtio-gpu/virgl_hw.h @@ -358,6 +358,36 @@ enum virgl_formats { VIRGL_FORMAT_ETC2_RG11_UNORM = 277, VIRGL_FORMAT_ETC2_RG11_SNORM = 278, + /* astc compressed */ + VIRGL_FORMAT_ASTC_4x4 = 279, + VIRGL_FORMAT_ASTC_5x4 = 280, + VIRGL_FORMAT_ASTC_5x5 = 281, + VIRGL_FORMAT_ASTC_6x5 = 282, + VIRGL_FORMAT_ASTC_6x6 = 283, + VIRGL_FORMAT_ASTC_8x5 = 284, + VIRGL_FORMAT_ASTC_8x6 = 285, + VIRGL_FORMAT_ASTC_8x8 = 286, + VIRGL_FORMAT_ASTC_10x5 = 287, + VIRGL_FORMAT_ASTC_10x6 = 288, + VIRGL_FORMAT_ASTC_10x8 = 289, + VIRGL_FORMAT_ASTC_10x10 = 290, + VIRGL_FORMAT_ASTC_12x10 = 291, + VIRGL_FORMAT_ASTC_12x12 = 292, + VIRGL_FORMAT_ASTC_4x4_SRGB = 293, + VIRGL_FORMAT_ASTC_5x4_SRGB = 294, + VIRGL_FORMAT_ASTC_5x5_SRGB = 295, + VIRGL_FORMAT_ASTC_6x5_SRGB = 296, + VIRGL_FORMAT_ASTC_6x6_SRGB = 297, + VIRGL_FORMAT_ASTC_8x5_SRGB = 298, + VIRGL_FORMAT_ASTC_8x6_SRGB = 299, + VIRGL_FORMAT_ASTC_8x8_SRGB = 300, + VIRGL_FORMAT_ASTC_10x5_SRGB = 301, + VIRGL_FORMAT_ASTC_10x6_SRGB = 302, + VIRGL_FORMAT_ASTC_10x8_SRGB = 303, + VIRGL_FORMAT_ASTC_10x10_SRGB = 304, + VIRGL_FORMAT_ASTC_12x10_SRGB = 305, + VIRGL_FORMAT_ASTC_12x12_SRGB = 306, + VIRGL_FORMAT_R10G10B10X2_UNORM = 308, VIRGL_FORMAT_A4B4G4R4_UNORM = 311, -- 2.7.4