Merge branch 'mesa_7_5_branch'
[mesa.git] / src / gallium / winsys / drm / intel / gem / intel_be_device.h
1
2 #ifndef INTEL_DRM_DEVICE_H
3 #define INTEL_DRM_DEVICE_H
4
5 #include "pipe/internal/p_winsys_screen.h"
6 #include "pipe/p_context.h"
7
8 #include "drm.h"
9 #include "intel_bufmgr.h"
10
11 struct drm_api;
12
13 /*
14 * Device
15 */
16
17 struct intel_be_device
18 {
19 struct pipe_winsys base;
20
21 boolean softpipe;
22
23 int fd; /**< Drm file discriptor */
24
25 unsigned id;
26
27 size_t max_batch_size;
28 size_t max_vertex_size;
29
30 struct {
31 drm_intel_bufmgr *gem;
32 } pools;
33 };
34
35 static INLINE struct intel_be_device *
36 intel_be_device(struct pipe_winsys *winsys)
37 {
38 return (struct intel_be_device *)winsys;
39 }
40
41 boolean
42 intel_be_init_device(struct intel_be_device *device, int fd, unsigned id);
43
44 /*
45 * Buffer
46 */
47
48 struct intel_be_buffer {
49 struct pipe_buffer base;
50 drm_intel_bo *bo;
51 boolean flinked;
52 unsigned flink;
53 };
54
55 /*
56 * Wrapper for driver get_texture_buffer functions.
57 */
58 boolean
59 intel_be_get_texture_buffer(struct drm_api *api,
60 struct pipe_texture *texture,
61 struct pipe_buffer **buffer,
62 unsigned *stride);
63
64 /**
65 * Create a be buffer from a drm bo handle.
66 *
67 * Takes a reference.
68 */
69 struct pipe_buffer *
70 intel_be_buffer_from_handle(struct drm_api *api,
71 struct pipe_screen *screen,
72 const char* name, unsigned handle);
73
74 /**
75 * Gets a handle from a buffer.
76 *
77 * If buffer is destroyed handle may become invalid.
78 */
79 boolean
80 intel_be_handle_from_buffer(struct drm_api *api,
81 struct pipe_screen *screen,
82 struct pipe_buffer *buffer,
83 unsigned *handle);
84
85 /**
86 * Gets the global handle from a buffer.
87 *
88 * If buffer is destroyed handle may become invalid.
89 */
90 boolean
91 intel_be_global_handle_from_buffer(struct drm_api *api,
92 struct pipe_screen *screen,
93 struct pipe_buffer *buffer,
94 unsigned *handle);
95
96 static INLINE struct intel_be_buffer *
97 intel_be_buffer(struct pipe_buffer *buf)
98 {
99 return (struct intel_be_buffer *)buf;
100 }
101
102 static INLINE drm_intel_bo *
103 intel_bo(struct pipe_buffer *buf)
104 {
105 return intel_be_buffer(buf)->bo;
106 }
107
108 #endif