VirtualBox

Changeset 46896 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Jul 2, 2013 8:16:43 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
86884
Message:

VBoxDisp,VBoxVideo,VBoxControl: registry flags to tweak the Windows guest graphics driver.

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/common/xpdm/VBoxVideoIOCTL.h

    r36867 r46896  
    5858#define IOCTL_VIDEO_VHWA_QUERY_INFO \
    5959    CTL_CODE(FILE_DEVICE_VIDEO, 0x435, METHOD_BUFFERED, FILE_ANY_ACCESS)
     60
     61/* Called to get adapter's generic information */
     62#define IOCTL_VIDEO_QUERY_VBOXVIDEO_INFO \
     63    CTL_CODE(FILE_DEVICE_VIDEO, 0x436, METHOD_BUFFERED, FILE_ANY_ACCESS)
    6064
    6165/* ==================== Data structures used by Virtual Box VRPS's ==================== */
     
    147151#pragma pack()
    148152
     153/* IOCTL_VIDEO_QUERY_INFO */
     154#define VBOXVIDEO_INFO_LEVEL_REGISTRY_FLAGS 1
     155
     156#define VBOXVIDEO_REGISTRY_FLAGS_DISABLE_BITMAP_CACHE 0x00000001
     157
    149158#endif /*VBOXVIDEOIOCTL_H*/
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDisp.h

    r44529 r46896  
    135135    VBOXDISPVHWAINFO  vhwa;                  /* VHWA Info */
    136136#endif
     137
     138    BOOL bBitmapCacheDisabled;
    137139} VBOXDISPDEV, *PVBOXDISPDEV;
    138140
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDriver.cpp

    r44529 r46896  
    519519    pDev->hDriver = hDriver;
    520520
     521    ULONG ulRegistryFlags = 0;
     522    rc = VBoxDispMPQueryRegistryFlags(hDriver, &ulRegistryFlags);
     523    if (RT_SUCCESS(rc))
     524    {
     525        pDev->bBitmapCacheDisabled = (ulRegistryFlags & VBOXVIDEO_REGISTRY_FLAGS_DISABLE_BITMAP_CACHE) != 0;
     526        LOG(("Bitmap cache %s", pDev->bBitmapCacheDisabled? "disabled": "enabled"));
     527    }
     528
    521529    /* Initialize device structure and query miniport to fill device and gdi infos */
    522530    rc = VBoxDispInitDevice(pDev, pdm, &gdiInfo, &devInfo);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispMini.cpp

    r37423 r46896  
    407407    return VINF_SUCCESS;
    408408}
     409
     410int VBoxDispMPQueryRegistryFlags(HANDLE hDriver, ULONG *pulFlags)
     411{
     412    DWORD dwrc;
     413    ULONG cbReturned;
     414    ULONG ulInfoLevel;
     415    LOGF_ENTER();
     416
     417    *pulFlags = 0;
     418    ulInfoLevel = VBOXVIDEO_INFO_LEVEL_REGISTRY_FLAGS;
     419    dwrc = EngDeviceIoControl(hDriver, IOCTL_VIDEO_QUERY_VBOXVIDEO_INFO, &ulInfoLevel, sizeof(DWORD),
     420                              pulFlags, sizeof(DWORD), &cbReturned);
     421    VBOX_CHECK_WINERR_RETRC(dwrc, VERR_DEV_IO_ERROR);
     422    VBOX_WARN_IOCTLCB_RETRC("IOCTL_VIDEO_QUERY_INFO", cbReturned, sizeof(DWORD), VERR_DEV_IO_ERROR);
     423
     424    if (*pulFlags != 0)
     425        LogRel(("VBoxDisp: video flags 0x%08X\n", *pulFlags));
     426
     427    LOGF_LEAVE();
     428    return VINF_SUCCESS;
     429}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispMini.h

    r36867 r46896  
    3939int VBoxDispMPShareVideoMemory(HANDLE hDriver, PVIDEO_SHARE_MEMORY pSMem, PVIDEO_SHARE_MEMORY_INFORMATION pSMemInfo);
    4040int VBoxDispMPUnshareVideoMemory(HANDLE hDriver, PVIDEO_SHARE_MEMORY pSMem);
     41int VBoxDispMPQueryRegistryFlags(HANDLE hDriver, ULONG *pulFlags);
    4142
    4243#endif /*VBOXDISPMINI_H*/
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispVRDP.cpp

    r45768 r46896  
    14621462
    14631463                LOG(("MEMBLT: bitmap %dx%d.", psoSrc->sizlBitmap.cx, psoSrc->sizlBitmap.cy));
    1464                 if (   (psoSrc->fjBitmap & BMF_DONTCACHE) != 0
     1464                if (   pDev->bBitmapCacheDisabled
     1465                    || (psoSrc->fjBitmap & BMF_DONTCACHE) != 0
    14651466                    || psoSrc->iUniq == 0
    14661467                       /* Bitmaps with hdev == 0 seems to have different RGB layout for 16BPP modes.
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPDriver.cpp

    r45037 r46896  
    546546        }
    547547
     548        case IOCTL_VIDEO_QUERY_VBOXVIDEO_INFO:
     549        {
     550            STARTIO_IN(ULONG, pulInfoLevel);
     551            if (*pulInfoLevel == VBOXVIDEO_INFO_LEVEL_REGISTRY_FLAGS)
     552            {
     553                STARTIO_OUT(ULONG, pulFlags);
     554                bResult = VBoxMPQueryRegistryFlags(pExt, pulFlags, pStatus);
     555            }
     556            else
     557            {
     558                pStatus->Status = ERROR_INVALID_PARAMETER;
     559                bResult = FALSE;
     560            }
     561               
     562            break;
     563        }
     564
    548565        default:
    549566        {
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPIOCTL.cpp

    r45037 r46896  
    617617}
    618618#endif
     619
     620BOOLEAN VBoxMPQueryRegistryFlags(PVBOXMP_DEVEXT pExt, ULONG *pulFlags, PSTATUS_BLOCK pStatus)
     621{
     622    BOOLEAN bRC = TRUE;
     623    LOGF_ENTER();
     624
     625    VBOXMPCMNREGISTRY Registry;
     626
     627    int rc = VBoxMPCmnRegInit(pExt, &Registry);
     628    VBOXMP_WARN_VPS_NOBP(rc);
     629
     630    if (rc == NO_ERROR)
     631    {
     632        uint32_t u32Flags = 0;
     633        rc = VBoxMPCmnRegQueryDword(Registry, L"VBoxVideoFlags", &u32Flags);
     634        VBOXMP_WARN_VPS_NOBP(rc);
     635        if (rc != NO_ERROR)
     636        {   
     637            u32Flags = 0;
     638        }
     639
     640        LOG(("Registry flags 0x%08X", u32Flags));
     641        *pulFlags = u32Flags;
     642        pStatus->Information = sizeof(ULONG);
     643    }
     644
     645    rc = VBoxMPCmnRegFini(Registry);
     646    VBOXMP_WARN_VPS_NOBP(rc);
     647
     648    LOGF_LEAVE();
     649    return bRC;
     650}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPInternal.h

    r36867 r46896  
    6262BOOLEAN VBoxMPHgsmiHandlerEnable(PVBOXMP_DEVEXT pExt, HGSMIHANDLERENABLE *pChannel, PSTATUS_BLOCK pStatus);
    6363BOOLEAN VBoxMPVhwaQueryInfo(PVBOXMP_DEVEXT pExt, VHWAQUERYINFO *pInfo, PSTATUS_BLOCK pStatus);
     64BOOLEAN VBoxMPQueryRegistryFlags(PVBOXMP_DEVEXT pExt, ULONG *pulFlags, PSTATUS_BLOCK pStatus);
    6465
    6566#endif /*VBOXMPINTERNAL_H*/
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