VirtualBox

Changeset 42232 in vbox


Ignore:
Timestamp:
Jul 19, 2012 4:06:17 PM (13 years ago)
Author:
vboxsync
Message:

fAnyX basics (not impl for xpdm miniport yet)

Location:
trunk/src/VBox/Additions/WINNT
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDriver.cpp

    r38840 r42232  
    10011001            break;
    10021002        }
     1003        case VBOXESC_ISANYX:
     1004        {
     1005            if (pvOut && cjOut == sizeof(DWORD))
     1006            {
     1007                /* @todo: impl */
     1008                *(DWORD *)pvOut = TRUE;
     1009                return 1;
     1010            }
     1011            else
     1012            {
     1013                WARN(("VBOXESC_ISANYX invalid parms"));
     1014                return 0;
     1015            }
     1016            break;
     1017        }
    10031018        default:
    10041019        {
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r42228 r42232  
    42674267                break;
    42684268            }
     4269            case VBOXESC_ISANYX:
     4270            {
     4271                if (pEscape->PrivateDriverDataSize != sizeof (VBOXDISPIFESCAPE_ISANYX))
     4272                {
     4273                    WARN(("invalid private driver size %d", pEscape->PrivateDriverDataSize));
     4274                    Status = STATUS_INVALID_PARAMETER;
     4275                    break;
     4276                }
     4277
     4278                PVBOXDISPIFESCAPE_ISANYX pIsAnyX = (PVBOXDISPIFESCAPE_ISANYX)pEscapeHdr;
     4279                pIsAnyX->u32IsAnyX = pDevExt->fAnyX;
     4280                Status = STATUS_SUCCESS;
     4281                break;
     4282            }
    42694283            case VBOXESC_DBGPRINT:
    42704284            {
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp

    r42224 r42232  
    5555}
    5656
    57 static DWORD vboxDispIfEscapeXPDM(PCVBOXDISPIF pIf, PVBOXDISPIFESCAPE pEscape, int cbData)
     57static DWORD vboxDispIfEscapeXPDM(PCVBOXDISPIF pIf, PVBOXDISPIFESCAPE pEscape, int cbData, int iDirection)
    5858{
    5959    HDC  hdc = GetDC(HWND_DESKTOP);
    6060    VOID *pvData = cbData ? VBOXDISPIFESCAPE_DATA(pEscape, VOID) : NULL;
    61     int iRet = ExtEscape(hdc, pEscape->escapeCode, cbData, (LPCSTR)pvData, 0, NULL);
     61    int iRet = ExtEscape(hdc, pEscape->escapeCode,
     62            iDirection >= 0 ? cbData : 0,
     63            iDirection >= 0 ? (LPSTR)pvData : NULL,
     64            iDirection <= 0 ? cbData : 0,
     65            iDirection <= 0 ? (LPSTR)pvData : NULL);
    6266    ReleaseDC(HWND_DESKTOP, hdc);
    6367    if (iRet > 0)
     
    353357        case VBOXDISPIF_MODE_XPDM_NT4:
    354358        case VBOXDISPIF_MODE_XPDM:
    355             return vboxDispIfEscapeXPDM(pIf, pEscape, cbData);
     359            return vboxDispIfEscapeXPDM(pIf, pEscape, cbData, 1);
     360#ifdef VBOX_WITH_WDDM
     361        case VBOXDISPIF_MODE_WDDM:
     362            return vboxDispIfEscapeWDDM(pIf, pEscape, cbData, TRUE /* BOOL fHwAccess */);
     363#endif
     364        default:
     365            Log((__FUNCTION__": unknown mode (%d)\n", pIf->enmMode));
     366            return ERROR_INVALID_PARAMETER;
     367    }
     368}
     369
     370DWORD VBoxDispIfEscapeInOut(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData)
     371{
     372    switch (pIf->enmMode)
     373    {
     374        case VBOXDISPIF_MODE_XPDM_NT4:
     375        case VBOXDISPIF_MODE_XPDM:
     376            return vboxDispIfEscapeXPDM(pIf, pEscape, cbData, 0);
    356377#ifdef VBOX_WITH_WDDM
    357378        case VBOXDISPIF_MODE_WDDM:
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h

    r42224 r42232  
    8282DWORD VBoxDispIfTerm(PVBOXDISPIF pIf);
    8383DWORD VBoxDispIfEscape(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
     84DWORD VBoxDispIfEscapeInOut(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
    8485DWORD VBoxDispIfResize(PCVBOXDISPIF const pIf, ULONG Id, DWORD Width, DWORD Height, DWORD BitsPerPixel);
    8586DWORD VBoxDispIfResizeModes(PCVBOXDISPIF const pIf, UINT iChangedMode, DISPLAY_DEVICE *paDisplayDevices, DEVMODE *paDeviceModes, UINT cDevModes);
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp

    r42224 r42232  
    3333    const VBOXSERVICEENV *pEnv;
    3434
     35    BOOL fAnyX;
     36
    3537    /* ChangeDisplaySettingsEx does not exist in NT. ResizeDisplayDevice uses the function. */
    3638    LONG (WINAPI * pfnChangeDisplaySettingsEx)(LPCTSTR lpszDeviceName, LPDEVMODE lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam);
     
    107109    }
    108110
     111    VBOXDISPIFESCAPE_ISANYX IsAnyX = {0};
     112    IsAnyX.EscapeHdr.escapeCode = VBOXESC_ISANYX;
     113    DWORD err = VBoxDispIfEscapeInOut(&pEnv->dispIf, &IsAnyX.EscapeHdr, sizeof (uint32_t));
     114    if (err == NO_ERROR)
     115        gCtx.fAnyX = !!IsAnyX.u32IsAnyX;
     116    else
     117        gCtx.fAnyX = TRUE;
     118
    109119    Log(("VBoxTray: VBoxDisplayInit: Display init successful\n"));
    110120
     
    208218{
    209219    BOOL fModeReset = (Width == 0 && Height == 0 && BitsPerPixel == 0);
     220
     221    if (!gCtx.fAnyX)
     222        Width &= 0xFFF8;
    210223
    211224    DISPLAY_DEVICE DisplayDevice;
  • trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h

    r42217 r42232  
    3737# define VBOXESC_REINITVIDEOMODESBYMASK     0xABCD9010
    3838# define VBOXESC_ADJUSTVIDEOMODES           0xABCD9011
     39#endif /* #ifdef VBOX_WITH_WDDM */
    3940
    40 /* for VBOX_VIDEO_MAX_SCREENS definition */
    41 #include <VBox/Hardware/VBoxVideoVBE.h>
    42 
    43 #endif /* #ifdef VBOX_WITH_WDDM */
     41# define VBOXESC_ISANYX                     0xABCD9200
    4442
    4543typedef struct VBOXDISPIFESCAPE
     
    6058    CTL_CODE(FILE_DEVICE_VIDEO, 0xA01, METHOD_BUFFERED, FILE_ANY_ACCESS)
    6159
     60#define IOCTL_VIDEO_VBOX_ISANYX \
     61    CTL_CODE(FILE_DEVICE_VIDEO, 0xA02, METHOD_BUFFERED, FILE_ANY_ACCESS)
     62
     63typedef struct VBOXDISPIFESCAPE_ISANYX
     64{
     65    VBOXDISPIFESCAPE EscapeHdr;
     66    uint32_t u32IsAnyX;
     67} VBOXDISPIFESCAPE_ISANYX, *PVBOXDISPIFESCAPE_ISANYX;
     68
    6269#ifdef VBOX_WITH_WDDM
     70
     71/* for VBOX_VIDEO_MAX_SCREENS definition */
     72#include <VBox/Hardware/VBoxVideoVBE.h>
    6373
    6474typedef struct
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