2019-08-21 22:07:37 +02:00
|
|
|
#ifndef PRIVATE_H
|
|
|
|
#define PRIVATE_H
|
|
|
|
|
2019-10-07 08:47:53 +02:00
|
|
|
#include <libliftoff.h>
|
2019-08-21 22:07:37 +02:00
|
|
|
#include "list.h"
|
2019-10-07 08:47:53 +02:00
|
|
|
#include "log.h"
|
2019-08-21 22:07:37 +02:00
|
|
|
|
2019-11-15 21:43:44 +01:00
|
|
|
/* Layer priority is assigned depending on the number of updates during a
|
|
|
|
* given number of page-flips */
|
|
|
|
#define LIFTOFF_PRIORITY_PERIOD 60
|
|
|
|
|
2019-11-24 12:59:10 +01:00
|
|
|
struct liftoff_device {
|
2019-08-21 22:07:37 +02:00
|
|
|
int drm_fd;
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_list planes; /* liftoff_plane.link */
|
|
|
|
struct liftoff_list outputs; /* liftoff_output.link */
|
2019-09-08 16:41:25 +02:00
|
|
|
|
|
|
|
uint32_t *crtcs;
|
|
|
|
size_t crtcs_len;
|
2019-11-15 21:43:44 +01:00
|
|
|
|
|
|
|
int page_flip_counter;
|
2019-08-21 22:07:37 +02:00
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_output {
|
2019-11-24 12:59:10 +01:00
|
|
|
struct liftoff_device *device;
|
2019-08-21 22:07:37 +02:00
|
|
|
uint32_t crtc_id;
|
2019-09-08 16:41:25 +02:00
|
|
|
size_t crtc_index;
|
2019-11-24 12:59:10 +01:00
|
|
|
struct liftoff_list link; /* liftoff_device.outputs */
|
2019-08-21 22:07:37 +02:00
|
|
|
|
2019-09-30 20:22:01 +02:00
|
|
|
struct liftoff_layer *composition_layer;
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_list layers; /* liftoff_layer.link */
|
2019-12-12 23:22:18 +01:00
|
|
|
/* layer added or removed, or composition layer changed */
|
|
|
|
bool layers_changed;
|
2019-08-21 22:07:37 +02:00
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_layer {
|
|
|
|
struct liftoff_output *output;
|
|
|
|
struct liftoff_list link; /* liftoff_output.layers */
|
2019-08-21 22:07:37 +02:00
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_layer_property *props;
|
2019-08-21 22:07:37 +02:00
|
|
|
size_t props_len;
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_plane *plane;
|
2019-11-15 21:43:44 +01:00
|
|
|
|
|
|
|
int current_priority, pending_priority;
|
2019-08-21 22:07:37 +02:00
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_layer_property {
|
2019-08-21 22:07:37 +02:00
|
|
|
char name[DRM_PROP_NAME_LEN];
|
|
|
|
uint64_t value;
|
2019-10-13 17:28:45 +02:00
|
|
|
bool changed;
|
2019-08-21 22:07:37 +02:00
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_plane {
|
2019-08-21 22:07:37 +02:00
|
|
|
uint32_t id;
|
|
|
|
uint32_t possible_crtcs;
|
2019-09-09 19:55:43 +02:00
|
|
|
uint32_t type;
|
2019-09-08 17:33:09 +02:00
|
|
|
int zpos; /* greater values mean closer to the eye */
|
2019-08-21 22:07:37 +02:00
|
|
|
/* TODO: formats */
|
2019-11-24 12:59:10 +01:00
|
|
|
struct liftoff_list link; /* liftoff_device.planes */
|
2019-08-21 22:07:37 +02:00
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_plane_property *props;
|
2019-08-21 22:07:37 +02:00
|
|
|
size_t props_len;
|
2019-08-23 17:48:13 +02:00
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_layer *layer;
|
2019-08-21 22:07:37 +02:00
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_plane_property {
|
2019-08-21 22:07:37 +02:00
|
|
|
char name[DRM_PROP_NAME_LEN];
|
|
|
|
uint32_t id;
|
|
|
|
};
|
|
|
|
|
2019-09-15 16:00:48 +02:00
|
|
|
struct liftoff_rect {
|
|
|
|
int x, y;
|
|
|
|
int width, height;
|
|
|
|
};
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
struct liftoff_layer_property *layer_get_property(struct liftoff_layer *layer,
|
|
|
|
const char *name);
|
2019-09-15 16:00:48 +02:00
|
|
|
void layer_get_rect(struct liftoff_layer *layer, struct liftoff_rect *rect);
|
|
|
|
bool layer_intersects(struct liftoff_layer *a, struct liftoff_layer *b);
|
2019-10-13 17:28:45 +02:00
|
|
|
void layer_mark_clean(struct liftoff_layer *layer);
|
2019-11-15 21:43:44 +01:00
|
|
|
void layer_update_priority(struct liftoff_layer *layer, bool make_current);
|
2019-09-12 10:10:03 +02:00
|
|
|
|
2019-11-24 12:59:10 +01:00
|
|
|
struct liftoff_plane *plane_create(struct liftoff_device *device, uint32_t id);
|
2019-10-11 16:09:35 +02:00
|
|
|
void plane_destroy(struct liftoff_plane *plane);
|
2019-10-19 12:43:09 +02:00
|
|
|
struct liftoff_plane_property *plane_get_property(struct liftoff_plane *plane,
|
|
|
|
const char *name);
|
|
|
|
bool plane_apply(struct liftoff_plane *plane, struct liftoff_layer *layer,
|
|
|
|
drmModeAtomicReq *req, bool *compatible);
|
2019-10-11 16:09:35 +02:00
|
|
|
|
2019-08-21 22:07:37 +02:00
|
|
|
#endif
|