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 {