diff options
author | Dave Airlie <airlied@redhat.com> | 2012-10-08 15:42:10 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-10-08 15:42:10 +1000 |
commit | a71bfc02809a6b60826b139628dbe3ec2ae48088 (patch) | |
tree | 3582d51adf6190a4839916e049e5896bd58549e3 | |
parent | bc50df4a8fcc61b81c8720ff0fc3d0f422d2bb02 (diff) |
xf86: provider switch
-rw-r--r-- | hw/xfree86/modes/xf86RandR12.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index 3530abf24..011303c1b 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -37,6 +37,7 @@ #include "windowstr.h" #include "inputstr.h" #include <randrstr.h> +#include "impedance.h" #include <X11/extensions/render.h> #include "xf86Crtc.h" @@ -1826,6 +1827,34 @@ xf86RandR14ProviderSetOffloadSink(ScreenPtr pScreen, } static Bool +xf86RandR15ProviderSwitchPrimary(ScreenPtr pScreen, + RRProviderPtr provider) +{ + ScreenPtr pProtoScreen, pCurrentGPU; + + /* have to locate the protocol screen this provider is using */ + pProtoScreen = pScreen->current_master; + if (pProtoScreen->isGPU) + pProtoScreen = pProtoScreen->current_master; + + pCurrentGPU = pProtoScreen->gpu[0]; + + if (provider->offload_sink) + DetachOffloadGPU(pScreen); + impedAddScreen(pProtoScreen, provider->pScreen); + impedRemoveScreen(pProtoScreen, pCurrentGPU); + + pCurrentGPU->current_master = NULL; + + if ((xf86ScreenToScrn(pCurrentGPU)->capabilities & RR_Capability_SinkOutput) && + (xf86ScreenToScrn(provider->pScreen)->capabilities & RR_Capability_SourceOutput)) + AttachOutputGPU(provider->pScreen, pCurrentGPU); + + + return TRUE; +} + +static Bool xf86RandR14ProviderSetProperty(ScreenPtr pScreen, RRProviderPtr randr_provider, Atom property, RRPropertyValuePtr value) @@ -1910,6 +1939,7 @@ xf86RandR12Init12(ScreenPtr pScreen) rp->rrProviderSetOutputSource = xf86RandR14ProviderSetOutputSource; rp->rrProviderSetOffloadSink = xf86RandR14ProviderSetOffloadSink; + rp->rrProviderSwitchPrimary = xf86RandR15ProviderSwitchPrimary; rp->rrProviderSetProperty = xf86RandR14ProviderSetProperty; rp->rrProviderGetProperty = xf86RandR14ProviderGetProperty; |