summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2014-07-08 15:23:05 +0100
committerDamien Lespiau <damien.lespiau@intel.com>2014-07-11 15:12:21 +0100
commitb2eb48576f2422591fe338e21a46757b2e331985 (patch)
tree4850838261f90b262ec19c7d7a5cda43e8b77ad8 /lib
parent143c3a757521de907889803b011ac2bb308b4e1a (diff)
igt_kms: Add a way to query of the plane supports rotation
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/igt_kms.c7
-rw-r--r--lib/igt_kms.h10
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f50f27f6..850f6e28 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -696,6 +696,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
/* add the planes that can be used with that pipe */
for (j = 0; j < plane_resources->count_planes; j++) {
drmModePlane *drm_plane;
+ uint64_t prop_value;
drm_plane = drmModeGetPlane(display->drm_fd,
plane_resources->planes[j]);
@@ -736,6 +737,12 @@ void igt_display_init(igt_display_t *display, int drm_fd)
plane->pipe = pipe;
plane->drm_plane = drm_plane;
+
+ get_plane_property(display, drm_plane->plane_id,
+ "rotation",
+ &plane->rotation_property,
+ &prop_value);
+ plane->rotation = (igt_rotation_t)prop_value;
}
if (display->has_universal_planes) {
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 07c24183..ef87ee1e 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -148,8 +148,10 @@ typedef struct {
/*< private >*/
igt_pipe_t *pipe;
int index;
+ /* capabilities */
unsigned int is_primary : 1;
unsigned int is_cursor : 1;
+ /* state tracking */
unsigned int fb_changed : 1;
unsigned int position_changed : 1;
unsigned int panning_changed : 1;
@@ -159,6 +161,9 @@ typedef struct {
*/
drmModePlane *drm_plane;
struct igt_fb *fb;
+
+ uint32_t rotation_property;
+
/* position within pipe_src_w x pipe_src_h */
int crtc_x, crtc_y;
/* panning offset within the fb */
@@ -210,6 +215,11 @@ drmModeModeInfo *igt_output_get_mode(igt_output_t *output);
void igt_output_set_pipe(igt_output_t *output, enum pipe pipe);
igt_plane_t *igt_output_get_plane(igt_output_t *output, enum igt_plane plane);
+static inline bool igt_plane_supports_rotation(igt_plane_t *plane)
+{
+ return plane->rotation_property != 0;
+}
+
void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb);
void igt_plane_set_position(igt_plane_t *plane, int x, int y);
void igt_plane_set_panning(igt_plane_t *plane, int x, int y);