VirtualBox

Ignore:
Timestamp:
Dec 11, 2013 4:27:39 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91244
Message:

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

Location:
trunk/src/VBox/Additions/x11/vboxvideo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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.

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