diff --git a/0001-virgl-fix-checking-fences.patch b/0001-virgl-fix-checking-fences.patch new file mode 100644 index 0000000..eee5d99 --- /dev/null +++ b/0001-virgl-fix-checking-fences.patch @@ -0,0 +1,53 @@ +From dc81b3ad43dde0815baf957e7cf4c633d6f350f8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 7 Jun 2016 14:54:34 +0200 +Subject: [PATCH] virgl: fix checking fences +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When calling virgl_fence_wait() with timeout=0, +virgl_{drm,vtest}_resource_is_busy() is called. However, it returns TRUE +for a busy resource, whereace virgl_fence_wait() should return TRUE for +a completed (non-busy) resource. + +This fixes running supertuxkart in a VM (I could not reproduce locally +with vtest though there is a similar fix) + +Signed-off-by: Marc-André Lureau +Cc: "11.1 11.2 12.0" +Signed-off-by: Dave Airlie +--- + src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 2 +- + src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +index c77b899..81afa84 100644 +--- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c ++++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +@@ -734,7 +734,7 @@ static bool virgl_fence_wait(struct virgl_winsys *vws, + struct virgl_hw_res *res = virgl_hw_res(fence); + + if (timeout == 0) +- return virgl_drm_resource_is_busy(vdws, res); ++ return !virgl_drm_resource_is_busy(vdws, res); + + if (timeout != PIPE_TIMEOUT_INFINITE) { + int64_t start_time = os_time_get(); +diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c +index 9c9ec04..ce8ac97 100644 +--- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c ++++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c +@@ -544,7 +544,7 @@ static bool virgl_fence_wait(struct virgl_winsys *vws, + struct virgl_hw_res *res = virgl_hw_res(fence); + + if (timeout == 0) +- return virgl_vtest_resource_is_busy(vdws, res); ++ return !virgl_vtest_resource_is_busy(vdws, res); + + if (timeout != PIPE_TIMEOUT_INFINITE) { + int64_t start_time = os_time_get(); +-- +2.5.5 +