mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 03:22:04 +00:00
backends/native: Don't set discarded framebuffer as current
When a swap failed with EACCES (possibly due to VT switching), don't mark the framebuffer as 'in use', so that it'll be cleaned up properly and not set as current. https://bugzilla.gnome.org/show_bug.cgi?id=773629
This commit is contained in:
parent
68d690225a
commit
ad784501a6
@ -1546,7 +1546,7 @@ get_crtc_connectors (MetaMonitorManager *manager,
|
||||
*connectors = (uint32_t *) g_array_free (connectors_array, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
gboolean
|
||||
meta_monitor_manager_kms_apply_crtc_mode (MetaMonitorManagerKms *manager_kms,
|
||||
MetaCRTC *crtc,
|
||||
int x,
|
||||
@ -1571,9 +1571,14 @@ meta_monitor_manager_kms_apply_crtc_mode (MetaMonitorManagerKms *manager_kms,
|
||||
x, y,
|
||||
connectors, n_connectors,
|
||||
mode) != 0)
|
||||
g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name);
|
||||
{
|
||||
g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_free (connectors);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1622,7 +1627,8 @@ meta_monitor_manager_kms_flip_crtc (MetaMonitorManagerKms *manager_kms,
|
||||
int x,
|
||||
int y,
|
||||
uint32_t fb_id,
|
||||
GClosure *flip_closure)
|
||||
GClosure *flip_closure,
|
||||
gboolean *fb_in_use)
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
|
||||
uint32_t *connectors;
|
||||
@ -1649,14 +1655,21 @@ meta_monitor_manager_kms_flip_crtc (MetaMonitorManagerKms *manager_kms,
|
||||
}
|
||||
|
||||
if (manager_kms->page_flips_not_supported)
|
||||
meta_monitor_manager_kms_apply_crtc_mode (manager_kms,
|
||||
crtc,
|
||||
x, y,
|
||||
fb_id);
|
||||
{
|
||||
if (meta_monitor_manager_kms_apply_crtc_mode (manager_kms,
|
||||
crtc,
|
||||
x, y,
|
||||
fb_id))
|
||||
{
|
||||
*fb_in_use = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret != 0)
|
||||
return FALSE;
|
||||
|
||||
*fb_in_use = TRUE;
|
||||
g_closure_ref (flip_closure);
|
||||
|
||||
return TRUE;
|
||||
|
@ -39,11 +39,11 @@ GType meta_monitor_manager_kms_get_type (void);
|
||||
|
||||
typedef void (*MetaKmsFlipCallback) (void *user_data);
|
||||
|
||||
void meta_monitor_manager_kms_apply_crtc_mode (MetaMonitorManagerKms *manager_kms,
|
||||
MetaCRTC *crtc,
|
||||
int x,
|
||||
int y,
|
||||
uint32_t fb_id);
|
||||
gboolean meta_monitor_manager_kms_apply_crtc_mode (MetaMonitorManagerKms *manager_kms,
|
||||
MetaCRTC *crtc,
|
||||
int x,
|
||||
int y,
|
||||
uint32_t fb_id);
|
||||
|
||||
gboolean meta_monitor_manager_kms_is_crtc_active (MetaMonitorManagerKms *manager_kms,
|
||||
MetaCRTC *crtc);
|
||||
@ -53,7 +53,8 @@ gboolean meta_monitor_manager_kms_flip_crtc (MetaMonitorManagerKms *manager_kms,
|
||||
int x,
|
||||
int y,
|
||||
uint32_t fb_id,
|
||||
GClosure *flip_closure);
|
||||
GClosure *flip_closure,
|
||||
gboolean *fb_in_use);
|
||||
|
||||
void meta_monitor_manager_kms_wait_for_flip (MetaMonitorManagerKms *manager_kms);
|
||||
|
||||
|
@ -457,10 +457,9 @@ meta_onscreen_native_flip_crtc (MetaOnscreenNative *onscreen_native,
|
||||
crtc,
|
||||
x, y,
|
||||
onscreen_native->gbm.next_fb_id,
|
||||
flip_closure))
|
||||
flip_closure,
|
||||
fb_in_use))
|
||||
onscreen_native->pending_flips++;
|
||||
|
||||
*fb_in_use = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user