VirtualBox

Changeset 34665 in vbox


Ignore:
Timestamp:
Dec 2, 2010 11:05:33 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
68467
Message:

Additions/common/VBoxVideo and Additions/WINNT/Graphics: some adjustments to the common VBoxVideo code

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxVideo.h

    r34490 r34665  
    8989 * contain other data (for example HGSMIHOSTFLAGS structure).
    9090 */
    91 #ifdef VBOX_WITH_WDDM
     91#ifndef VBOX_XPDM_MINIPORT
    9292# define VBVA_ADAPTER_INFORMATION_SIZE (64*_1K)
    9393#else
     
    984984#define VBVA_F_ENABLE  0x00000001
    985985#define VBVA_F_DISABLE 0x00000002
    986 #ifdef VBOXWDDM_WITH_VBVA
    987986/* extended VBVA to be used with WDDM */
    988987#define VBVA_F_EXTENDED 0x00000004
    989988/* vbva offset is absolute VRAM offset */
    990989#define VBVA_F_ABSOFFSET 0x00000008
    991 #endif
    992990
    993991typedef struct VBVAENABLE
     
    998996} VBVAENABLE;
    999997
    1000 #ifdef VBOXWDDM_WITH_VBVA
    1001998typedef struct VBVAENABLE_EX
    1002999{
     
    10041001    uint32_t u32ScreenId;
    10051002} VBVAENABLE_EX;
    1006 #endif
    10071003
    10081004
  • trunk/include/VBox/VBoxVideoGuest.h

    r34490 r34665  
    194194                                       void *pvBuffer);
    195195
    196 typedef struct VBVAINFOVIEW *PVBVAINFOVIEW;
     196struct VBVAINFOVIEW;
    197197/**
    198198 * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise
     
    205205 * @todo  explicitly pass the array size
    206206 */
    207 typedef DECLCALLBACK(int) FNHGSMIFILLVIEWINFO (void *pvData,
    208                                                PVBVAINFOVIEW pInfo);
     207typedef DECLCALLBACK(int) FNHGSMIFILLVIEWINFO(void *pvData,
     208                                              struct VBVAINFOVIEW *pInfo,
     209                                              uint32_t cViews);
    209210/** Pointer to a FNHGSMIFILLVIEWINFO callback */
    210211typedef FNHGSMIFILLVIEWINFO *PFNHGSMIFILLVIEWINFO;
     
    257258RTDECL(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx,
    258259                            PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
    259                             struct VBVABUFFER *pVBVA);
     260                            struct VBVABUFFER *pVBVA, int32_t cScreen);
    260261RTDECL(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx,
    261                              PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx);
     262                             PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
     263                             int32_t cScreen);
    262264RTDECL(bool) VBoxVBVABufferBeginUpdate(PVBVABUFFERCONTEXT pCtx,
    263265                                       PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx);
     
    267269                           const void *pv, uint32_t cb);
    268270RTDECL(bool) VBoxVBVAOrderSupported(PVBVABUFFERCONTEXT pCtx, unsigned code);
     271RTDECL(void) VBoxVBVASetupBufferContext(PVBVABUFFERCONTEXT pCtx,
     272                                        uint32_t offVRAMBuffer,
     273                                        uint32_t cbBuffer);
    269274RTDECL(void) VBoxHGSMIProcessDisplayInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
    270275                                         uint32_t cDisplay,
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/enable.c

    r34438 r34665  
    912912        {
    913913            PPDEV ppdev = (PPDEV) dhpdev;
    914             VBoxVBVADisable(&ppdev->vbvaCtx, &ppdev->guestCtx);
     914            VBoxVBVADisable(&ppdev->vbvaCtx, &ppdev->guestCtx, -1);
    915915        }
    916916
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c

    r34438 r34665  
    244244    /* Update buffer layout in VBVA context information.  Shouldn't this get
    245245     * zeroed if initialising the HGSMI heap fails? */
    246     ppdev->vbvaCtx.offVRAMBuffer = ppdev->layout.offVBVABuffer;
    247     ppdev->vbvaCtx.cbBuffer = ppdev->layout.cbVBVABuffer;
     246    VBoxVBVASetupBufferContext(&ppdev->vbvaCtx, ppdev->layout.offVBVABuffer,
     247                               ppdev->layout.cbVBVABuffer);
    248248
    249249    DISPDBG((0, "vboxInitVBoxVideo:\n"
     
    412412            ppdev->bHGSMISupported = VBoxVBVAEnable(&ppdev->vbvaCtx,
    413413                                                    &ppdev->guestCtx,
    414                                                     pVBVA);
     414                                                    pVBVA, -1);
    415415            LogRel(("VBoxDisp[%d]: VBVA %senabled\n", ppdev->iDevice, ppdev->bHGSMISupported? "": "not "));
    416416        }
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp

    r34429 r34665  
    30333033
    30343034#ifndef VBOX_WITH_WDDM
    3035 DECLCALLBACK(int) vbvaInitInfoDisplay (void *pvData, PVBVAINFOVIEW p)
     3035DECLCALLBACK(int) vbvaInitInfoDisplay (void *pvData, struct VBVAINFOVIEW *p,
     3036                                       uint32_t cViews)
    30363037{
    30373038    PDEVICE_EXTENSION PrimaryExtension = (PDEVICE_EXTENSION) pvData;
    30383039
    3039     int i;
     3040    unsigned i;
    30403041    PDEVICE_EXTENSION Extension;
    30413042
    3042     for (i = 0, Extension = PrimaryExtension;
    3043          i < commonFromDeviceExt(PrimaryExtension)->cDisplays && Extension;
     3043    for (i = 0, Extension = PrimaryExtension; i < cViews && Extension;
    30443044         i++, Extension = Extension->pNext)
    30453045    {
  • trunk/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp

    r34430 r34665  
    324324    {
    325325        VBVAINFOVIEW *pInfo = (VBVAINFOVIEW *)p;
    326         rc = pfnFill(pvData, pInfo);
     326        rc = pfnFill(pvData, pInfo, u32Count);
    327327        if (RT_SUCCESS(rc))
    328328            VBoxHGSMIBufferSubmit (pCtx, p);
     
    337337/**
    338338 * Get the information needed to map the basic communication structures in
    339  * device memory into our address space.
     339 * device memory into our address space.  All pointer parameters are optional.
    340340 *
    341341 * @param  cbVRAM               how much video RAM is allocated to the device
    342342 * @param  poffVRAMBaseMapping  where to save the offset from the start of the
    343  *                              device VRAM of the whole area to map 
     343 *                              device VRAM of the whole area to map
    344344 * @param  pcbMapping           where to save the mapping size
    345345 * @param  poffGuestHeapMemory  where to save the offset into the mapped area
     
    357357                                         uint32_t *poffHostFlags)
    358358{
    359     AssertPtrReturnVoid(poffVRAMBaseMapping);
    360     AssertPtrReturnVoid(pcbMapping);
    361     AssertPtrReturnVoid(poffGuestHeapMemory);
    362     AssertPtrReturnVoid(pcbGuestHeapMemory);
    363     AssertPtrReturnVoid(poffHostFlags);
    364     *poffVRAMBaseMapping = cbVRAM - VBVA_ADAPTER_INFORMATION_SIZE;
    365     *pcbMapping = VBVA_ADAPTER_INFORMATION_SIZE;
    366     *poffGuestHeapMemory = 0;
    367     *pcbGuestHeapMemory = VBVA_ADAPTER_INFORMATION_SIZE - sizeof(HGSMIHOSTFLAGS);
    368     *poffHostFlags = VBVA_ADAPTER_INFORMATION_SIZE - sizeof(HGSMIHOSTFLAGS);
     359    AssertPtrNullReturnVoid(poffVRAMBaseMapping);
     360    AssertPtrNullReturnVoid(pcbMapping);
     361    AssertPtrNullReturnVoid(poffGuestHeapMemory);
     362    AssertPtrNullReturnVoid(pcbGuestHeapMemory);
     363    AssertPtrNullReturnVoid(poffHostFlags);
     364    if (poffVRAMBaseMapping)
     365        *poffVRAMBaseMapping = cbVRAM - VBVA_ADAPTER_INFORMATION_SIZE;
     366    if (pcbMapping)
     367        *pcbMapping = VBVA_ADAPTER_INFORMATION_SIZE;
     368    if (poffGuestHeapMemory)
     369        *poffGuestHeapMemory = 0;
     370    if (pcbGuestHeapMemory)
     371        *pcbGuestHeapMemory =   VBVA_ADAPTER_INFORMATION_SIZE
     372                              - sizeof(HGSMIHOSTFLAGS);
     373    if (poffHostFlags)
     374        *poffHostFlags =   VBVA_ADAPTER_INFORMATION_SIZE
     375                         - sizeof(HGSMIHOSTFLAGS);
    369376}
    370377
  • trunk/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp

    r34440 r34665  
    4949static bool vboxVBVAInformHost(PVBVABUFFERCONTEXT pCtx,
    5050                               PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
    51                                bool bEnable)
     51                               int32_t cScreen, bool bEnable)
    5252{
    5353    bool bRc = false;
     
    5858    {
    5959        void *p = VBoxHGSMIBufferAlloc(pHGSMICtx,
    60                                        sizeof (VBVAENABLE),
     60                                       sizeof (VBVAENABLE_EX),
    6161                                       HGSMI_CH_VBVA,
    6262                                       VBVA_ENABLE);
     
    6767        else
    6868        {
    69             VBVAENABLE *pEnable = (VBVAENABLE *)p;
    70 
    71             pEnable->u32Flags  = bEnable? VBVA_F_ENABLE: VBVA_F_DISABLE;
    72             pEnable->u32Offset = pCtx->offVRAMBuffer;
    73             pEnable->i32Result = VERR_NOT_SUPPORTED;
     69            VBVAENABLE_EX *pEnable = (VBVAENABLE_EX *)p;
     70
     71            pEnable->Base.u32Flags  = bEnable? VBVA_F_ENABLE: VBVA_F_DISABLE;
     72            pEnable->Base.u32Offset = pCtx->offVRAMBuffer;
     73            pEnable->Base.i32Result = VERR_NOT_SUPPORTED;
     74            if (cScreen >= 0)
     75            {
     76                pEnable->Base.u32Flags |= VBVA_F_EXTENDED | VBVA_F_ABSOFFSET;
     77                pEnable->u32ScreenId    = cScreen;
     78            }
    7479
    7580            VBoxHGSMIBufferSubmit(pHGSMICtx, p);
     
    7782            if (bEnable)
    7883            {
    79                 bRc = RT_SUCCESS(pEnable->i32Result);
     84                bRc = RT_SUCCESS(pEnable->Base.i32Result);
    8085            }
    8186            else
     
    96101RTDECL(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx,
    97102                            PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
    98                             VBVABUFFER *pVBVA)
     103                            VBVABUFFER *pVBVA, int32_t cScreen)
    99104{
    100105    bool bRc = false;
     
    122127        pCtx->pVBVA      = pVBVA;
    123128
    124         bRc = vboxVBVAInformHost(pCtx, pHGSMICtx, true);
     129        bRc = vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, true);
    125130    }
    126131
    127132    if (!bRc)
    128133    {
    129         VBoxVBVADisable(pCtx, pHGSMICtx);
     134        VBoxVBVADisable(pCtx, pHGSMICtx, cScreen);
    130135    }
    131136
     
    134139
    135140RTDECL(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx,
    136                              PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx)
     141                             PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
     142                             int32_t cScreen)
    137143{
    138144    LogFlowFunc(("\n"));
     
    142148    pCtx->pVBVA             = NULL;
    143149
    144     vboxVBVAInformHost(pCtx, pHGSMICtx, false);
     150    vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, false);
    145151
    146152    return;
     
    374380
    375381    return false;
     382}
     383
     384RTDECL(void) VBoxVBVASetupBufferContext(PVBVABUFFERCONTEXT pCtx,
     385                                        uint32_t offVRAMBuffer,
     386                                        uint32_t cbBuffer)
     387{
     388    pCtx->offVRAMBuffer = offVRAMBuffer;
     389    pCtx->cbBuffer      = cbBuffer;
    376390}
    377391
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