drm_api: Operate on textures instead of buffers
[mesa.git] / src / gallium / include / state_tracker / drm_api.h
index 54480fa0477ad9cdf3ad5710c485a324e7ba445f..4d1259e1ee727baf08769746b485c0a5d3d7b649 100644 (file)
@@ -2,32 +2,68 @@
 #ifndef _DRM_API_H_
 #define _DRM_API_H_
 
+#include "pipe/p_compiler.h"
+
 struct pipe_screen;
 struct pipe_winsys;
+struct pipe_buffer;
 struct pipe_context;
+struct pipe_texture;
+
+enum drm_create_screen_mode {
+       DRM_CREATE_NORMAL = 0,
+       DRM_CREATE_DRI1,
+       DRM_CREATE_DRIVER = 1024,
+       DRM_CREATE_MAX
+};
+
+/**
+ * Modes other than DRM_CREATE_NORMAL derive from this struct.
+ */
+/*@{*/
+struct drm_create_screen_arg {
+       enum drm_create_screen_mode mode;
+};
+/*@}*/
 
 struct drm_api
 {
        /**
-        * Special buffer function
+        * Special buffer functions
         */
        /*@{*/
-       struct pipe_screen*  (*create_screen)(int drmFB, int pciID);
-       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 function
+        * Special buffer functions
         */
        /*@{*/
-       struct pipe_buffer* (*buffer_from_handle)(struct pipe_winsys *winsys, const char *name, unsigned handle);
-       unsigned (*handle_from_buffer)(struct pipe_winsys *winsys, struct pipe_buffer *buffer);
+       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_hocks;
+extern struct drm_api * drm_api_create(void);
 
 #endif