summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/xa/xa_tracker.h
diff options
context:
space:
mode:
authorRob Clark <robclark@freedesktop.org>2015-09-02 23:13:33 -0700
committerThomas Hellstrom <thellstrom@vmware.com>2015-09-07 01:25:08 -0700
commit1432a182414352e853bfdad997591598e621fd73 (patch)
treea619a9cd193f98f23385bc15b4caedb56338ccf3 /src/gallium/state_trackers/xa/xa_tracker.h
parent00c568f679413ee627421d5724beb85be3da55c1 (diff)
downloadexternal_mesa3d-1432a182414352e853bfdad997591598e621fd73.zip
external_mesa3d-1432a182414352e853bfdad997591598e621fd73.tar.gz
external_mesa3d-1432a182414352e853bfdad997591598e621fd73.tar.bz2
xa: add xa_surface_from_handle2 v2
Like xa_surface_from_handle(), but takes a handle type, rather than hard-coding 'shared' handle. This is needed to fix bugs seen with xf86-video-freedreno with xrandr rotation, for example. The root issue is that doing a GEM_OPEN ioctl on a bo that already has a GEM handle associated with the drm_file will result in two unique handles for the same bo. Which causes all sorts of follow-on fail. v2: - Add support for for fd handles. - Avoid duplicating code. - Bump xa version minor. Signed-off-by: Rob Clark <robclark@freedesktop.org> Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'src/gallium/state_trackers/xa/xa_tracker.h')
-rw-r--r--src/gallium/state_trackers/xa/xa_tracker.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h
index 5c6435e..44b3eb5 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h
+++ b/src/gallium/state_trackers/xa/xa_tracker.h
@@ -37,7 +37,7 @@
#include <stdint.h>
#define XA_TRACKER_VERSION_MAJOR 2
-#define XA_TRACKER_VERSION_MINOR 2
+#define XA_TRACKER_VERSION_MINOR 3
#define XA_TRACKER_VERSION_PATCH 0
#define XA_FLAG_SHARED (1 << 0)
@@ -149,6 +149,7 @@ struct xa_box {
enum xa_handle_type {
xa_handle_type_shared,
xa_handle_type_kms,
+ xa_handle_type_fd,
};
extern void xa_tracker_version(int *major, int *minor, int *patch);
@@ -177,6 +178,17 @@ extern struct xa_surface * xa_surface_from_handle(struct xa_tracker *xa,
enum xa_formats pform,
unsigned int flags,
uint32_t handle, uint32_t stride);
+extern struct xa_surface *
+xa_surface_from_handle2(struct xa_tracker *xa,
+ int width,
+ int height,
+ int depth,
+ enum xa_surface_type stype,
+ enum xa_formats xa_format,
+ unsigned int flags,
+ enum xa_handle_type type,
+ uint32_t handle,
+ uint32_t stride);
enum xa_formats xa_surface_format(const struct xa_surface *srf);