Merge remote branch 'origin/7.8'
[mesa.git] / src / gallium / include / state_tracker / drm_api.h
index 7a38b508fbe3dcb9be5b0e7f06433a86988b07f7..9780cf250b84681c14633360df6db9d0360101b3 100644 (file)
@@ -13,10 +13,37 @@ struct pipe_texture;
 enum drm_create_screen_mode {
        DRM_CREATE_NORMAL = 0,
        DRM_CREATE_DRI1,
+       DRM_CREATE_DRISW,
        DRM_CREATE_DRIVER = 1024,
        DRM_CREATE_MAX
 };
 
+#define DRM_API_HANDLE_TYPE_SHARED 0
+#define DRM_API_HANDLE_TYPE_KMS    1
+
+/**
+ * For use with pipe_screen::{texture_from_handle|texture_get_handle}.
+ */
+struct winsys_handle
+{
+       /**
+        * Unused for texture_from_handle, always
+        * DRM_API_HANDLE_TYPE_SHARED.  Input to texture_get_handle,
+        * use TEXTURE_USAGE to select handle for kms or ipc.
+        */
+       unsigned type;
+       /**
+        * Input to texture_from_handle.
+        * Output for texture_get_handle.
+        */
+       unsigned handle;
+       /**
+        * Input to texture_from_handle.
+        * Output for texture_get_handle.
+        */
+       unsigned stride;
+};
+
 /**
  * Modes other than DRM_CREATE_NORMAL derive from this struct.
  */
@@ -28,39 +55,20 @@ struct drm_create_screen_arg {
 
 struct drm_api
 {
+       void (*destroy)(struct drm_api *api);
+
+        const char *name;
+
        /**
-        * Special buffer functions
+        * Kernel driver name, as accepted by drmOpenByName.
         */
-       /*@{*/
-       struct pipe_screen*  (*create_screen)(struct drm_api *api, int drm_fd,
-                                             struct drm_create_screen_arg *arg);
-       struct pipe_context* (*create_context)(struct drm_api *api,
-                                              struct pipe_screen *screen);
-       /*@}*/
+       const char *driver_name;
 
        /**
-        * Special buffer functions
+        * Create a pipe srcreen.
         */
-       /*@{*/
-       boolean (*buffer_from_texture)(struct drm_api *api,
-                                      struct pipe_texture *texture,
-                                      struct pipe_buffer **buffer,
-                                      unsigned *stride);
-       struct pipe_buffer* (*buffer_from_handle)(struct drm_api *api,
-                                                 struct pipe_screen *screen,
-                                                  const char *name,
-                                                  unsigned handle);
-       boolean (*handle_from_buffer)(struct drm_api *api,
-                                     struct pipe_screen *screen,
-                                     struct pipe_buffer *buffer,
-                                     unsigned *handle);
-       boolean (*global_handle_from_buffer)(struct drm_api *api,
-                                            struct pipe_screen *screen,
-                                            struct pipe_buffer *buffer,
-                                            unsigned *handle);
-       /*@}*/
-
-       void (*destroy)(struct drm_api *api);
+       struct pipe_screen*  (*create_screen)(struct drm_api *api, int drm_fd,
+                                             struct drm_create_screen_arg *arg);
 };
 
 extern struct drm_api * drm_api_create(void);