diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index fb37b455b2d..4747ed941c8 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -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;