VirtualBox

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


Ignore:
Timestamp:
Aug 18, 2010 1:59:09 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
64945
Message:

wddm: multimonitor fixes

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVbva.cpp

    r30953 r31763  
    346346
    347347
    348 int vboxVbvaReportDirtyRect (PDEVICE_EXTENSION pDevExt, VBOXVBVAINFO *pVbva, RECT *pRectOrig)
     348int vboxVbvaReportDirtyRect (PDEVICE_EXTENSION pDevExt, PVBOXWDDM_SOURCE pSrc, RECT *pRectOrig)
    349349{
    350350        VBVACMDHDR hdr;
     
    352352        RECT rect = *pRectOrig;
    353353
    354         if (rect.left < 0) rect.left = 0;
    355         if (rect.top < 0) rect.top = 0;
     354//        if (rect.left < 0) rect.left = 0;
     355//        if (rect.top < 0) rect.top = 0;
    356356//        if (rect.right > (int)ppdev->cxScreen) rect.right = ppdev->cxScreen;
    357357//        if (rect.bottom > (int)ppdev->cyScreen) rect.bottom = ppdev->cyScreen;
     
    362362        hdr.h = (uint16_t)(rect.bottom - rect.top);
    363363
    364 //        hdr.x += (int16_t)ppdev->ptlDevOrg.x;
    365 //        hdr.y += (int16_t)ppdev->ptlDevOrg.y;
    366 
    367         return vboxWrite (pDevExt, pVbva, &hdr, sizeof(hdr));
     364        hdr.x += (int16_t)pSrc->VScreenPos.x;
     365        hdr.y += (int16_t)pSrc->VScreenPos.y;
     366
     367        return vboxWrite (pDevExt, &pSrc->Vbva, &hdr, sizeof(hdr));
    368368}
    369369
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVbva.h

    r30953 r31763  
    2929int vboxVbvaCreate(struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, ULONG offBuffer, ULONG cbBuffer, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId);
    3030int vboxVbvaReportCmdOffset (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, uint32_t offCmd);
    31 int vboxVbvaReportDirtyRect (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, RECT *pRectOrig);
     31int vboxVbvaReportDirtyRect (struct _DEVICE_EXTENSION* pDevExt, struct VBOXWDDM_SOURCE *pSrc, RECT *pRectOrig);
    3232BOOL vboxVbvaBufferBeginUpdate (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva);
    3333void vboxVbvaBufferEndUpdate (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva);
    3434
    35 #define VBOXVBVA_OP(_op, _pdext, _pvbva, _arg) \
     35#define VBOXVBVA_OP(_op, _pdext, _psrc, _arg) \
    3636        do { \
    37             if (vboxVbvaBufferBeginUpdate(_pdext, _pvbva)) \
     37            if (vboxVbvaBufferBeginUpdate(_pdext, &(_psrc)->Vbva)) \
    3838            { \
    39                 vboxVbva##_op(_pdext, _pvbva, _arg); \
    40                 vboxVbvaBufferEndUpdate(_pdext, _pvbva); \
     39                vboxVbva##_op(_pdext, _psrc, _arg); \
     40                vboxVbvaBufferEndUpdate(_pdext, &(_psrc)->Vbva); \
    4141            } \
    4242        } while (0)
    4343
    44 #define VBOXVBVA_OP_WITHLOCK_ATDPC(_op, _pdext, _pvbva, _arg) \
     44#define VBOXVBVA_OP_WITHLOCK_ATDPC(_op, _pdext, _psrc, _arg) \
    4545        do { \
    46             KeAcquireSpinLockAtDpcLevel(&(_pvbva)->Lock);  \
    47             VBOXVBVA_OP(_op, _pdext, _pvbva, _arg);        \
    48             KeReleaseSpinLockFromDpcLevel(&(_pvbva)->Lock);\
     46            KeAcquireSpinLockAtDpcLevel(&(_psrc)->Vbva.Lock);  \
     47            VBOXVBVA_OP(_op, _pdext, _psrc, _arg);        \
     48            KeReleaseSpinLockFromDpcLevel(&(_psrc)->Vbva.Lock);\
    4949        } while (0)
    5050
    51 #define VBOXVBVA_OP_WITHLOCK(_op, _pdext, _pvbva, _arg) \
     51#define VBOXVBVA_OP_WITHLOCK(_op, _pdext, _psrc, _arg) \
    5252        do { \
    5353            KIRQL OldIrql; \
    54             KeAcquireSpinLock(&(_pvbva)->Lock, &OldIrql);  \
    55             VBOXVBVA_OP(_op, _pdext, _pvbva, _arg);        \
    56             KeReleaseSpinLock(&(_pvbva)->Lock, OldIrql);   \
     54            KeAcquireSpinLock(&(_psrc)->Vbva.Lock, &OldIrql);  \
     55            VBOXVBVA_OP(_op, _pdext, _psrc, _arg);        \
     56            KeReleaseSpinLock(&(_psrc)->Vbva.Lock, OldIrql);   \
    5757        } while (0)
    5858
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVdma.cpp

    r31687 r31763  
    562562                    {
    563563                        PVBOXWDDM_SOURCE pSource = &pDevExt->aSources[pCF->VidPnSourceId];
    564                         vboxWddmRectTranslate(&UnionRect, pSource->VScreenPos.x, pSource->VScreenPos.y);
    565                         VBOXVBVA_OP_WITHLOCK(ReportDirtyRect, pDevExt, &pSource->Vbva, &UnionRect);
     564                        VBOXVBVA_OP_WITHLOCK(ReportDirtyRect, pDevExt, pSource, &UnionRect);
    566565                    }
    567566                }
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp

    r31756 r31763  
    21242124            vboxWddmCheckUpdateShadowAddress(pDevExt, pSource, pPrivateData->SrcAllocInfo.segmentIdAlloc, pPrivateData->SrcAllocInfo.offAlloc);
    21252125            PVBOXWDDM_DMA_PRESENT_RENDER_FROM_SHADOW pRFS = (PVBOXWDDM_DMA_PRESENT_RENDER_FROM_SHADOW)pPrivateData;
    2126             vboxWddmRectTranslate(&pRFS->rect, pSource->VScreenPos.x, pSource->VScreenPos.y);
    21272126            uint32_t cDMACmdsOutstanding = ASMAtomicReadU32(&pDevExt->cDMACmdsOutstanding);
    21282127            if (!cDMACmdsOutstanding)
    2129                 VBOXVBVA_OP(ReportDirtyRect, pDevExt, &pSource->Vbva, &pRFS->rect);
     2128                VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &pRFS->rect);
    21302129            else
    21312130            {
    21322131                Assert(KeGetCurrentIrql() == DISPATCH_LEVEL);
    2133                 VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, &pSource->Vbva, &pRFS->rect);
     2132                VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, pSource, &pRFS->rect);
    21342133            }
    21352134            /* get DPC data at IRQL */
     
    21772176                                    rect = pBlt->DstRects.ContextRect;
    21782177
    2179                                 vboxWddmRectTranslate(&rect, pSource->VScreenPos.x, pSource->VScreenPos.y);
    2180 
    21812178                                uint32_t cDMACmdsOutstanding = ASMAtomicReadU32(&pDevExt->cDMACmdsOutstanding);
    21822179                                if (!cDMACmdsOutstanding)
    2183                                     VBOXVBVA_OP(ReportDirtyRect, pDevExt, &pSource->Vbva, &rect);
     2180                                    VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &rect);
    21842181                                else
    21852182                                {
    21862183                                    Assert(KeGetCurrentIrql() == DISPATCH_LEVEL);
    2187                                     VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, &pSource->Vbva, &rect);
     2184                                    VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, pSource, &rect);
    21882185                                }
    21892186                                vboxWddmSubmitBltCmd(pDevExt, pSource, pContext, pBlt);
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