summaryrefslogtreecommitdiff
path: root/src/drmmode_display.h
diff options
context:
space:
mode:
authorVille Syrjala <syrjala@sci.fi>2011-05-04 23:51:27 +0300
committerAlex Deucher <alexander.deucher@amd.com>2011-08-01 09:53:46 -0400
commitd29bab632e9ecccba518d4107d52620bf75eb1cf (patch)
treef7511225f302dd59b79675888ced783fc2d5770b /src/drmmode_display.h
parent9493563c1ef4b51af0ee8a44cb4e7c5bb280347e (diff)
kms: Move flip_count and co. to a per swap structure
If multiple drawables are doing page flipping, the global drmmode structure can't be used to keep per swap information. For example flip_count can increase prematurely due to another swap request, and then the previous swap request never gets completed, leading to a stuck client. Move the relevant pieces of data to a strucuture that gets allocated once per swap request and shared by all involved CRTCs. Signed-off-by: Ville Syrjala <syrjala@sci.fi>
Diffstat (limited to 'src/drmmode_display.h')
-rw-r--r--src/drmmode_display.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index 548907bb..eb271f5f 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -39,7 +39,6 @@
typedef struct {
int fd;
unsigned fb_id;
- unsigned old_fb_id;
drmModeResPtr mode_res;
drmModeFBPtr mode_fb;
int cpp;
@@ -50,15 +49,20 @@ typedef struct {
InputHandlerProc uevent_handler;
#endif
drmEventContext event_context;
+} drmmode_rec, *drmmode_ptr;
+
+typedef struct {
+ drmmode_ptr drmmode;
+ unsigned old_fb_id;
int flip_count;
void *event_data;
unsigned int fe_frame;
unsigned int fe_tv_sec;
unsigned int fe_tv_usec;
-} drmmode_rec, *drmmode_ptr;
+} drmmode_flipdata_rec, *drmmode_flipdata_ptr;
typedef struct {
- drmmode_ptr drmmode;
+ drmmode_flipdata_ptr flipdata;
Bool dispatch_me;
} drmmode_flipevtcarrier_rec, *drmmode_flipevtcarrier_ptr;