VirtualBox

Ignore:
Timestamp:
Jun 17, 2009 9:26:02 AM (16 years ago)
Author:
vboxsync
Message:

video hw accel: fixes for basic ddraw op hanlding

File:
1 edited

Legend:

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

    r18246 r20653  
    101101    case OPENGL_GETINFO:
    102102    {
    103         if (    cjOut >= sizeof(OPENGL_INFO) 
    104             &&  pvOut) 
    105         { 
    106             POPENGL_INFO pInfo = (POPENGL_INFO)pvOut; 
    107 
    108             pInfo->dwVersion        = 2; 
    109             pInfo->dwDriverVersion  = 1; 
    110             pInfo->szDriverName[0]  = 'V'; 
    111             pInfo->szDriverName[1]  = 'B'; 
    112             pInfo->szDriverName[2]  = 'o'; 
    113             pInfo->szDriverName[3]  = 'x'; 
    114             pInfo->szDriverName[4]  = 'O'; 
    115             pInfo->szDriverName[5]  = 'G'; 
    116             pInfo->szDriverName[6]  = 'L'; 
    117             pInfo->szDriverName[7]  = 0; 
    118 
    119             DISPDBG((0, "OPENGL_GETINFO\n")); 
    120             return cjOut; 
    121         } 
    122         else 
     103        if (    cjOut >= sizeof(OPENGL_INFO)
     104            &&  pvOut)
     105        {
     106            POPENGL_INFO pInfo = (POPENGL_INFO)pvOut;
     107
     108            pInfo->dwVersion        = 2;
     109            pInfo->dwDriverVersion  = 1;
     110            pInfo->szDriverName[0]  = 'V';
     111            pInfo->szDriverName[1]  = 'B';
     112            pInfo->szDriverName[2]  = 'o';
     113            pInfo->szDriverName[3]  = 'x';
     114            pInfo->szDriverName[4]  = 'O';
     115            pInfo->szDriverName[5]  = 'G';
     116            pInfo->szDriverName[6]  = 'L';
     117            pInfo->szDriverName[7]  = 0;
     118
     119            DISPDBG((0, "OPENGL_GETINFO\n"));
     120            return cjOut;
     121        }
     122        else
    123123            DISPDBG((0, "OPENGL_GETINFO invalid size %d\n", cjOut));         /* It doesn't matter that we fail here. Opengl32 will fall back to software rendering when this escape is not supported. */
    124124        break;
     
    238238    return 0;
    239239}
    240    
     240
    241241BOOL DrvConnect (PVOID x1, PVOID x2, PVOID x3, PVOID x4)
    242242{
     
    318318//     {   0x50,                           (PFN) DrvShadowConnect      },       // 0x50
    319319//     {   0x51,                           (PFN) DrvShadowDisconnect   },       // 0x51
    320    
     320
    321321};
    322322
     
    443443
    444444    DISPDBG((0, "VBoxDisp::DrvEnablePDEV called\n"));
    445    
     445
    446446    UNREFERENCED_PARAMETER(pwszLogAddress);
    447447    UNREFERENCED_PARAMETER(pwszDeviceName);
    448    
     448
    449449    RtlZeroMemory(&DevInfo, sizeof (DEVINFO));
    450450    RtlZeroMemory(&GdiInfo, sizeof (GDIINFO));
     
    465465
    466466    ppdev->hDriver = hDriver;
    467    
     467
    468468    // Get the current screen mode information.  Set up device caps and devinfo.
    469469
     
    481481        DISPDBG((0, "DrvEnablePDEV failed bInitPointer\n"));
    482482    }
    483    
     483
    484484    // Initialize palette information.
    485485
     
    489489        goto error_free;
    490490    }
    491    
     491
    492492//    // Start a thread that will process notifications from VMMDev
    493493//    if (!bInitNotificationThread(ppdev))
     
    496496//        goto error_free;
    497497//    }
    498    
     498
    499499    // Copy the devinfo into the engine buffer.
    500    
     500
    501501    DISPDBG((0, "VBoxDisp::DrvEnablePDEV: sizeof(DEVINFO) = %d, cjDevInfo = %d, alpha = %d\n", sizeof(DEVINFO), cjDevInfo, DevInfo.flGraphicsCaps2 & GCAPS2_ALPHACURSOR));
    502    
     502
    503503// @todo seems to be not necessary. these bits are initialized in screen.c    DevInfo.flGraphicsCaps |= GCAPS_OPAQUERECT       |
    504504//                              GCAPS_DITHERONREALIZE  |
     
    509509//                              GCAPS_COLOR_DITHER     |
    510510//                              GCAPS_ASYNCMOVE;
    511 //                             
     511//
    512512//    DevInfo.flGraphicsCaps |= GCAPS_DITHERONREALIZE;
    513    
     513
    514514    DevInfo.flGraphicsCaps2 |= GCAPS2_RESERVED1; /* @todo figure out what is this. */
    515515
     
    522522
    523523    DISPDBG((0, "VBoxDisp::DrvEnablePDEV completed %x\n", ppdev));
    524    
     524
    525525    return((DHPDEV) ppdev);
    526526
     
    557557//    vStopNotificationThread ((PPDEV) dhpdev);
    558558    vDisablePalette((PPDEV) dhpdev);
    559    
     559
    560560    /* Free the driver's VBVA resources. */
    561561    vboxVbvaDisable ((PPDEV) dhpdev);
     
    615615#endif
    616616    DISPDBG((0, "DISP DrvEnableSurface called\n"));
    617        
     617
    618618    // Create engine bitmap around frame buffer.
    619619
     
    630630
    631631    DISPDBG((0, "DISP DrvEnableSurface bInitSURF success\n"));
    632    
     632
    633633    sizl.cx = ppdev->cxScreen;
    634634    sizl.cy = ppdev->cyScreen;
     
    690690                                              ulBitmapType);
    691691    }
    692  
     692
    693693    if ( hsurf == 0 )
    694694    {
     
    701701    // GDI. We cant do this on NT4.0 hence we call EngAssociateSurface.
    702702    //
    703      
     703
    704704    if(g_bOnNT40)
    705705    {
     
    707707        // We have to associate the surface we just created with our physical
    708708        // device so that GDI can get information related to the PDEV when
    709         // it's drawing to the surface (such as, for example, the length of 
     709        // it's drawing to the surface (such as, for example, the length of
    710710        // styles on the device when simulating styled lines).
    711711        //
     
    720720        {
    721721            DISPDBG((0, "DrvEnableSurface: failed EngAssociateSurface\n"));
    722             goto l_Failure; 
     722            goto l_Failure;
    723723        }
    724724
     
    726726        // Jam in the value of dhsurf into screen SURFOBJ. We do this to
    727727        // make sure the driver acclerates Drv calls we hook and not
    728         // punt them back to GDI as the SURFOBJ's dhsurf = 0. 
     728        // punt them back to GDI as the SURFOBJ's dhsurf = 0.
    729729        //
    730730        ppdev->psoScreenBitmap = EngLockSurface(hsurf);
     
    732732        {
    733733            DISPDBG((0, "DrvEnableSurface: failed EngLockSurface\n"));
    734             goto l_Failure; 
     734            goto l_Failure;
    735735        }
    736736
     
    767767                                    (ppdev->lDeltaScreen > 0) ? BMF_TOPDOWN : 0,
    768768                                    (PVOID) (ppdev->pjScreen));
    769                                      
     769
    770770    if (hsurf == (HSURF) 0)
    771771    {
     
    776776    {
    777777        ppdev->hsurfScreenBitmap = hsurf;
    778          
     778
    779779        if (!EngAssociateSurface(hsurf, ppdev->hdevEng, 0))
    780780        {
     
    785785        {
    786786            SURFOBJ *pso = EngLockSurface(hsurf);
    787              
     787
    788788            ppdev->psoScreenBitmap = pso;
    789    
     789
    790790            hsurf = (HSURF) EngCreateDeviceSurface((DHSURF)pso,
    791791                                                    sizl,
     
    816816        }
    817817    }
    818 #endif /* VBOX_NEW_SURFACE_CODE */   
     818#endif /* VBOX_NEW_SURFACE_CODE */
    819819    return ppdev->hsurfScreen;
    820      
     820
    821821l_Failure:
    822822
    823823    DrvDisableSurface(dhpdev);
    824    
     824
    825825    return((HSURF)0);
    826826}
     
    836836{
    837837    PPDEV ppdev = (PPDEV)dhpdev;
    838    
     838
    839839    DISPDBG((0, "VBoxDisp::DrvDisableSurface called\n"));
    840840    if (ppdev->psoScreenBitmap)
     
    861861        ppdev->hsurfScreenBitmap = (HSURF)0;
    862862    }
    863 #endif   
     863#endif
     864
     865#ifdef VBOX_WITH_VIDEOHWACCEL
     866    /* tells we can not process host commands any more and ensures we've completed processing of the host VHWA commands */
     867    vboxVHWADisable(ppdev);
     868#endif
    864869    vDisableSURF(ppdev);
    865870}
     
    879884
    880885    DISPDBG((0, "DISP DrvAssertMode called bEnable = %d\n", bEnable));
    881    
     886
    882887    if (bEnable)
    883888    {
     
    898903            SIZEL sizl;
    899904            SURFOBJ *pso;
    900            
     905
    901906            DISPDBG((0, "DISP DrvAssertMode Screen pointer has changed!!!\n"));
    902            
     907
    903908            sizl.cx = ppdev->cxScreen;
    904909            sizl.cy = ppdev->cyScreen;
    905            
     910
    906911            hsurf = (HSURF) EngCreateBitmap(sizl,
    907912                                            ppdev->lDeltaScreen,
     
    909914                                            (ppdev->lDeltaScreen > 0) ? BMF_TOPDOWN : 0,
    910915                                            (PVOID) (ppdev->pjScreen));
    911                                      
     916
    912917            if (hsurf == (HSURF) 0)
    913918            {
     
    915920                return FALSE;
    916921            }
    917            
     922
    918923            pso = EngLockSurface(hsurf);
    919              
     924
    920925            if (ppdev->psoScreenBitmap)
    921926            {
     
    929934                ppdev->hsurfScreenBitmap = (HSURF)0;
    930935            }
    931    
     936
    932937            ppdev->hsurfScreenBitmap = hsurf;
    933938            ppdev->psoScreenBitmap = pso;
     
    939944            return FALSE;
    940945        }
    941            
     946
    942947        if (!EngAssociateSurface(ppdev->hsurfScreen, ppdev->hdevEng, ppdev->flHooks))
    943948        {
     
    945950            return FALSE;
    946951        }
    947            
     952
    948953        return TRUE;
    949954    }
    950955    else
    951956    {
     957#ifdef VBOX_WITH_VIDEOHWACCEL
     958        /* tells we can not process host commands any more and ensures we've completed processing of the host VHWA commands */
     959        vboxVHWADisable(ppdev);
     960#endif
    952961        //
    953962        // We must give up the display.
     
    987996\******************************************************************************/
    988997
    989 HBITMAP 
     998HBITMAP
    990999DrvCreateDeviceBitmap(
    9911000    DHPDEV      dhpdev,
     
    10051014\******************************************************************************/
    10061015
    1007 VOID 
     1016VOID
    10081017DrvDeleteDeviceBitmap(
    10091018    DHSURF      dhsurf)
     
    11491158            ppdev->ptlDevOrg = *(PPOINTL)pvData;
    11501159#ifndef VBOX_WITH_HGSMI
    1151             DISPDBG((3, "DN_DEVICE_ORIGIN: %d, %d (PSO = %p, pInfo = %p)\n", ppdev->ptlDevOrg.x, 
     1160            DISPDBG((3, "DN_DEVICE_ORIGIN: %d, %d (PSO = %p, pInfo = %p)\n", ppdev->ptlDevOrg.x,
    11521161                     ppdev->ptlDevOrg.y, pso, ppdev->pInfo));
    11531162            if (ppdev->pInfo)
     
    11581167            }
    11591168#else
    1160             DISPDBG((3, "DN_DEVICE_ORIGIN: %d, %d (PSO = %p)\n", ppdev->ptlDevOrg.x, 
     1169            DISPDBG((3, "DN_DEVICE_ORIGIN: %d, %d (PSO = %p)\n", ppdev->ptlDevOrg.x,
    11611170                     ppdev->ptlDevOrg.y, pso));
    11621171            VBoxProcessDisplayInfo(ppdev);
     
    11791188// Parameters
    11801189//  pDirectDraw-----Points to a DD_DIRECTDRAW_GLOBAL structure that describes
    1181 //                  the DirectDraw object. 
     1190//                  the DirectDraw object.
    11821191//  pSurface--------Points to a DD_SURFACE_LOCAL structure that describes the
    11831192//                  DirectDraw surface around which to wrap a GDI surface.
     
    12501259    {
    12511260        SIZEL sizel;
    1252         DWORD ulBitmapType, flHooks;       
     1261        DWORD ulBitmapType, flHooks;
    12531262
    12541263        sizel.cx = pSurfaceGlobal->wWidth;
     
    12961305                    SURFOBJ *surfobj = EngLockSurface ((HSURF)hbmDevice);
    12971306                    DISPDBG((0, "DrvDeriveSurface surfobj %x, hsurf = %x\n", surfobj, surfobj->hsurf));
    1298                
     1307
    12991308                    surfobj->dhpdev = (DHPDEV)pDev;
    1300                
     1309
    13011310                    EngUnlockSurface(surfobj);
    13021311
     
    13181327    DISPDBG((0, "DrvDeriveSurface return NULL\n"));
    13191328    DISPDBG((0, "pSurfaceGlobal->ddpfSurface.dwRGBBitCount = %d, lPitch =%ld\n", pSurfaceGlobal->ddpfSurface.dwRGBBitCount,pSurfaceGlobal->lPitch));
    1320    
     1329
    13211330    return(0);
    13221331}
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