In order to support additional native texture types, we need to update the defines in virglrenderer. The changes are backwards compatible and so builds should work with either the new version or the old version.
Signed-off-by: Joelle van Dyne <[email protected]> --- hw/display/virtio-gpu-virgl.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c index d0e6ad4b17..36c670f988 100644 --- a/hw/display/virtio-gpu-virgl.c +++ b/hw/display/virtio-gpu-virgl.c @@ -24,6 +24,8 @@ #include <virglrenderer.h> +#define SUPPORTED_VIRGL_INFO_EXT_VERSION (1) + struct virtio_gpu_virgl_resource { struct virtio_gpu_simple_resource base; MemoryRegion *mr; @@ -441,12 +443,30 @@ static void virgl_cmd_set_scanout(VirtIOGPU *g, memset(&ext, 0, sizeof(ext)); ret = virgl_renderer_resource_get_info_ext(ss.resource_id, &ext); info = ext.base; + /* fallback to older version */ native = (ScanoutTextureNative){ .type = ext.d3d_tex2d ? SCANOUT_TEXTURE_NATIVE_TYPE_D3D : SCANOUT_TEXTURE_NATIVE_TYPE_NONE, .u.d3d_tex2d = ext.d3d_tex2d, }; -#else +#if VIRGL_RENDERER_RESOURCE_INFO_EXT_VERSION >= SUPPORTED_VIRGL_INFO_EXT_VERSION + if (ext.version >= VIRGL_RENDERER_RESOURCE_INFO_EXT_VERSION) { + switch (ext.native_type) { + case VIRGL_NATIVE_HANDLE_NONE: + case VIRGL_NATIVE_HANDLE_D3D_TEX2D: { + /* already handled above */ + break; + } + default: { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: unsupported native texture type %d\n", + __func__, ext.native_type); + break; + } + } + } +#endif +#else /* VIRGL_VERSION_MAJOR < 1 */ memset(&info, 0, sizeof(info)); ret = virgl_renderer_resource_get_info(ss.resource_id, &info); #endif @@ -1169,11 +1189,13 @@ int virtio_gpu_virgl_init(VirtIOGPU *g) virtio_gpu_3d_cbs.get_egl_display = virgl_get_egl_display; } #endif -#ifdef VIRGL_RENDERER_D3D11_SHARE_TEXTURE if (qemu_egl_angle_native_device) { +#if defined(VIRGL_RENDERER_NATIVE_SHARE_TEXTURE) + flags |= VIRGL_RENDERER_NATIVE_SHARE_TEXTURE; +#elif defined(VIRGL_RENDERER_D3D11_SHARE_TEXTURE) && defined(WIN32) flags |= VIRGL_RENDERER_D3D11_SHARE_TEXTURE; - } #endif + } #if VIRGL_VERSION_MAJOR >= 1 if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { flags |= VIRGL_RENDERER_VENUS | VIRGL_RENDERER_RENDER_SERVER; -- 2.41.0
