From e496d24cb2d5339566c08c79a8aa7809c240613c Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Thu, 10 Nov 2022 18:48:29 +0100 Subject: [PATCH] virgl: don't a use staging when a resources created with the shared flag There seems to be a problem with running firefox by using Xwayland that results in a shared resources being not always tagged as using staging. As a result one process tries to map the resource that was allocated as one that uses staging without actually using the staging resource, and hence the mapped range only accounts for the small region that we have to allocated because a zero-allocation doesn't work, but the application mapping the resource assumes that a properly sized range is mapped, and consequently this results in invalid memory access. To work around this issue disable creating staging for resources that are created by using shared binding. It is not clear to me whether this is the best fix, but it seems to quell the issue. Fixes: c9d99b7eec7ec14d6d71d381a424b6280d75a882 virgl: Fix texture transfers by using a staging resource Related: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/291 Part-of: --- src/gallium/drivers/virgl/virgl_resource.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c index 5973663..43f92af 100644 --- a/src/gallium/drivers/virgl/virgl_resource.c +++ b/src/gallium/drivers/virgl/virgl_resource.c @@ -100,6 +100,7 @@ static bool virgl_can_copy_transfer_from_host(struct virgl_screen *vs, { return virgl_can_use_staging(vs, res) && !is_stencil_array(res) && + !(bind & VIRGL_BIND_SHARED) && virgl_has_readback_format(&vs->base, pipe_to_virgl_format(res->b.format), false) && ((!(vs->caps.caps.v2.capability_bits & VIRGL_CAP_HOST_IS_GLES)) || virgl_can_readback_from_rendertarget(vs, res) || -- 2.7.4