From da1a7c04bcfde3350f6b2842c2e976ee0635945b Mon Sep 17 00:00:00 2001 From: Jeremy Gebben Date: Tue, 25 Jun 2024 15:50:35 -0600 Subject: [PATCH] radv: Return hang status from radv_check_gpu_hangs() Return VK_ERROR_DEVICE_LOST if a hang is detected. This is necessary because the application needs to know if it should call vkGetDeviceFaultInfoEXT(). Part-of: --- src/amd/vulkan/radv_debug.c | 5 +++-- src/amd/vulkan/radv_debug.h | 2 +- src/amd/vulkan/radv_queue.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c index f4b2b34922e..f0dbb5b75c1 100644 --- a/src/amd/vulkan/radv_debug.c +++ b/src/amd/vulkan/radv_debug.c @@ -706,7 +706,7 @@ enum radv_device_fault_chunk { RADV_DEVICE_FAULT_CHUNK_COUNT, }; -void +VkResult radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_info *submit_info) { enum amd_ip_type ring; @@ -715,7 +715,7 @@ radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_i bool hang_occurred = radv_gpu_hang_occurred(queue, ring); if (!hang_occurred) - return; + return VK_SUCCESS; fprintf(stderr, "radv: GPU hang detected...\n"); @@ -849,6 +849,7 @@ radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_i } #endif + return VK_ERROR_DEVICE_LOST; } void diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index ac531c6d7fc..ea10b7cf5a1 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -85,7 +85,7 @@ enum { bool radv_init_trace(struct radv_device *device); void radv_finish_trace(struct radv_device *device); -void radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_info *submit_info); +VkResult radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_info *submit_info); void radv_print_spirv(const char *data, uint32_t size, FILE *fp); diff --git a/src/amd/vulkan/radv_queue.c b/src/amd/vulkan/radv_queue.c index 876afd7dad9..7a441d6eaec 100644 --- a/src/amd/vulkan/radv_queue.c +++ b/src/amd/vulkan/radv_queue.c @@ -2162,7 +2162,7 @@ radv_queue_submit_normal(struct radv_queue *queue, struct vk_queue_submit *submi goto fail; if (radv_device_fault_detection_enabled(device)) { - radv_check_gpu_hangs(queue, &submit); + result = radv_check_gpu_hangs(queue, &submit); } if (device->tma_bo) {