commit 134e4da
Michael Forney
·
2013-09-05 23:02:46 +0000 UTC
parent 049c414
drm: Add method to get buffer handle
4 files changed,
+21,
-3
+1,
-0
1@@ -61,6 +61,7 @@ struct drm_drawable
2 {
3 struct wld_drawable base;
4 struct wld_drm_context * drm;
5+ uint32_t handle;
6 };
7
8 _Static_assert(offsetof(struct drm_drawable, base) == 0,
M
drm.c
+7,
-0
1@@ -163,3 +163,10 @@ int wld_drm_export(struct wld_drawable * drawable)
2 return drm_drawable->drm->interface->export(drm_drawable);
3 }
4
5+uint32_t wld_drm_drawable_get_handle(struct wld_drawable * drawable)
6+{
7+ struct drm_drawable * drm_drawable = (void *) drawable;
8+
9+ return drm_drawable->handle;
10+}
11+
M
drm.h
+7,
-0
1@@ -72,5 +72,12 @@ struct wld_drawable * wld_drm_import_gem(struct wld_drm_context * context,
2 */
3 int wld_drm_export(struct wld_drawable * drawable);
4
5+/**
6+ * Get the handle of a DRM drawable.
7+ *
8+ * This can be used with various DRM ioctls.
9+ */
10+uint32_t wld_drm_drawable_get_handle(struct wld_drawable * drawable);
11+
12 #endif
13
M
intel.c
+6,
-3
1@@ -66,9 +66,9 @@ static void intel_flush(struct wld_drawable * drawable);
2 static void intel_destroy(struct wld_drawable * drawable);
3
4 /* DRM implementation */
5+static bool intel_device_supported(uint32_t vendor_id, uint32_t device_id);
6 static struct wld_intel_context * intel_create_context(int drm_fd);
7 static void intel_destroy_context(struct wld_intel_context * context);
8-static bool intel_device_supported(uint32_t vendor_id, uint32_t device_id);
9 static struct drm_drawable * intel_create_drawable
10 (struct wld_intel_context * context, uint32_t width, uint32_t height,
11 uint32_t format);
12@@ -155,6 +155,7 @@ struct drm_drawable * intel_create_drawable
13 intel->bo = drm_intel_bo_alloc_tiled(context->bufmgr, "drawable",
14 width, height, 4, &tiling_mode,
15 &intel->drm.base.pitch, 0);
16+ intel->drm.handle = intel->bo->handle;
17
18 return &intel->drm;
19 }
20@@ -170,9 +171,10 @@ struct drm_drawable * intel_import(struct wld_intel_context * context,
21 if (!(intel = new_drawable(context, width, height)))
22 return NULL;
23
24- intel->drm.base.pitch = pitch;
25 intel->bo = drm_intel_bo_gem_create_from_prime(context->bufmgr,
26 prime_fd, size);
27+ intel->drm.base.pitch = pitch;
28+ intel->drm.handle = intel->bo->handle;
29
30 return &intel->drm;
31 }
32@@ -187,9 +189,10 @@ struct drm_drawable * intel_import_gem(struct wld_intel_context * context,
33 if (!(intel = new_drawable(context, width, height)))
34 return NULL;
35
36- intel->drm.base.pitch = pitch;
37 intel->bo = drm_intel_bo_gem_create_from_name(context->bufmgr, "drawable",
38 gem_name);
39+ intel->drm.base.pitch = pitch;
40+ intel->drm.handle = intel->bo->handle;
41
42 return &intel->drm;
43 }