[Mesa-dev] [RFC 2/7] xa: add handle type parameter to get handle

Rob Clark robdclark at gmail.com
Tue May 28 07:13:27 PDT 2013


From: Jerome Glisse <jglisse at redhat.com>

Allow to retrieve non shared handle.

Signed-off-by: Jerome Glisse <jglisse at redhat.com>
---
 src/gallium/state_trackers/xa/xa_tracker.c | 11 ++++++++++-
 src/gallium/state_trackers/xa/xa_tracker.h |  9 ++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
index b49f0d9..945ed36 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.c
+++ b/src/gallium/state_trackers/xa/xa_tracker.c
@@ -468,6 +468,7 @@ xa_tracker_version(int *major, int *minor, int *patch)
 
 XA_EXPORT int
 xa_surface_handle(struct xa_surface *srf,
+		  enum xa_handle_type type,
 		  uint32_t * handle, unsigned int *stride)
 {
     struct winsys_handle whandle;
@@ -476,7 +477,15 @@ xa_surface_handle(struct xa_surface *srf,
     boolean res;
 
     memset(&whandle, 0, sizeof(whandle));
-    whandle.type = DRM_API_HANDLE_TYPE_SHARED;
+    switch (type) {
+    case xa_handle_type_kms:
+	whandle.type = DRM_API_HANDLE_TYPE_KMS;
+	break;
+    case xa_handle_type_shared:
+    default:
+	whandle.type = DRM_API_HANDLE_TYPE_SHARED;
+	break;
+    }
     res = screen->resource_get_handle(screen, srf->tex, &whandle);
     if (!res)
 	return -XA_ERR_INVAL;
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h
index 1348621..4d2452e 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h
+++ b/src/gallium/state_trackers/xa/xa_tracker.h
@@ -142,6 +142,11 @@ struct xa_box {
     uint16_t x1, y1, x2, y2;
 };
 
+enum xa_handle_type {
+    xa_handle_type_shared,
+    xa_handle_type_kms,
+};
+
 extern void xa_tracker_version(int *major, int *minor, int *patch);
 
 extern struct xa_tracker *xa_tracker_create(int drm_fd);
@@ -183,6 +188,8 @@ extern int xa_surface_redefine(struct xa_surface *srf,
 			       int copy_contents);
 
 extern int xa_surface_handle(struct xa_surface *srf,
-			     uint32_t * handle, unsigned int *byte_stride);
+			     enum xa_handle_type type,
+			     uint32_t * handle,
+			     unsigned int *byte_stride);
 
 #endif
-- 
1.8.1.4



More information about the mesa-dev mailing list