Mesa (main): radv: Use vulkan runtime for device lost.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 31 15:40:22 UTC 2021


Module: Mesa
Branch: main
Commit: 1a84dd6358c71c532461bee63d325719a10b4537
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a84dd6358c71c532461bee63d325719a10b4537

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Sun Nov 28 17:59:26 2021 +0100

radv: Use vulkan runtime for device lost.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13974>

---

 src/amd/vulkan/radv_device.c  | 42 +++++++++++++-----------------------------
 src/amd/vulkan/radv_private.h | 14 --------------
 src/amd/vulkan/radv_query.c   |  2 +-
 3 files changed, 14 insertions(+), 44 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 1c124610ea4..20063e0e230 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -2959,22 +2959,6 @@ radv_device_finish_vrs_image(struct radv_device *device)
                      &device->meta_state.alloc);
 }
 
-VkResult
-_radv_device_set_lost(struct radv_device *device, const char *file, int line, const char *msg, ...)
-{
-   VkResult err;
-   va_list ap;
-
-   p_atomic_inc(&device->lost);
-
-   va_start(ap, msg);
-   err =
-      __vk_errorv(device, VK_ERROR_DEVICE_LOST, file, line, msg, ap);
-   va_end(ap);
-
-   return err;
-}
-
 VKAPI_ATTR VkResult VKAPI_CALL
 radv_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
                   const VkAllocationCallbacks *pAllocator, VkDevice *pDevice)
@@ -4858,7 +4842,7 @@ fail:
        * VK_ERROR_DEVICE_LOST to ensure the clients do not attempt
        * to submit the same job again to this device.
        */
-      result = radv_device_set_lost(queue->device, "vkQueueSubmit() failed");
+      result = vk_device_set_lost(&queue->device->vk, "vkQueueSubmit() failed");
    }
 
    radv_free_temp_syncobjs(queue->device, submission->temporary_semaphore_part_count,
@@ -5077,7 +5061,7 @@ radv_QueueSubmit2KHR(VkQueue _queue, uint32_t submitCount, const VkSubmitInfo2KH
    uint32_t fence_idx = 0;
    bool flushed_caches = false;
 
-   if (radv_device_is_lost(queue->device))
+   if (vk_device_is_lost(&queue->device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    if (fence != VK_NULL_HANDLE) {
@@ -5150,7 +5134,7 @@ radv_QueueWaitIdle(VkQueue _queue)
 {
    RADV_FROM_HANDLE(radv_queue, queue, _queue);
 
-   if (radv_device_is_lost(queue->device))
+   if (vk_device_is_lost(&queue->device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    mtx_lock(&queue->pending_mutex);
@@ -5162,10 +5146,10 @@ radv_QueueWaitIdle(VkQueue _queue)
    if (!queue->device->ws->ctx_wait_idle(
           queue->hw_ctx, radv_queue_family_to_ring(queue->vk.queue_family_index),
           queue->vk.index_in_family)) {
-      return radv_device_set_lost(queue->device,
-                                  "Failed to wait for a '%s' queue "
-                                  "to be idle. GPU hang ?",
-                                  radv_get_queue_family_name(queue));
+      return vk_device_set_lost(&queue->device->vk,
+                                "Failed to wait for a '%s' queue "
+                                "to be idle. GPU hang ?",
+                                radv_get_queue_family_name(queue));
    }
 
    return VK_SUCCESS;
@@ -5762,7 +5746,7 @@ radv_QueueBindSparse(VkQueue _queue, uint32_t bindInfoCount, const VkBindSparseI
    RADV_FROM_HANDLE(radv_queue, queue, _queue);
    uint32_t fence_idx = 0;
 
-   if (radv_device_is_lost(queue->device))
+   if (vk_device_is_lost(&queue->device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    if (fence != VK_NULL_HANDLE) {
@@ -5911,7 +5895,7 @@ radv_WaitForFences(VkDevice _device, uint32_t fenceCount, const VkFence *pFences
    RADV_FROM_HANDLE(radv_device, device, _device);
    uint32_t *handles;
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    timeout = radv_get_absolute_timeout(timeout);
@@ -5969,7 +5953,7 @@ radv_GetFenceStatus(VkDevice _device, VkFence _fence)
    struct radv_fence_part *part =
       fence->temporary.kind != RADV_FENCE_NONE ? &fence->temporary : &fence->permanent;
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    bool success = device->ws->wait_syncobj(device->ws, &part->syncobj, 1, true, 0);
@@ -6239,7 +6223,7 @@ radv_GetSemaphoreCounterValue(VkDevice _device, VkSemaphore _semaphore, uint64_t
    RADV_FROM_HANDLE(radv_device, device, _device);
    RADV_FROM_HANDLE(radv_semaphore, semaphore, _semaphore);
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    struct radv_semaphore_part *part = semaphore->temporary.kind != RADV_SEMAPHORE_NONE
@@ -6298,7 +6282,7 @@ radv_WaitSemaphores(VkDevice _device, const VkSemaphoreWaitInfo *pWaitInfo, uint
 {
    RADV_FROM_HANDLE(radv_device, device, _device);
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    uint64_t abs_timeout = radv_get_absolute_timeout(timeout);
@@ -6449,7 +6433,7 @@ radv_GetEventStatus(VkDevice _device, VkEvent _event)
    RADV_FROM_HANDLE(radv_device, device, _device);
    RADV_FROM_HANDLE(radv_event, event, _event);
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    if (*event->map == 1)
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 05ba53434ab..523224cf88f 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -860,9 +860,6 @@ struct radv_device {
    uint64_t allocated_memory_size[VK_MAX_MEMORY_HEAPS];
    mtx_t overallocation_mutex;
 
-   /* Track the number of device loss occurs. */
-   int lost;
-
    /* Whether the user forced VRS rates on GFX10.3+. */
    enum radv_force_vrs force_vrs;
 
@@ -880,17 +877,6 @@ struct radv_device {
    struct radv_shader_prolog *instance_rate_vs_prologs[816];
 };
 
-VkResult _radv_device_set_lost(struct radv_device *device, const char *file, int line,
-                               const char *msg, ...) radv_printflike(4, 5);
-
-#define radv_device_set_lost(dev, ...) _radv_device_set_lost(dev, __FILE__, __LINE__, __VA_ARGS__)
-
-static inline bool
-radv_device_is_lost(const struct radv_device *device)
-{
-   return unlikely(p_atomic_read(&device->lost));
-}
-
 struct radv_device_memory {
    struct vk_object_base base;
    struct radeon_winsys_bo *bo;
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index f2cb8f83f8a..11eeb618fd9 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -976,7 +976,7 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first
    char *data = pData;
    VkResult result = VK_SUCCESS;
 
-   if (radv_device_is_lost(device))
+   if (vk_device_is_lost(&device->vk))
       return VK_ERROR_DEVICE_LOST;
 
    for (unsigned query_idx = 0; query_idx < queryCount; ++query_idx, data += stride) {



More information about the mesa-commit mailing list