Mesa (master): gallium: add pipe_context::set_device_reset_callback

Nicolai Hähnle nh at kemper.freedesktop.org
Wed Oct 5 13:54:09 UTC 2016


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

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Fri Sep 30 12:32:02 2016 +0200

gallium: add pipe_context::set_device_reset_callback

Reviewed-by: Edward O'Callaghan <funfunctor at folklore1984.net>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/docs/source/context.rst  | 15 +++++++++++++++
 src/gallium/include/pipe/p_context.h |  8 ++++++++
 src/gallium/include/pipe/p_state.h   | 19 +++++++++++++++++++
 3 files changed, 42 insertions(+)

diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst
index 13dd606..e190cef 100644
--- a/src/gallium/docs/source/context.rst
+++ b/src/gallium/docs/source/context.rst
@@ -692,3 +692,18 @@ last_level for layers range from first_layer through last_layer.
 It returns TRUE if mipmap generation succeeds, otherwise it
 returns FALSE. Mipmap generation may fail when it is not supported
 for particular texture types or formats.
+
+Device resets
+^^^^^^^^^^^^^
+
+The state tracker can query or request notifications of when the GPU
+is reset for whatever reason (application error, driver error). When
+a GPU reset happens, the context becomes unusable and all related state
+should be considered lost and undefined. Despite that, context
+notifications are single-shot, i.e. subsequent calls to
+``get_device_reset_status`` will return PIPE_NO_RESET.
+
+* ``get_device_reset_status`` queries whether a device reset has happened
+  since the last call or since the last notification by callback.
+* ``set_device_reset_callback`` sets a callback which will be called when
+  a device reset is detected. The callback is only called synchronously.
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index f5841d7..b97aad5 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -47,6 +47,7 @@ struct pipe_clip_state;
 struct pipe_constant_buffer;
 struct pipe_debug_callback;
 struct pipe_depth_stencil_alpha_state;
+struct pipe_device_reset_callback;
 struct pipe_draw_info;
 struct pipe_grid_info;
 struct pipe_fence_handle;
@@ -691,6 +692,13 @@ struct pipe_context {
    enum pipe_reset_status (*get_device_reset_status)(struct pipe_context *ctx);
 
    /**
+    * Sets the reset status callback. If the pointer is null, then no callback
+    * is set, otherwise a copy of the data should be made.
+    */
+   void (*set_device_reset_callback)(struct pipe_context *ctx,
+                                     const struct pipe_device_reset_callback *cb);
+
+   /**
     * Dump driver-specific debug information into a stream. This is
     * used by debugging tools.
     *
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 415ea85..46df196 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -831,6 +831,25 @@ struct pipe_debug_callback
 };
 
 /**
+ * Structure that contains a callback for device reset messages from the driver
+ * back to the state tracker.
+ *
+ * The callback must not be called from driver-created threads.
+ */
+struct pipe_device_reset_callback
+{
+   /**
+    * Callback for the driver to report when a device reset is detected.
+    *
+    * \param data   user-supplied data pointer
+    * \param status PIPE_*_RESET
+    */
+   void (*reset)(void *data, enum pipe_reset_status status);
+
+   void *data;
+};
+
+/**
  * Information about memory usage. All sizes are in kilobytes.
  */
 struct pipe_memory_info




More information about the mesa-commit mailing list