Merge branch '7.8'
[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
30 * DRM_API_HANDLE_TYPE_SHARED. Input to texture_get_handle,
31 * use TEXTURE_USAGE to select handle for kms or ipc.
32 */
33 unsigned type;
34 /**
35 * Input to texture_from_handle.
36 * Output for texture_get_handle.
37 */
38 unsigned handle;
39 /**
40 * Input to texture_from_handle.
41 * Output for texture_get_handle.
42 */
43 unsigned stride;
44 };
45
46 /**
47 * Modes other than DRM_CREATE_NORMAL derive from this struct.
48 */
49 /*@{*/
50 struct drm_create_screen_arg {
51 enum drm_create_screen_mode mode;
52 };
53 /*@}*/
54
55 struct drm_api
56 {
57 void (*destroy)(struct drm_api *api);
58
59 const char *name;
60
61 /**
62 * Kernel driver name, as accepted by drmOpenByName.
63 */
64 const char *driver_name;
65
66 /**
67 * Create a pipe srcreen.
68 */
69 struct pipe_screen* (*create_screen)(struct drm_api *api, int drm_fd,
70 struct drm_create_screen_arg *arg);
71 };
72
73 extern struct drm_api * drm_api_create(void);
74
75 #endif