VirtualBox

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


Ignore:
Timestamp:
Mar 30, 2010 8:31:42 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
59514
Message:

2d: working multi-monitor + some fixing for working with not-using-VRAM mode

Location:
trunk/src/VBox/Additions/WINNT/Graphics
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c

    r26562 r27839  
    108108    {
    109109#ifdef VBOX_WITH_VIDEOHWACCEL
    110         vboxVHWAInit();
    111 
    112110        memset(pHalInfo, 0, sizeof(DD_HALINFO));
    113111        pHalInfo->dwSize    = sizeof(DD_HALINFO);
     
    659657            if (lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
    660658            {
    661                 pBody->SurfInfo.offSurface = 0;
     659                pBody->SurfInfo.offSurface = vboxVHWAVramOffsetFromPDEV(pDev, 0);
    662660            }
    663661            else
     
    10821080                memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_LOCK));
    10831081
    1084                 pBody->u.in.offSurface = (uint64_t)lpSurfaceGlobal->fpVidMem;
     1082                pBody->u.in.offSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpSurfaceGlobal->fpVidMem);
    10851083
    10861084//            if (lpLock->bHasRect)
     
    14651463        memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET));
    14661464
    1467         pBody->u.in.offSurface = (uint64_t)lpSurfaceGlobal->fpVidMem;
     1465        pBody->u.in.offSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpSurfaceGlobal->fpVidMem);
    14681466        pBody->u.in.hSurf = pDesc->hHostHandle;
    14691467        pBody->u.in.flags = vboxVHWAFromDDCKEYs(lpSetColorKey->dwFlags);
     
    15081506            memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_BLT));
    15091507
    1510             pBody->u.in.offSrcSurface = (uint64_t)lpSrcSurfaceGlobal->fpVidMem;
    1511             pBody->u.in.offDstSurface = (uint64_t)lpDestSurfaceGlobal->fpVidMem;
     1508            pBody->u.in.offSrcSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpSrcSurfaceGlobal->fpVidMem);
     1509            pBody->u.in.offDstSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpDestSurfaceGlobal->fpVidMem);
    15121510
    15131511            pBody->u.in.hDstSurf = pDestDesc->hHostHandle;
     
    16011599        memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_FLIP));
    16021600
    1603         pBody->u.in.offCurrSurface = (uint64_t)lpCurrSurfaceGlobal->fpVidMem;
    1604         pBody->u.in.offTargSurface = (uint64_t)lpTargSurfaceGlobal->fpVidMem;
     1601        pBody->u.in.offCurrSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpCurrSurfaceGlobal->fpVidMem);
     1602        pBody->u.in.offTargSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpTargSurfaceGlobal->fpVidMem);
    16051603
    16061604        pBody->u.in.hTargSurf = pTargDesc->hHostHandle;
     
    17701768        memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_SETPOSITION));
    17711769
    1772         pBody->u.in.offSrcSurface = (uint64_t)lpSrcSurfaceGlobal->fpVidMem;
    1773         pBody->u.in.offDstSurface = (uint64_t)lpDestSurfaceGlobal->fpVidMem;
     1770        pBody->u.in.offSrcSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpSrcSurfaceGlobal->fpVidMem);
     1771        pBody->u.in.offDstSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpDestSurfaceGlobal->fpVidMem);
    17741772
    17751773        pBody->u.in.hDstSurf = pDestDesc->hHostHandle;
     
    18111809        memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE));
    18121810
    1813         pBody->u.in.offSrcSurface = (uint64_t)lpSrcSurfaceGlobal->fpVidMem;
     1811        pBody->u.in.offSrcSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpSrcSurfaceGlobal->fpVidMem);
    18141812
    18151813        pBody->u.in.hSrcSurf = pSrcDesc->hHostHandle;
     
    18411839            PVBOXVHWASURFDESC pDestDesc = (PVBOXVHWASURFDESC)lpDestSurfaceGlobal->dwReserved1;
    18421840            pBody->u.in.hDstSurf = pDestDesc->hHostHandle;
    1843             pBody->u.in.offDstSurface = (uint64_t)lpDestSurfaceGlobal->fpVidMem;
     1841            pBody->u.in.offDstSurface = vboxVHWAVramOffsetFromPDEV(pDev, lpDestSurfaceGlobal->fpVidMem);
    18441842        }
    18451843
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/driver.h

    r25528 r27839  
    131131    uint32_t numFourCC;
    132132    HGSMIOFFSET FourCC;
     133    ULONG_PTR offVramBase;
    133134    BOOLEAN bVHWAEnabled;
     135    BOOLEAN bVHWAInited;
    134136} VBOXVHWAINFO;
    135137#endif
     
    297299
    298300 #ifdef VBOX_WITH_VIDEOHWACCEL
     301
     302DECLINLINE(uint64_t) vboxVHWAVramOffsetFromPDEV(PPDEV pDev, ULONG_PTR offPdev)
     303{
     304    return (uint64_t)(pDev->vhwaInfo.offVramBase + offPdev);
     305}
    299306
    300307#define VBOXDD_CHECKFLAG(_v, _f) ((_v) & (_f)) == (_f)
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c

    r25062 r27839  
    154154                Assert(!err);
    155155#endif
     156
     157#ifdef VBOX_WITH_VIDEOHWACCEL
     158                if (!err)
     159                    vboxVHWAInit(ppdev);
     160#endif
     161
    156162                /* this is not fatal, just means Video 2D acceleration will not be supported */
    157163                err = 0;
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/vbox.c

    r26505 r27839  
    10651065}
    10661066
     1067void vboxVHWAInit(PPDEV ppdev)
     1068{
     1069    VHWAQUERYINFO info;
     1070    DWORD returnedDataLength;
     1071    DWORD err;
     1072
     1073    memset(&info, 0, sizeof (info));
     1074
     1075    err = EngDeviceIoControl(ppdev->hDriver,
     1076            IOCTL_VIDEO_VHWA_QUERY_INFO,
     1077            NULL,
     1078            0,
     1079            &info,
     1080            sizeof(info),
     1081            &returnedDataLength);
     1082    Assert(!err);
     1083    if(!err)
     1084    {
     1085        ppdev->vhwaInfo.offVramBase = info.offVramBase;
     1086        ppdev->vhwaInfo.bVHWAInited = TRUE;
     1087    }
     1088    else
     1089        ppdev->vhwaInfo.bVHWAInited = FALSE;
     1090}
     1091
    10671092# endif
    10681093
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/vhwa.c

    r26667 r27839  
    139139        )
    140140
    141 void vboxVHWAInit()
    142 {
    143 }
    144 
    145 void vboxVHWATerm()
    146 {
    147 }
    148 
    149141uint32_t vboxVHWAUnsupportedDDCAPS(uint32_t caps)
    150142{
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp

    r27286 r27839  
    26872687            break;
    26882688        }
     2689# ifdef VBOX_WITH_VIDEOHWACCEL
     2690        case IOCTL_VIDEO_VHWA_QUERY_INFO:
     2691        {
     2692            if (RequestPacket->OutputBufferLength < sizeof (VHWAQUERYINFO))
     2693            {
     2694                dprintf(("VBoxVideo::VBoxVideoStartIO: Output buffer too small: %d needed: %d!!!\n",
     2695                         RequestPacket->OutputBufferLength, sizeof(VHWAQUERYINFO)));
     2696                RequestPacket->StatusBlock->Status = ERROR_INSUFFICIENT_BUFFER;
     2697                return FALSE;
     2698            }
     2699
     2700            if (!pDevExt->pPrimary->u.primary.bHGSMI)
     2701            {
     2702                RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
     2703                return FALSE;
     2704            }
     2705
     2706            VHWAQUERYINFO *pInfo = (VHWAQUERYINFO *)RequestPacket->OutputBuffer;
     2707            pInfo->offVramBase = (ULONG_PTR)pDevExt->ulFrameBufferOffset;
     2708            RequestPacket->StatusBlock->Information = sizeof (VHWAQUERYINFO);
     2709            Result = TRUE;
     2710            break;
     2711        }
     2712# endif
    26892713#endif /* VBOX_WITH_HGSMI */
    2690 
    26912714        default:
    26922715            dprintf(("VBoxVideo::VBoxVideoStartIO: Unsupported %p, fn %d(0x%x)\n",
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/vboxioctl.h

    r22548 r27839  
    6363#define IOCTL_VIDEO_HGSMI_QUERY_PORTPROCS \
    6464    CTL_CODE(FILE_DEVICE_VIDEO, 0x434, METHOD_BUFFERED, FILE_ANY_ACCESS)
     65
     66#define IOCTL_VIDEO_VHWA_QUERY_INFO \
     67    CTL_CODE(FILE_DEVICE_VIDEO, 0x435, METHOD_BUFFERED, FILE_ANY_ACCESS)
    6568
    6669#endif /* VBOX_WITH_HGSMI */
     
    167170} HGSMIHANDLERDISABLE;
    168171
     172# ifdef VBOX_WITH_VIDEOHWACCEL
     173typedef struct _VHWAQUERYINFO
     174{
     175    ULONG_PTR offVramBase;
     176} VHWAQUERYINFO;
     177# endif
     178
    169179#endif /* VBOX_WITH_HGSMI */
    170180#pragma pack()
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