summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2019-06-06 10:55:59 -0700
committerChia-I Wu <[email protected]>2019-06-11 10:03:54 -0700
commit15323c14fd9cacfa157bbfc16355e695f2e0bf9f (patch)
tree5d18d6085314c9884281822e5c16062a1f78dd98 /src/gallium
parent9e4452cfd9cdad9cded9f75cca63036236b8b178 (diff)
virgl: consider newly created resources idle
A newly created resource can be regarded as idle. We don't care if the RESOURCE_CREATE command has been retired, unless it is used for fencing. Signed-off-by: Chia-I Wu <[email protected]> Reviewed-by: Alexandros Frantzis <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/winsys/virgl/drm/virgl_drm_winsys.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
index 4110901e283..6f215b5ecdb 100644
--- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
+++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
@@ -194,7 +194,8 @@ virgl_drm_winsys_resource_create(struct virgl_winsys *qws,
uint32_t array_size,
uint32_t last_level,
uint32_t nr_samples,
- uint32_t size)
+ uint32_t size,
+ bool for_fencing)
{
struct virgl_drm_winsys *qdws = virgl_drm_winsys(qws);
struct drm_virtgpu_resource_create createcmd;
@@ -236,10 +237,11 @@ virgl_drm_winsys_resource_create(struct virgl_winsys *qws,
p_atomic_set(&res->external, false);
p_atomic_set(&res->num_cs_references, 0);
- /* A newly created resource is consdiered busy by the kernel until the
- * command is retired.
+ /* A newly created resource is considered busy by the kernel until the
+ * command is retired. But for our purposes, we can consider it idle
+ * unless it is used for fencing.
*/
- p_atomic_set(&res->maybe_busy, true);
+ p_atomic_set(&res->maybe_busy, for_fencing);
return res;
}
@@ -394,7 +396,7 @@ virgl_drm_winsys_resource_cache_create(struct virgl_winsys *qws,
alloc:
res = virgl_drm_winsys_resource_create(qws, target, format, bind,
width, height, depth, array_size,
- last_level, nr_samples, size);
+ last_level, nr_samples, size, false);
return res;
}
@@ -798,7 +800,7 @@ virgl_drm_fence_create_legacy(struct virgl_winsys *vws)
* the fence status on the resource creation busy status.
*/
fence->hw_res = virgl_drm_winsys_resource_create(vws, PIPE_BUFFER,
- PIPE_FORMAT_R8_UNORM, VIRGL_BIND_CUSTOM, 8, 1, 1, 0, 0, 0, 8);
+ PIPE_FORMAT_R8_UNORM, VIRGL_BIND_CUSTOM, 8, 1, 1, 0, 0, 0, 8, true);
if (!fence->hw_res) {
FREE(fence);
return NULL;