VirtualBox

Changeset 49877 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Dec 11, 2013 4:27:39 PM (11 years ago)
Author:
vboxsync
Message:

Additions/x11: make vboxvideo dynamic resizing compatible with what the KMS/modesetting drivers can do.

Location:
trunk/src/VBox/Additions/x11
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/VBoxClient/Makefile.kmk

    r49643 r49877  
    3030endif
    3131VBoxClient_DEFS.linux += _GNU_SOURCE
     32ifdef VBOX_WITH_GUEST_KMS_DRIVER
     33 VBoxClient_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
     34endif
    3235VBoxClient_SOURCES = \
    3336        main.cpp
  • trunk/src/VBox/Additions/x11/VBoxClient/display.cpp

    r44967 r49877  
    4848        rc = VERR_NOT_SUPPORTED;
    4949    if (RT_SUCCESS(rc))
     50    {
    5051        rc = VbglR3CtlFilterMask(VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, 0);
     52#ifdef VBOX_WITH_GUEST_KMS_DRIVER
     53        if (RT_SUCCESS(rc))
     54            VbglR3SetGuestCaps(VMMDEV_GUEST_SUPPORTS_GRAPHICS, 0);
     55#endif
     56    }
    5157    else
    5258        VbglR3CtlFilterMask(0, VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST);
     
    6874    if (RT_FAILURE(rc))
    6975    {
    70         VbglR3CtlFilterMask(0, VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED);
     76        VbglR3CtlFilterMask(0,   VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED
     77                               | VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST);
     78#ifdef VBOX_WITH_GUEST_KMS_DRIVER
     79        VbglR3SetGuestCaps(0, VMMDEV_GUEST_SUPPORTS_GRAPHICS);
     80#endif
    7181        VbglR3SetMouseStatus(  fMouseFeatures
    7282                             | VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR);
     
    8292    VbglR3CtlFilterMask(0,   VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST
    8393                           | VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED);
     94#ifdef VBOX_WITH_GUEST_KMS_DRIVER
     95    VbglR3SetGuestCaps(0, VMMDEV_GUEST_SUPPORTS_GRAPHICS);
     96#endif
    8497    int rc = VbglR3GetMouseStatus(&fMouseFeatures, NULL, NULL);
    8598    if (RT_SUCCESS(rc))
     
    223236                            {
    224237                                RTStrPrintf(szCommand, sizeof(szCommand),
    225                                             "%s --output VBOX%u --set VBOX_MODE %dx%d",
    226                                             pcszXrandr, iDisplay, cx, cy);
     238                                            "%s --output VGA-%u --set VBOX_MODE %d",
     239                                            pcszXrandr, iDisplay,
     240                                            (cx & 0xffff) << 16 | (cy & 0xffff));
    227241                                system(szCommand);
    228242                            }
     
    231245                            {
    232246                                RTStrPrintf(szCommand, sizeof(szCommand),
    233                                             "%s --output VBOX%u --auto --pos %dx%d",
     247                                            "%s --output VGA-%u --auto --pos %dx%d",
    234248                                            pcszXrandr, iDisplay, cxOrg, cyOrg);
    235249                                system(szCommand);
    236250                            }
    237251                            RTStrPrintf(szCommand, sizeof(szCommand),
    238                                         "%s --output VBOX%u --preferred",
     252                                        "%s --output VGA-%u --preferred",
    239253                                        pcszXrandr, iDisplay);
    240254                            system(szCommand);
     
    243257                        {
    244258                            RTStrPrintf(szCommand, sizeof(szCommand),
    245                                         "%s --output VBOX%u --off",
     259                                        "%s --output VGA-%u --off",
    246260                                         pcszXrandr, iDisplay);
    247261                            system(szCommand);
     
    253267                        {
    254268                            RTStrPrintf(szCommand, sizeof(szCommand),
    255                                         "%s --output VBOX%u --set VBOX_MODE %dx%d",
    256                                         pcszXrandr, iDisplay, cx, cy);
     269                                        "%s --output VGA-%u --set VBOX_MODE %d",
     270                                        pcszXrandr, iDisplay,
     271                                        (cx & 0xffff) << 16 | (cy & 0xffff));
    257272                            system(szCommand);
    258273                            RTStrPrintf(szCommand, sizeof(szCommand),
    259                                         "%s --output VBOX%u --preferred",
     274                                        "%s --output VGA-%u --preferred",
    260275                                        pcszXrandr, iDisplay);
    261276                            system(szCommand);
  • trunk/src/VBox/Additions/x11/vboxvideo/Makefile.kmk

    r49643 r49877  
    3030ifeq ($(KBUILD_TARGET),solaris) # don't use .solaris or anything here.
    3131 vboxvideo_70_DEFS += __EXTENSIONS__  ## @todo Why this?
     32endif
     33ifdef VBOX_WITH_GUEST_KMS_DRIVER
     34 vboxvideo_70_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
    3235endif
    3336vboxvideo_13_DEFS := $(vboxvideo_70_DEFS) VBOXVIDEO_13
     
    7780        IN_MODULE XFree86Module IN_XF86_MODULE IN_RT_STATIC
    7881vboxvideo_drv_DEFS += memset=xf86memset memcpy=xf86memcpy
     82ifdef VBOX_WITH_GUEST_KMS_DRIVER
     83 vboxvideo_drv_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
     84endif
    7985vboxvideo_drv_INCS = \
    8086        $(VBOX_PATH_X11_XFREE_4_3)/include \
  • trunk/src/VBox/Additions/x11/vboxvideo/setmode.c

    r49187 r49877  
    122122                                  vboxBPP(pScrn), 0, x, y);
    123123    /* Tell the host we support graphics */
     124#ifndef VBOX_WITH_GUEST_KMS_DRIVER
    124125    if (vbox_device_available(pVBox))
    125126        vboxEnableGraphicsCap(pVBox);
     127#endif
    126128    if (pVBox->fHaveHGSMI)
    127129    {
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c

    r49639 r49877  
    520520    ScrnInfoPtr pScrn = output->scrn;
    521521    VBOXPtr pVBox = VBOXGetRec(pScrn);
    522     TRACE_LOG("property=%d, value->type=%d, value->format=%d, value->size=%ld\n",
    523               (int)property, (int)value->type, value->format, value->size);
     522    TRACE_LOG("property=%d, value->type=%d, value->format=%d, value->size=%d\n",
     523              (int)property, (int)value->type, (int)value->format, (int)value->size);
    524524    if (property == vboxAtomVBoxMode())
    525525    {
    526526        uint32_t cDisplay = (uintptr_t)output->driver_private;
    527         char sz[256] = { 0 };
    528527        int w, h;
    529528
    530         if (   value->type != XA_STRING
    531             || (unsigned) value->size > (sizeof(sz) - 1))
     529        if (   value->type != XA_INTEGER
     530            || value->format != 32
     531            || value->size != 1)
    532532            return FALSE;
    533         strncpy(sz, value->data, value->size);
    534         TRACE_LOG("screen=%u, property value=%s\n", cDisplay, sz);
    535         if (sscanf(sz, "%dx%d", &w, &h) != 2)
    536             return FALSE;
     533        w = (*(uint32_t *)value->data) >> 16;
     534        h = (*(uint32_t *)value->data) & 0xffff;
     535        TRACE_LOG("screen=%u, property value=%dx%d\n", cDisplay, w, h);
    537536        pVBox->aPreferredSize[cDisplay].cx = w;
    538537        pVBox->aPreferredSize[cDisplay].cy = h;
     
    10541053    if (vbox_open (pScrn, pScreen, pVBox)) {
    10551054        vboxEnableVbva(pScrn);
     1055#ifndef VBOX_WITH_GUEST_KMS_DRIVER
    10561056        vboxEnableGraphicsCap(pVBox);
     1057#endif
    10571058    }
    10581059
     
    10731074
    10741075            /* Set up our virtual outputs. */
    1075             snprintf(szOutput, sizeof(szOutput), "VBOX%u", i);
     1076            snprintf(szOutput, sizeof(szOutput), "VGA-%u", i);
    10761077            pVBox->paOutputs[i] = xf86OutputCreate(pScrn, &VBOXOutputFuncs,
    10771078                                                   szOutput);
     
    11121113        for (i = 0; i < pVBox->cScreens; ++i)
    11131114        {
    1114             char csz[] = "0x0";
     1115            INT32 value = 0;
    11151116            RRChangeOutputProperty(pVBox->paOutputs[i]->randr_output,
    1116                                    vboxAtomVBoxMode(), XA_STRING, 8,
    1117                                    PropModeReplace, sizeof(csz), csz, TRUE,
     1117                                   vboxAtomVBoxMode(), XA_INTEGER, 32,
     1118                                   PropModeReplace, 1, &value, TRUE,
    11181119                                   FALSE);
    11191120
     
    12221223        vboxDisableVbva(pScrn);
    12231224    vboxClearVRAM(pScrn, 0, 0);
     1225#ifndef VBOX_WITH_GUEST_KMS_DRIVER
    12241226    vboxDisableGraphicsCap(pVBox);
     1227#endif
    12251228#ifdef VBOX_DRI_OLD
    12261229    if (pVBox->useDRI)
     
    12451248        if (pVBox->fHaveHGSMI)
    12461249            vboxDisableVbva(pScrn);
     1250#ifndef VBOX_WITH_GUEST_KMS_DRIVER
    12471251        if (pScrn->vtSema)
    12481252            vboxDisableGraphicsCap(pVBox);
     1253#endif
    12491254        vboxClearVRAM(pScrn, 0, 0);
    12501255    }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette