[Mesa-dev] [PATCH 01/25] dri_interface: Add new marshalling interfaces to dri_interface.h

Timothy Arceri tarceri at itsqueeze.com
Tue Mar 7 06:21:13 UTC 2017


From: Paul Berry <stereotype441 at gmail.com>

---
 include/GL/internal/dri_interface.h | 39 +++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
index 598d111..f419ec7 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -1651,11 +1651,50 @@ struct __DRIimageLoaderExtensionRec {
 struct __DRIimageDriverExtensionRec {
    __DRIextension               base;
 
    /* Common DRI functions, shared with DRI2 */
    __DRIcreateNewScreen2Func            createNewScreen2;
    __DRIcreateNewDrawableFunc           createNewDrawable;
    __DRIcreateContextAttribsFunc        createContextAttribs;
    __DRIgetAPIMaskFunc                  getAPIMask;
 };
 
+/**
+ * Background callable loader extension.
+ *
+ * Loaders expose this extension to indicate to drivers that they are capable
+ * of handling callbacks from the driver's background drawing threads.
+ */
+#define __DRI_BACKGROUND_CALLABLE "DRI_BackgroundCallable"
+#define __DRI_BACKGROUND_CALLABLE_VERSION 1
+
+typedef struct __DRIbackgroundCallableExtensionRec __DRIbackgroundCallableExtension;
+struct __DRIbackgroundCallableExtensionRec {
+   __DRIextension base;
+
+   /**
+    * Indicate that this thread is being used by the driver as a background
+    * drawing thread which may make callbacks to the loader.
+    *
+    * \param loaderPrivate is the value that was passed to to the driver when
+    * the context was created.  This can be used by the loader to identify
+    * which context any callbacks are associated with.
+    *
+    * If this function is called more than once from any given thread, each
+    * subsequent call overrides the loaderPrivate data that was passed in the
+    * previous call.  The driver can take advantage of this to re-use a
+    * background thread to perform drawing on behalf of multiple contexts.
+    *
+    * It is permissible for the driver to call this function from a
+    * non-background thread (i.e. a thread that has already been bound to a
+    * context using __DRIcoreExtensionRec::bindContext()); when this happens,
+    * the \c loaderPrivate pointer must be equal to the pointer that was
+    * passed to the driver when the currently bound context was created.
+    *
+    * This call should execute quickly enough that the driver can call it with
+    * impunity whenever a background thread starts performing drawing
+    * operations (e.g. it should just set a thread-local variable).
+    */
+   void (*setBackgroundContext)(void *loaderPrivate);
+};
+
 #endif
-- 
2.9.3



More information about the mesa-dev mailing list