xwayland: Add xwlRRModeToDisplayMode() helper function
This is a preparation patch for adding emulated mode/resolution change support to Xwayland's XF86 vidmode extension emulation, using the Wayland viewport extension. Reviewed-by: Olivier Fourdan <ofourdan@redhat.com> Acked-by: Michel Dänzer <mdaenzer@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
d99b9ff0f2
commit
43c8007812
|
@ -78,13 +78,37 @@ mode_refresh(const xRRModeInfo *mode_info)
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode)
|
||||||
|
{
|
||||||
|
const xRRModeInfo *mode_info = &rrmode->mode;
|
||||||
|
|
||||||
|
mode->next = mode;
|
||||||
|
mode->prev = mode;
|
||||||
|
mode->name = "";
|
||||||
|
mode->VScan = 1;
|
||||||
|
mode->Private = NULL;
|
||||||
|
mode->HDisplay = mode_info->width;
|
||||||
|
mode->HSyncStart = mode_info->hSyncStart;
|
||||||
|
mode->HSyncEnd = mode_info->hSyncEnd;
|
||||||
|
mode->HTotal = mode_info->hTotal;
|
||||||
|
mode->HSkew = mode_info->hSkew;
|
||||||
|
mode->VDisplay = mode_info->height;
|
||||||
|
mode->VSyncStart = mode_info->vSyncStart;
|
||||||
|
mode->VSyncEnd = mode_info->vSyncEnd;
|
||||||
|
mode->VTotal = mode_info->vTotal;
|
||||||
|
mode->Flags = mode_info->modeFlags;
|
||||||
|
mode->Clock = mode_info->dotClock / 1000.0;
|
||||||
|
mode->VRefresh = mode_refresh(mode_info); /* Or RRVerticalRefresh() */
|
||||||
|
mode->HSync = mode_hsync(mode_info);
|
||||||
|
}
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock)
|
xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock)
|
||||||
{
|
{
|
||||||
DisplayModePtr pMod;
|
DisplayModePtr pMod;
|
||||||
RROutputPtr output;
|
RROutputPtr output;
|
||||||
RRCrtcPtr crtc;
|
RRCrtcPtr crtc;
|
||||||
xRRModeInfo rrmode;
|
|
||||||
|
|
||||||
pMod = dixLookupPrivate(&pScreen->devPrivates, xwlVidModePrivateKey);
|
pMod = dixLookupPrivate(&pScreen->devPrivates, xwlVidModePrivateKey);
|
||||||
if (pMod == NULL)
|
if (pMod == NULL)
|
||||||
|
@ -98,30 +122,11 @@ xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotCl
|
||||||
if (crtc == NULL)
|
if (crtc == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
rrmode = crtc->mode->mode;
|
xwlRRModeToDisplayMode(crtc->mode, pMod);
|
||||||
|
|
||||||
pMod->next = pMod;
|
|
||||||
pMod->prev = pMod;
|
|
||||||
pMod->name = "";
|
|
||||||
pMod->VScan = 1;
|
|
||||||
pMod->Private = NULL;
|
|
||||||
pMod->HDisplay = rrmode.width;
|
|
||||||
pMod->HSyncStart = rrmode.hSyncStart;
|
|
||||||
pMod->HSyncEnd = rrmode.hSyncEnd;
|
|
||||||
pMod->HTotal = rrmode.hTotal;
|
|
||||||
pMod->HSkew = rrmode.hSkew;
|
|
||||||
pMod->VDisplay = rrmode.height;
|
|
||||||
pMod->VSyncStart = rrmode.vSyncStart;
|
|
||||||
pMod->VSyncEnd = rrmode.vSyncEnd;
|
|
||||||
pMod->VTotal = rrmode.vTotal;
|
|
||||||
pMod->Flags = rrmode.modeFlags;
|
|
||||||
pMod->Clock = rrmode.dotClock / 1000.0;
|
|
||||||
pMod->VRefresh = mode_refresh(&rrmode); /* Or RRVerticalRefresh() */
|
|
||||||
pMod->HSync = mode_hsync(&rrmode);
|
|
||||||
*mode = pMod;
|
*mode = pMod;
|
||||||
|
|
||||||
if (dotClock != NULL)
|
if (dotClock != NULL)
|
||||||
*dotClock = rrmode.dotClock / 1000.0;
|
*dotClock = pMod->Clock;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue