summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/vulkan/anv_device.c5
-rw-r--r--src/intel/vulkan/anv_private.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 2a2a470ec99..193db01b920 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -929,6 +929,7 @@ anv_device_submit_simple_batch(struct anv_device *device,
ret = anv_gem_wait(device, bo.gem_handle, &timeout);
if (ret != 0) {
/* We don't know the real error. */
+ device->lost = true;
result = vk_errorf(VK_ERROR_DEVICE_LOST, "execbuf2 failed: %m");
goto fail;
}
@@ -973,6 +974,7 @@ VkResult anv_CreateDevice(
device->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
device->instance = physical_device->instance;
device->chipset_id = physical_device->chipset_id;
+ device->lost = false;
if (pAllocator)
device->alloc = *pAllocator;
@@ -1250,6 +1252,7 @@ anv_device_execbuf(struct anv_device *device,
int ret = anv_gem_execbuffer(device, execbuf);
if (ret != 0) {
/* We don't know the real error. */
+ device->lost = true;
return vk_errorf(VK_ERROR_DEVICE_LOST, "execbuf2 failed: %m");
}
@@ -1339,6 +1342,7 @@ out:
* submit the same job again to this device.
*/
result = VK_ERROR_DEVICE_LOST;
+ device->lost = true;
/* If we return VK_ERROR_DEVICE LOST here, we need to ensure that
* vkWaitForFences() and vkGetFenceStatus() return a valid result
@@ -1865,6 +1869,7 @@ VkResult anv_WaitForFences(
return VK_TIMEOUT;
} else if (ret == -1) {
/* We don't know the real error. */
+ device->lost = true;
return vk_errorf(VK_ERROR_DEVICE_LOST, "gem wait failed: %m");
} else {
fence->state = ANV_FENCE_STATE_SIGNALED;
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index fd82ce92df6..68f7359d71d 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -619,6 +619,7 @@ struct anv_device {
pthread_mutex_t mutex;
pthread_cond_t queue_submit;
+ bool lost;
};
static void inline