From b70f14188df98cec1aa0741e015367e516dbfd6f Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Tue, 22 Feb 2022 19:02:24 +0900 Subject: [PATCH] virgl: Check texture multisample compatibility v2: Support VIRGL_FORMAT_NONE (Gert Wollny) Signed-off-by: Akihiko Odaki Suggested-by: Gert Wollny Reviewed-by: Gert Wollny Part-of: --- src/gallium/drivers/virgl/virgl_encode.c | 1 + src/gallium/drivers/virgl/virgl_screen.c | 5 +++++ src/virtio/virtio-gpu/virgl_hw.h | 1 + 3 files changed, 7 insertions(+) diff --git a/src/gallium/drivers/virgl/virgl_encode.c b/src/gallium/drivers/virgl/virgl_encode.c index d0f277f9e0f..c1d0d189569 100644 --- a/src/gallium/drivers/virgl/virgl_encode.c +++ b/src/gallium/drivers/virgl/virgl_encode.c @@ -42,6 +42,7 @@ #define CONV_FORMAT(f) [PIPE_FORMAT_##f] = VIRGL_FORMAT_##f, static const enum virgl_formats virgl_formats_conv_table[PIPE_FORMAT_COUNT] = { + CONV_FORMAT(NONE) CONV_FORMAT(B8G8R8A8_UNORM) CONV_FORMAT(B8G8R8X8_UNORM) CONV_FORMAT(A8R8G8B8_UNORM) diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 3f44bc0ec2b..2055d177a81 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -700,6 +700,11 @@ virgl_is_format_supported( struct pipe_screen *screen, if (sample_count > caps->v1.max_samples) return false; + + if (caps->v2.host_feature_check_version >= 9 && + !has_format_bit(&caps->v2.supported_multisample_formats, + pipe_to_virgl_format(format))) + return false; } if (bind & PIPE_BIND_VERTEX_BUFFER) { diff --git a/src/virtio/virtio-gpu/virgl_hw.h b/src/virtio/virtio-gpu/virgl_hw.h index d323aa1c99f..0ddedb311e8 100644 --- a/src/virtio/virtio-gpu/virgl_hw.h +++ b/src/virtio/virtio-gpu/virgl_hw.h @@ -600,6 +600,7 @@ struct virgl_caps_v2 { char renderer[64]; float max_anisotropy; uint32_t max_shader_sampler_views; + struct virgl_supported_format_mask supported_multisample_formats; }; union virgl_caps {