lavapipe: enforce monotonic timeline incrementing

maybe just being overly paranoid, but make sure that the timeline id
gets compared while the lock is held in every scenario

cc: mesa-stable

Reviewed-by: Omar Akkila <omar.akkila@collabora.com>

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15453>
This commit is contained in:
Mike Blumenkrantz
2022-03-22 16:25:11 -04:00
committed by Marge Bot
parent 7aed40e4ab
commit 5461a1cbaa
+6 -3
View File
@@ -1877,7 +1877,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_QueueWaitIdle(
uint64_t timeline = queue->last_fence_timeline;
if (fence_finish(queue->device, queue->last_fence, PIPE_TIMEOUT_INFINITE)) {
queue->device->pscreen->fence_reference(queue->device->pscreen, &queue->device->queue.last_fence, NULL);
queue->last_finished = timeline;
if (timeline > queue->last_finished)
queue->last_finished = timeline;
}
simple_mtx_unlock(&queue->last_lock);
return VK_SUCCESS;
@@ -2433,7 +2434,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_GetFenceStatus(
simple_mtx_lock(&device->queue.last_lock);
if (fence->handle == device->queue.last_fence) {
device->pscreen->fence_reference(device->pscreen, &device->queue.last_fence, NULL);
device->queue.last_finished = fence->timeline;
if (fence->timeline > device->queue.last_finished)
device->queue.last_finished = fence->timeline;
}
simple_mtx_unlock(&device->queue.last_lock);
return VK_SUCCESS;
@@ -2492,7 +2494,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_WaitForFences(
simple_mtx_lock(&device->queue.last_lock);
if (fence->handle == device->queue.last_fence) {
device->pscreen->fence_reference(device->pscreen, &device->queue.last_fence, NULL);
device->queue.last_finished = fence->timeline;
if (fence->timeline > device->queue.last_finished)
device->queue.last_finished = fence->timeline;
}
simple_mtx_unlock(&device->queue.last_lock);
fence->signalled = true;