1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "state_tracker/drm_driver.h"
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm_winsys.h"
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h"
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm.h"
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char *i915_drm_type_to_name(enum i915_winsys_buffer_type type)
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   char *name;
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (type == I915_NEW_TEXTURE) {
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      name = "gallium3d_texture";
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } else if (type == I915_NEW_VERTEX) {
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      name = "gallium3d_vertex";
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } else if (type == I915_NEW_SCANOUT) {
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      name = "gallium3d_scanout";
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } else {
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      assert(0);
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      name = "gallium3d_unknown";
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return name;
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer *
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_create(struct i915_winsys *iws,
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        unsigned size,
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        enum i915_winsys_buffer_type type)
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf)
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->magic = 0xDEAD1337;
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flinked = FALSE;
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flink = 0;
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->bo = drm_intel_bo_alloc(idws->gem_manager,
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                i915_drm_type_to_name(type), size, 0);
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf->bo)
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto err;
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return (struct i915_winsys_buffer *)buf;
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr:
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(0);
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FREE(buf);
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return NULL;
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer *
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_create_tiled(struct i915_winsys *iws,
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             unsigned *stride, unsigned height,
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             enum i915_winsys_buffer_tile *tiling,
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             enum i915_winsys_buffer_type type)
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned long pitch = 0;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t tiling_mode = *tiling;
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf)
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->magic = 0xDEAD1337;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flinked = FALSE;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flink = 0;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->bo = drm_intel_bo_alloc_tiled(idws->gem_manager,
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      i915_drm_type_to_name(type),
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		   		      *stride, height, 1,
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      &tiling_mode, &pitch, 0);
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf->bo)
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto err;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *stride = pitch;
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *tiling = tiling_mode;
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return (struct i915_winsys_buffer *)buf;
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr:
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(0);
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FREE(buf);
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return NULL;
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer *
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_from_handle(struct i915_winsys *iws,
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct winsys_handle *whandle,
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            enum i915_winsys_buffer_tile *tiling,
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned *stride)
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer);
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t tile = 0, swizzle = 0;
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf)
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->magic = 0xDEAD1337;
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->bo = drm_intel_bo_gem_create_from_name(idws->gem_manager, "gallium3d_from_handle", whandle->handle);
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flinked = TRUE;
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->flink = whandle->handle;
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!buf->bo)
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto err;
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   drm_intel_bo_get_tiling(buf->bo, &tile, &swizzle);
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *stride = whandle->stride;
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *tiling = tile;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return (struct i915_winsys_buffer *)buf;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr:
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FREE(buf);
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return NULL;
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_get_handle(struct i915_winsys *iws,
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct i915_winsys_buffer *buffer,
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct winsys_handle *whandle,
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned stride)
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) {
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (!buf->flinked) {
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (drm_intel_bo_flink(buf->bo, &buf->flink))
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return FALSE;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         buf->flinked = TRUE;
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      whandle->handle = buf->flink;
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) {
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      whandle->handle = buf->bo->handle;
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   } else {
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      assert(!"unknown usage");
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return FALSE;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   whandle->stride = stride;
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return TRUE;
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void *
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_map(struct i915_winsys *iws,
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     struct i915_winsys_buffer *buffer,
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     boolean write)
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   drm_intel_bo *bo = intel_bo(buffer);
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int ret = 0;
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(bo);
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (buf->map_count)
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      goto out;
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ret = drm_intel_gem_bo_map_gtt(bo);
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->ptr = bo->virtual;
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(ret == 0);
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgout:
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (ret)
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return NULL;
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   buf->map_count++;
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return buf->ptr;
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_unmap(struct i915_winsys *iws,
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       struct i915_winsys_buffer *buffer)
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (--buf->map_count)
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return;
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   drm_intel_gem_bo_unmap_gtt(intel_bo(buffer));
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_write(struct i915_winsys *iws,
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       struct i915_winsys_buffer *buffer,
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       size_t offset,
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       size_t size,
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       const void *data)
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return drm_intel_bo_subdata(buf->bo, offset, size, (void*)data);
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_destroy(struct i915_winsys *iws,
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         struct i915_winsys_buffer *buffer)
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   drm_intel_bo_unreference(intel_bo(buffer));
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   i915_drm_buffer(buffer)->magic = 0;
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   i915_drm_buffer(buffer)->bo = NULL;
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   FREE(buffer);
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_is_busy(struct i915_winsys *iws,
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        struct i915_winsys_buffer *buffer)
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct i915_drm_buffer* i915_buffer = i915_drm_buffer(buffer);
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!i915_buffer)
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return FALSE;
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return drm_intel_bo_busy(i915_buffer->bo);
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws)
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_create = i915_drm_buffer_create;
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_create_tiled = i915_drm_buffer_create_tiled;
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_from_handle = i915_drm_buffer_from_handle;
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_get_handle = i915_drm_buffer_get_handle;
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_map = i915_drm_buffer_map;
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_unmap = i915_drm_buffer_unmap;
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_write = i915_drm_buffer_write;
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_destroy = i915_drm_buffer_destroy;
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   idws->base.buffer_is_busy = i915_drm_buffer_is_busy;
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
240