Merge commit 'origin/gallium-winsys-handle-rebased'
[mesa.git] / src / gallium / include / state_tracker / drm_api.h
1
2 #ifndef _DRM_API_H_
3 #define _DRM_API_H_
4
5 #include "pipe/p_compiler.h"
6
7 struct pipe_screen;
8 struct pipe_winsys;
9 struct pipe_buffer;
10 struct pipe_context;
11 struct pipe_texture;
12
13 enum drm_create_screen_mode {
14 DRM_CREATE_NORMAL = 0,
15 DRM_CREATE_DRI1,
16 DRM_CREATE_DRIVER = 1024,
17 DRM_CREATE_MAX
18 };
19
20 #define DRM_API_HANDLE_TYPE_SHARED 0
21 #define DRM_API_HANDLE_TYPE_KMS 1
22
23 /**
24 * For use with pipe_screen::{texture_from_handle|texture_get_handle}.
25 */
26 struct winsys_handle
27 {
28 /**
29 * Unused for texture_from_handle, always DRM_API_HANDLE_TYPE_SHARED.
30 * Input to texture_get_handle, use TEXTURE_USAGE to select handle for kms or ipc.
31 */
32 unsigned type;
33 /**
34 * Input to texture_from_handle.
35 * Output for texture_get_handle.
36 */
37 unsigned handle;
38 /**
39 * Input to texture_from_handle.
40 * Output for texture_get_handle.
41 */
42 unsigned stride;
43 };
44
45 /**
46 * Modes other than DRM_CREATE_NORMAL derive from this struct.
47 */
48 /*@{*/
49 struct drm_create_screen_arg {
50 enum drm_create_screen_mode mode;
51 };
52 /*@}*/
53
54 struct drm_api
55 {
56 void (*destroy)(struct drm_api *api);
57
58 const char *name;
59
60 /**
61 * Kernel driver name, as accepted by drmOpenByName.
62 */
63 const char *driver_name;
64
65 /**
66 * Create a pipe srcreen.
67 */
68 struct pipe_screen* (*create_screen)(struct drm_api *api, int drm_fd,
69 struct drm_create_screen_arg *arg);
70 };
71
72 extern struct drm_api * drm_api_create(void);
73
74 #endif