Merge branch 'mesa_7_7_branch'
[mesa.git] / src / gallium / include / state_tracker / drm_api.h
index 5790b2f6c7e1c845d9925a4e5ec0328c57d3b1d1..b248a81880866e4e25e6e31713383c06ab5d8a89 100644 (file)
@@ -28,37 +28,49 @@ struct drm_create_screen_arg {
 
 struct drm_api
 {
+        const char *name;
+
+       /**
+        * Kernel driver name, as accepted by drmOpenByName.
+        */
+       const char *driver_name;
+
        /**
         * Special buffer functions
         */
        /*@{*/
-       struct pipe_screen*  (*create_screen)(int drm_fd,
-                                             struct drm_create_screen_arg *arg);
-       struct pipe_context* (*create_context)(struct pipe_screen *screen);
+       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);
        /*@}*/
 
        /**
         * Special buffer functions
         */
        /*@{*/
-       boolean (*buffer_from_texture)(struct pipe_texture *texture,
-                                       struct pipe_buffer **buffer,
-                                       unsigned *stride);
-       struct pipe_buffer* (*buffer_from_handle)(struct pipe_screen *screen,
-                                                  const char *name,
-                                                  unsigned handle);
-       boolean (*handle_from_buffer)(struct pipe_screen *screen,
-                                      struct pipe_buffer *buffer,
-                                      unsigned *handle);
-       boolean (*global_handle_from_buffer)(struct pipe_screen *screen,
-                                             struct pipe_buffer *buffer,
-                                             unsigned *handle);
+       struct pipe_texture*
+           (*texture_from_shared_handle)(struct drm_api *api,
+                                         struct pipe_screen *screen,
+                                         struct pipe_texture *templ,
+                                         const char *name,
+                                         unsigned stride,
+                                         unsigned handle);
+       boolean (*shared_handle_from_texture)(struct drm_api *api,
+                                             struct pipe_screen *screen,
+                                             struct pipe_texture *texture,
+                                             unsigned *stride,
+                                             unsigned *handle);
+       boolean (*local_handle_from_texture)(struct drm_api *api,
+                                            struct pipe_screen *screen,
+                                            struct pipe_texture *texture,
+                                            unsigned *stride,
+                                            unsigned *handle);
        /*@}*/
+
+       void (*destroy)(struct drm_api *api);
 };
 
-/**
- * A driver needs to export this symbol
- */
-extern struct drm_api drm_api_hooks;
+extern struct drm_api * drm_api_create(void);
 
 #endif