vulkan/wsi_common_display: Return SURFACE_LOST for fatal DRM errors
authorKeith Packard <keithp@keithp.com>
Tue, 26 Jun 2018 23:01:45 +0000 (16:01 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 27 Jun 2018 17:02:18 +0000 (10:02 -0700)
Instead of encouraging the client to re-create the swapchain and keep
going with an OUT_OF_DATE error, tell the client that further use of
the current surface will not succeed as the associated kernel objects
are no longer valid.

In particular, when a DRM lease is revoked, then the client needs to
get another lease and create a new surface for that.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/vulkan/wsi/wsi_common_display.c

index c36b87c..4a2d88f 100644 (file)
@@ -1092,7 +1092,7 @@ wsi_display_acquire_next_image(struct wsi_swapchain *drv_chain,
       ret = wsi_display_wait_for_event(wsi, timeout);
 
       if (ret && ret != ETIMEDOUT) {
-         result = VK_ERROR_OUT_OF_DATE_KHR;
+         result = VK_ERROR_SURFACE_LOST_KHR;
          goto done;
       }
    }
@@ -1200,7 +1200,7 @@ wsi_display_setup_connector(wsi_display_connector *connector,
       if (errno == ENOMEM)
          result = VK_ERROR_OUT_OF_HOST_MEMORY;
       else
-         result = VK_ERROR_OUT_OF_DATE_KHR;
+         result = VK_ERROR_SURFACE_LOST_KHR;
       goto bail;
    }
 
@@ -1211,7 +1211,7 @@ wsi_display_setup_connector(wsi_display_connector *connector,
       if (errno == ENOMEM)
          result = VK_ERROR_OUT_OF_HOST_MEMORY;
       else
-         result = VK_ERROR_OUT_OF_DATE_KHR;
+         result = VK_ERROR_SURFACE_LOST_KHR;
       goto bail_mode_res;
    }
 
@@ -1220,7 +1220,7 @@ wsi_display_setup_connector(wsi_display_connector *connector,
       connector->crtc_id = wsi_display_select_crtc(connector,
                                                    mode_res, drm_connector);
       if (!connector->crtc_id) {
-         result = VK_ERROR_OUT_OF_DATE_KHR;
+         result = VK_ERROR_SURFACE_LOST_KHR;
          goto bail_connector;
       }
    }
@@ -1238,7 +1238,7 @@ wsi_display_setup_connector(wsi_display_connector *connector,
       }
 
       if (!drm_mode) {
-         result = VK_ERROR_OUT_OF_DATE_KHR;
+         result = VK_ERROR_SURFACE_LOST_KHR;
          goto bail_connector;
       }
 
@@ -1425,7 +1425,7 @@ _wsi_display_queue_next(struct wsi_swapchain *drv_chain)
    wsi_display_connector *connector = display_mode->connector;
 
    if (wsi->fd < 0)
-      return VK_ERROR_OUT_OF_DATE_KHR;
+      return VK_ERROR_SURFACE_LOST_KHR;
 
    if (display_mode != connector->current_mode)
       connector->active = false;
@@ -1497,7 +1497,7 @@ _wsi_display_queue_next(struct wsi_swapchain *drv_chain)
       if (ret != -EACCES) {
          connector->active = false;
          image->state = WSI_IMAGE_IDLE;
-         return VK_ERROR_OUT_OF_DATE_KHR;
+         return VK_ERROR_SURFACE_LOST_KHR;
       }
 
       /* Some other VT is currently active. Sit here waiting for