blob: 5e505b746ce194e568a505ac1d859738561f9a11 [file] [log] [blame]
From 6f4c4df6c2da6b2c055952df78bad8edf83c4dc8 Mon Sep 17 00:00:00 2001
From: cheyang <cheyang@bytedance.com>
Date: Fri, 26 Feb 2021 17:47:27 +0800
Subject: [PATCH] virgl: add astc 2d compressed formats
Signed-off-by: cheyang <cheyang@bytedance.com>
Signed-off-by: hexin <hexin.op@bytedance.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9306>
---
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 47a44c3489f..d93fb85098a 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 1189a3e1b59..24c692df405 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 94997a3b005..c77d1fcec1f 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.31.1.498.g6c1eba8ee3d-goog