aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-05-05 16:35:09 -0500
committerNicolai Hähnle <[email protected]>2016-05-17 15:28:39 -0500
commitfef08af99c7e83f100a5ae25f2798131c278d841 (patch)
treebc4dc2690d5d8af9eae0b7791b8d3f690ce63ea1 /src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
parent0558564200466878f1a86e7a192d085b551079c4 (diff)
winsys/amdgpu: avoid ioctl call when fence_wait is called without timeout
When user fences are used, we don't need the kernel for polling. Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/winsys/amdgpu/drm/amdgpu_cs.c')
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_cs.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
index 29692cdb035..8a801f087fb 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
@@ -89,10 +89,17 @@ bool amdgpu_fence_wait(struct pipe_fence_handle *fence, uint64_t timeout,
abs_timeout = os_time_get_absolute_timeout(timeout);
user_fence_cpu = rfence->user_fence_cpu_address;
- if (user_fence_cpu && *user_fence_cpu >= rfence->fence.fence) {
- rfence->signalled = true;
- return true;
+ if (user_fence_cpu) {
+ if (*user_fence_cpu >= rfence->fence.fence) {
+ rfence->signalled = true;
+ return true;
+ }
+
+ /* No timeout, just query: no need for the ioctl. */
+ if (!absolute && !timeout)
+ return false;
}
+
/* Now use the libdrm query. */
r = amdgpu_cs_query_fence_status(&rfence->fence,
abs_timeout,