Changeset 31763 in vbox for trunk/src/VBox/Additions/WINNT
- Timestamp:
- Aug 18, 2010 1:59:09 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 64945
- 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 346 346 347 347 348 int vboxVbvaReportDirtyRect (PDEVICE_EXTENSION pDevExt, VBOXVBVAINFO *pVbva, RECT *pRectOrig)348 int vboxVbvaReportDirtyRect (PDEVICE_EXTENSION pDevExt, PVBOXWDDM_SOURCE pSrc, RECT *pRectOrig) 349 349 { 350 350 VBVACMDHDR hdr; … … 352 352 RECT rect = *pRectOrig; 353 353 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; 356 356 // if (rect.right > (int)ppdev->cxScreen) rect.right = ppdev->cxScreen; 357 357 // if (rect.bottom > (int)ppdev->cyScreen) rect.bottom = ppdev->cyScreen; … … 362 362 hdr.h = (uint16_t)(rect.bottom - rect.top); 363 363 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)); 368 368 } 369 369 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVbva.h
r30953 r31763 29 29 int vboxVbvaCreate(struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, ULONG offBuffer, ULONG cbBuffer, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId); 30 30 int vboxVbvaReportCmdOffset (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, uint32_t offCmd); 31 int vboxVbvaReportDirtyRect (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva, RECT *pRectOrig);31 int vboxVbvaReportDirtyRect (struct _DEVICE_EXTENSION* pDevExt, struct VBOXWDDM_SOURCE *pSrc, RECT *pRectOrig); 32 32 BOOL vboxVbvaBufferBeginUpdate (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva); 33 33 void vboxVbvaBufferEndUpdate (struct _DEVICE_EXTENSION* pDevExt, VBOXVBVAINFO *pVbva); 34 34 35 #define VBOXVBVA_OP(_op, _pdext, _p vbva, _arg) \35 #define VBOXVBVA_OP(_op, _pdext, _psrc, _arg) \ 36 36 do { \ 37 if (vboxVbvaBufferBeginUpdate(_pdext, _pvbva)) \37 if (vboxVbvaBufferBeginUpdate(_pdext, &(_psrc)->Vbva)) \ 38 38 { \ 39 vboxVbva##_op(_pdext, _p vbva, _arg); \40 vboxVbvaBufferEndUpdate(_pdext, _pvbva); \39 vboxVbva##_op(_pdext, _psrc, _arg); \ 40 vboxVbvaBufferEndUpdate(_pdext, &(_psrc)->Vbva); \ 41 41 } \ 42 42 } while (0) 43 43 44 #define VBOXVBVA_OP_WITHLOCK_ATDPC(_op, _pdext, _p vbva, _arg) \44 #define VBOXVBVA_OP_WITHLOCK_ATDPC(_op, _pdext, _psrc, _arg) \ 45 45 do { \ 46 KeAcquireSpinLockAtDpcLevel(&(_p vbva)->Lock); \47 VBOXVBVA_OP(_op, _pdext, _p vbva, _arg); \48 KeReleaseSpinLockFromDpcLevel(&(_p vbva)->Lock);\46 KeAcquireSpinLockAtDpcLevel(&(_psrc)->Vbva.Lock); \ 47 VBOXVBVA_OP(_op, _pdext, _psrc, _arg); \ 48 KeReleaseSpinLockFromDpcLevel(&(_psrc)->Vbva.Lock);\ 49 49 } while (0) 50 50 51 #define VBOXVBVA_OP_WITHLOCK(_op, _pdext, _p vbva, _arg) \51 #define VBOXVBVA_OP_WITHLOCK(_op, _pdext, _psrc, _arg) \ 52 52 do { \ 53 53 KIRQL OldIrql; \ 54 KeAcquireSpinLock(&(_p vbva)->Lock, &OldIrql); \55 VBOXVBVA_OP(_op, _pdext, _p vbva, _arg); \56 KeReleaseSpinLock(&(_p vbva)->Lock, OldIrql); \54 KeAcquireSpinLock(&(_psrc)->Vbva.Lock, &OldIrql); \ 55 VBOXVBVA_OP(_op, _pdext, _psrc, _arg); \ 56 KeReleaseSpinLock(&(_psrc)->Vbva.Lock, OldIrql); \ 57 57 } while (0) 58 58 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVdma.cpp
r31687 r31763 562 562 { 563 563 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); 566 565 } 567 566 } -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r31756 r31763 2124 2124 vboxWddmCheckUpdateShadowAddress(pDevExt, pSource, pPrivateData->SrcAllocInfo.segmentIdAlloc, pPrivateData->SrcAllocInfo.offAlloc); 2125 2125 PVBOXWDDM_DMA_PRESENT_RENDER_FROM_SHADOW pRFS = (PVBOXWDDM_DMA_PRESENT_RENDER_FROM_SHADOW)pPrivateData; 2126 vboxWddmRectTranslate(&pRFS->rect, pSource->VScreenPos.x, pSource->VScreenPos.y);2127 2126 uint32_t cDMACmdsOutstanding = ASMAtomicReadU32(&pDevExt->cDMACmdsOutstanding); 2128 2127 if (!cDMACmdsOutstanding) 2129 VBOXVBVA_OP(ReportDirtyRect, pDevExt, &pSource->Vbva, &pRFS->rect);2128 VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &pRFS->rect); 2130 2129 else 2131 2130 { 2132 2131 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); 2134 2133 } 2135 2134 /* get DPC data at IRQL */ … … 2177 2176 rect = pBlt->DstRects.ContextRect; 2178 2177 2179 vboxWddmRectTranslate(&rect, pSource->VScreenPos.x, pSource->VScreenPos.y);2180 2181 2178 uint32_t cDMACmdsOutstanding = ASMAtomicReadU32(&pDevExt->cDMACmdsOutstanding); 2182 2179 if (!cDMACmdsOutstanding) 2183 VBOXVBVA_OP(ReportDirtyRect, pDevExt, &pSource->Vbva, &rect);2180 VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &rect); 2184 2181 else 2185 2182 { 2186 2183 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); 2187 VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, &pSource->Vbva, &rect);2184 VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, pSource, &rect); 2188 2185 } 2189 2186 vboxWddmSubmitBltCmd(pDevExt, pSource, pContext, pBlt);
Note:
See TracChangeset
for help on using the changeset viewer.