- Timestamp:
- Aug 5, 2016 3:36:51 PM (9 years ago)
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCm.cpp
r62522 r63053 1 1 /* $Id$ */ 2 3 2 /** @file 4 3 * VBox WDDM Miniport driver … … 128 127 } 129 128 130 static DECLCALLBACK(VOID) vboxVideoCmCmdCbSetEventAndDereference(PVBOXVIDEOCM_CTX pContext, PVBOXVIDEOCM_CMD_CTL_KM pCmd, PVOID pvContext) 131 { 129 static DECLCALLBACK(VOID) vboxVideoCmCmdCbSetEventAndDereference(PVBOXVIDEOCM_CTX pContext, PVBOXVIDEOCM_CMD_CTL_KM pCmd, 130 PVOID pvContext) 131 { 132 RT_NOREF(pContext); 132 133 PKEVENT pEvent = (PKEVENT)pvContext; 133 134 KeSetEvent(pEvent, 0, FALSE); … … 221 222 } 222 223 223 NTSTATUS vboxVideoCmCmdVisit(PVBOXVIDEOCM_CTX pContext, BOOLEAN bEntireSession, PFNVBOXVIDEOCMCMDVISITOR pfnVisitor, PVOID pvVisitor) 224 NTSTATUS vboxVideoCmCmdVisit(PVBOXVIDEOCM_CTX pContext, BOOLEAN bEntireSession, PFNVBOXVIDEOCMCMDVISITOR pfnVisitor, 225 PVOID pvVisitor) 224 226 { 225 227 PVBOXVIDEOCM_SESSION pSession = pContext->pSession; … … 397 399 398 400 /* the session gets destroyed once the last context is removed from it */ 399 NTSTATUS vboxVideoCmSessionCreateLocked(PVBOXVIDEOCM_MGR pMgr, PVBOXVIDEOCM_SESSION *ppSession, PKEVENT pUmEvent, PVBOXVIDEOCM_CTX pContext) 401 NTSTATUS vboxVideoCmSessionCreateLocked(PVBOXVIDEOCM_MGR pMgr, PVBOXVIDEOCM_SESSION *ppSession, PKEVENT pUmEvent, 402 PVBOXVIDEOCM_CTX pContext) 400 403 { 401 404 NTSTATUS Status = STATUS_UNSUCCESSFUL; … … 501 504 NTSTATUS vboxVideoCmTerm(PVBOXVIDEOCM_MGR pMgr) 502 505 { 506 RT_NOREF(pMgr); 503 507 Assert(IsListEmpty(&pMgr->SessionList)); 504 508 return STATUS_SUCCESS; … … 565 569 LIST_ENTRY DetachedPpList; 566 570 PLIST_ENTRY pCurEntry = NULL; 567 uint32_t cbCmdsReturned = 0;568 571 uint32_t cbRemainingCmds = 0; 569 572 uint32_t cbRemainingFirstCmd = 0; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp
r63039 r63053 45 45 static VBOXVIDEOOFFSET vboxMpCrShgsmiBufferOffset(PVBOXMP_DEVEXT pDevExt, void *pvBuffer) 46 46 { 47 return (VBOXVIDEOOFFSET)HGSMIPointerToOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, (const HGSMIBUFFERHEADER *)pvBuffer); 47 return (VBOXVIDEOOFFSET)HGSMIPointerToOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, 48 (const HGSMIBUFFERHEADER *)pvBuffer); 48 49 } 49 50 … … 78 79 } 79 80 80 static int vboxMpCrShgsmiBufCacheBufReinit(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, PVBOXMP_CRSHGSMICON_BUFDR pDr, uint32_t cbRequested) 81 { 81 static int vboxMpCrShgsmiBufCacheBufReinit(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, 82 PVBOXMP_CRSHGSMICON_BUFDR pDr, uint32_t cbRequested) 83 { 84 RT_NOREF(pCache); 82 85 if (pDr->cbBuf >= cbRequested) 83 86 return VINF_SUCCESS; … … 98 101 } 99 102 100 static void vboxMpCrShgsmiBufCacheFree(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, PVBOXMP_CRSHGSMICON_BUFDR pDr) 103 static void vboxMpCrShgsmiBufCacheFree(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, 104 PVBOXMP_CRSHGSMICON_BUFDR pDr) 101 105 { 102 106 if (ASMAtomicCmpXchgPtr(&pCache->pBufDr, pDr, NULL)) … … 123 127 } 124 128 125 static PVBOXMP_CRSHGSMICON_BUFDR vboxMpCrShgsmiBufCacheAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, uint32_t cbBuffer) 129 static PVBOXMP_CRSHGSMICON_BUFDR vboxMpCrShgsmiBufCacheAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, 130 PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, uint32_t cbBuffer) 126 131 { 127 132 PVBOXMP_CRSHGSMICON_BUFDR pBufDr = vboxMpCrShgsmiBufCacheGetAllocDr(pCache); … … 136 141 } 137 142 138 static PVBOXMP_CRSHGSMICON_BUFDR vboxMpCrShgsmiBufCacheAllocAny(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, uint32_t cbBuffer) 143 static PVBOXMP_CRSHGSMICON_BUFDR vboxMpCrShgsmiBufCacheAllocAny(PVBOXMP_CRSHGSMITRANSPORT pCon, 144 PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache, uint32_t cbBuffer) 139 145 { 140 146 PVBOXMP_CRSHGSMICON_BUFDR pBufDr = vboxMpCrShgsmiBufCacheGetAllocDr(pCache); … … 156 162 static int vboxMpCrShgsmiBufCacheInit(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXMP_CRSHGSMICON_BUFDR_CACHE pCache) 157 163 { 164 RT_NOREF(pCon); 158 165 memset(pCache, 0, sizeof (*pCache)); 159 166 return VINF_SUCCESS; … … 171 178 pCon->pDevExt = pDevExt; 172 179 return VINF_SUCCESS; 180 #if 0 /** @todo should this be unreachable? */ 173 181 int rc; 174 182 // int rc = vboxMpCrShgsmiBufCacheInit(pCon, &pCon->CmdDrCache); … … 191 199 192 200 return rc; 201 #endif 193 202 } 194 203 … … 224 233 225 234 226 #define VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers) VBOXWDDM_ROUNDBOUND(RT_OFFSETOF(VBOXVDMACMD_CHROMIUM_CMD, aBuffers[_cBuffers]), 8) 227 #define VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) ( VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers) + VBOXWDDM_ROUNDBOUND(_cbCmdBuf, 8)) 228 #define VBOXMP_CRSHGSMICON_CMD_GET_CMDBUF(_pCmd, _cBuffers, _type) ((_type*)(((uint8_t*)(_pCmd)) + VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers))) 229 #define VBOXMP_CRSHGSMICON_CMD_GET_CMDCTX(_pCmd, _cBuffers, _cbCmdBuf, _type) ((_type*)(((uint8_t*)(_pCmd)) + VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 230 #define VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(_pCtx, _cBuffers, _cbCmdBuf, _type) ((_type*)(((uint8_t*)(_pCtx)) - VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 231 #define VBOXMP_CRSHGSMICON_CMD_SIZE(_cBuffers, _cbCmdBuf, _cbCtx) (VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) + (_cbCtx)) 232 233 234 #define VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers) VBOXWDDM_ROUNDBOUND((VBOXVDMACMD_SIZE_FROMBODYSIZE(RT_OFFSETOF(VBOXVDMACMD_CHROMIUM_CMD, aBuffers[_cBuffers]))), 8) 235 #define VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) ( VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers) + VBOXWDDM_ROUNDBOUND(_cbCmdBuf, 8)) 236 #define VBOXMP_CRSHGSMICON_DR_GET_CRCMD(_pDr) (VBOXVDMACMD_BODY((_pDr), VBOXVDMACMD_CHROMIUM_CMD)) 237 #define VBOXMP_CRSHGSMICON_DR_GET_CMDBUF(_pDr, _cBuffers, _type) ((_type*)(((uint8_t*)(_pDr)) + VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers))) 238 #define VBOXMP_CRSHGSMICON_DR_GET_CMDCTX(_pDr, _cBuffers, _cbCmdBuf, _type) ((_type*)(((uint8_t*)(_pDr)) + VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 239 #define VBOXMP_CRSHGSMICON_DR_GET_FROM_CMDCTX(_pCtx, _cBuffers, _cbCmdBuf) ((VBOXVDMACMD*)(((uint8_t*)(_pCtx)) - VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 240 #define VBOXMP_CRSHGSMICON_DR_SIZE(_cBuffers, _cbCmdBuf, _cbCtx) (VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) + (_cbCtx)) 241 242 243 static int vboxMpCrShgsmiTransportCmdSubmitDr(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXVDMACBUF_DR pDr, PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete) 235 #define VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers) \ 236 VBOXWDDM_ROUNDBOUND(RT_OFFSETOF(VBOXVDMACMD_CHROMIUM_CMD, aBuffers[_cBuffers]), 8) 237 #define VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) \ 238 ( VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers) + VBOXWDDM_ROUNDBOUND(_cbCmdBuf, 8)) 239 #define VBOXMP_CRSHGSMICON_CMD_GET_CMDBUF(_pCmd, _cBuffers, _type) \ 240 ((_type*)(((uint8_t*)(_pCmd)) + VBOXMP_CRSHGSMICON_CMD_CMDBUF_OFFSET(_cBuffers))) 241 #define VBOXMP_CRSHGSMICON_CMD_GET_CMDCTX(_pCmd, _cBuffers, _cbCmdBuf, _type) \ 242 ((_type*)(((uint8_t*)(_pCmd)) + VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 243 #define VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(_pCtx, _cBuffers, _cbCmdBuf, _type) \ 244 ((_type*)(((uint8_t*)(_pCtx)) - VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 245 #define VBOXMP_CRSHGSMICON_CMD_SIZE(_cBuffers, _cbCmdBuf, _cbCtx) \ 246 (VBOXMP_CRSHGSMICON_CMD_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) + (_cbCtx)) 247 248 249 #define VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers) \ 250 VBOXWDDM_ROUNDBOUND((VBOXVDMACMD_SIZE_FROMBODYSIZE(RT_OFFSETOF(VBOXVDMACMD_CHROMIUM_CMD, aBuffers[_cBuffers]))), 8) 251 #define VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) \ 252 ( VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers) + VBOXWDDM_ROUNDBOUND(_cbCmdBuf, 8)) 253 #define VBOXMP_CRSHGSMICON_DR_GET_CRCMD(_pDr) \ 254 (VBOXVDMACMD_BODY((_pDr), VBOXVDMACMD_CHROMIUM_CMD)) 255 #define VBOXMP_CRSHGSMICON_DR_GET_CMDBUF(_pDr, _cBuffers, _type) \ 256 ((_type*)(((uint8_t*)(_pDr)) + VBOXMP_CRSHGSMICON_DR_CMDBUF_OFFSET(_cBuffers))) 257 #define VBOXMP_CRSHGSMICON_DR_GET_CMDCTX(_pDr, _cBuffers, _cbCmdBuf, _type) \ 258 ((_type*)(((uint8_t*)(_pDr)) + VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 259 #define VBOXMP_CRSHGSMICON_DR_GET_FROM_CMDCTX(_pCtx, _cBuffers, _cbCmdBuf) \ 260 ((VBOXVDMACMD*)(((uint8_t*)(_pCtx)) - VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf))) 261 #define VBOXMP_CRSHGSMICON_DR_SIZE(_cBuffers, _cbCmdBuf, _cbCtx) \ 262 (VBOXMP_CRSHGSMICON_DR_CMDCTX_OFFSET(_cBuffers, _cbCmdBuf) + (_cbCtx)) 263 264 265 static int vboxMpCrShgsmiTransportCmdSubmitDr(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXVDMACBUF_DR pDr, 266 PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete) 244 267 { 245 268 … … 259 282 } 260 283 261 static int vboxMpCrShgsmiTransportCmdSubmitDmaCmd(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXVDMACMD pHdr, PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete) 284 static int vboxMpCrShgsmiTransportCmdSubmitDmaCmd(PVBOXMP_CRSHGSMITRANSPORT pCon, PVBOXVDMACMD pHdr, 285 PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete) 262 286 { 263 287 PVBOXVDMACBUF_DR pDr = VBOXVDMACBUF_DR_FROM_TAIL(pHdr); … … 273 297 274 298 275 typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvRx, uint32_t cbRx, void *pvCtx); 299 typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 300 void *pvRx, uint32_t cbRx, void *pvCtx); 276 301 typedef FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION *PFNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION; 277 302 278 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportSendReadAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, PVOID pvContext) 279 { 303 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportSendReadAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, 304 PVOID pvContext) 305 { 306 RT_NOREF(pDevExt); 280 307 /* we should be called from our DPC routine */ 281 308 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); … … 327 354 } 328 355 329 static void* vboxMpCrShgsmiTransportCmdCreateReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, PVBOXVDMACBUF_DR pDr, uint32_t cbDrData, PVBOXMP_CRSHGSMICON_BUFDR pWbDr, 330 PFNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION pfnCompletion, uint32_t cbContextData) 331 { 356 static void* vboxMpCrShgsmiTransportCmdCreateReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, PVBOXVDMACBUF_DR pDr, 357 uint32_t cbDrData, PVBOXMP_CRSHGSMICON_BUFDR pWbDr, 358 PFNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION pfnCompletion, 359 uint32_t cbContextData) 360 { 361 RT_NOREF(cbDrData); 332 362 const uint32_t cBuffers = 2; 333 363 const uint32_t cbCmd = VBOXMP_CRSHGSMICON_DR_SIZE(cBuffers, sizeof (VBOXMP_CRHGSMICMD_READ), cbContextData); 334 PVBOXMP_DEVEXT pDevExt = pCon->pDevExt;335 364 PVBOXVDMACMD pHdr = VBOXVDMACBUF_DR_TAIL(pDr, VBOXVDMACMD); 336 365 VBOXVDMACMD_CHROMIUM_CMD *pBody = VBOXMP_CRSHGSMICON_DR_GET_CRCMD(pHdr); … … 390 419 } VBOXMP_CRHGSMICON_WRR_COMPLETION_CTX, *PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX; 391 420 392 static DECLCALLBACK(void) vboxMpCrShgsmiTransportSendWriteReadReadRepostCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvRx, uint32_t cbRx, void *pvCtx) 421 static DECLCALLBACK(void) vboxMpCrShgsmiTransportSendWriteReadReadRepostCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 422 void *pvRx, uint32_t cbRx, void *pvCtx) 393 423 { 394 424 PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX pData = (PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX)pvCtx; … … 398 428 } 399 429 400 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportSendWriteReadAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, PVOID pvContext) 401 { 430 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportSendWriteReadAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, 431 PVOID pvContext) 432 { 433 RT_NOREF(pDevExt); 402 434 /* we should be called from our DPC routine */ 403 435 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); … … 439 471 { 440 472 /* the Read Command is shorter than WriteRead, so just reuse the Write-Read descriptor here */ 441 PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX pReadCtx = (PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX)vboxMpCrShgsmiTransportCmdCreateReadAsync(pCon, pCmd->hdr.u32ClientID, 442 pDr, VBOXMP_CRSHGSMICON_DR_SIZE(cBuffers, sizeof (VBOXMP_CRHGSMICMD_WRITEREAD), 0), 443 pWbDr, vboxMpCrShgsmiTransportSendWriteReadReadRepostCompletion, sizeof (*pReadCtx)); 473 PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX pReadCtx; 474 pReadCtx = (PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX)vboxMpCrShgsmiTransportCmdCreateReadAsync(pCon, 475 pCmd->hdr.u32ClientID, 476 pDr, 477 VBOXMP_CRSHGSMICON_DR_SIZE(cBuffers, sizeof(VBOXMP_CRHGSMICMD_WRITEREAD), 0), 478 pWbDr, 479 vboxMpCrShgsmiTransportSendWriteReadReadRepostCompletion, 480 sizeof(*pReadCtx)); 444 481 pReadCtx->pfnCompletion = pfnCompletion; 445 482 pReadCtx->pvContext = pvCtx; … … 476 513 } 477 514 478 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportVdmaSendWriteAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, PVOID pvContext) 479 { 515 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportVdmaSendWriteAsyncCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pDdiCmd, 516 PVOID pvContext) 517 { 518 RT_NOREF(pDevExt); 480 519 /* we should be called from our DPC routine */ 481 520 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); … … 516 555 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportVbvaSendWriteAsyncCompletion(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext) 517 556 { 557 RT_NOREF(pHeap); 518 558 /* we should be called from our DPC routine */ 519 559 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); 520 560 521 561 PVBOXMP_CRSHGSMITRANSPORT pCon = (PVBOXMP_CRSHGSMITRANSPORT)pvContext; 522 PVBOXMP_DEVEXT pDevExt = pCon->pDevExt;523 562 VBOXCMDVBVA_CRCMD_CMD *pCmd; 524 563 int rc = VBoxCmdVbvaConCmdCompletionData(pvCmd, &pCmd); 525 564 const UINT cBuffers = 2; 526 565 Assert(pCmd->cBuffers == cBuffers); 527 PVBOXMP_CRHGSMICMD_WRITE pWrData = VBOXMP_CRSHGSMICON_CMD_GET_CMDBUF(pCmd, cBuffers, VBOXMP_CRHGSMICMD_WRITE);528 566 uint64_t*pu64Completion = VBOXMP_CRSHGSMICON_CMD_GET_CMDCTX(pCmd, cBuffers, sizeof (VBOXMP_CRHGSMICMD_WRITE), uint64_t); 529 567 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion = (PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION)(*pu64Completion); … … 536 574 } 537 575 538 void* VBoxMpCrShgsmiTransportCmdCreateWriteReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer, 539 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION pfnCompletion, uint32_t cbContextData) 576 void* VBoxMpCrShgsmiTransportCmdCreateWriteReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, 577 uint32_t cbBuffer, 578 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION pfnCompletion, 579 uint32_t cbContextData) 540 580 { 541 581 const uint32_t cBuffers = 3; … … 602 642 } 603 643 604 static void * vboxMpCrShgsmiTransportCmdVbvaCreateWriteAsync(PVBOXMP_DEVEXT pDevExt, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer, PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, uint32_t cbContextData) 644 static void * vboxMpCrShgsmiTransportCmdVbvaCreateWriteAsync(PVBOXMP_DEVEXT pDevExt, uint32_t u32ClientID, void *pvBuffer, 645 uint32_t cbBuffer, 646 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, 647 uint32_t cbContextData) 605 648 { 606 649 const uint32_t cBuffers = 2; … … 637 680 } 638 681 639 void* vboxMpCrShgsmiTransportCmdVdmaCreateWriteAsync(PVBOXMP_DEVEXT pDevExt, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer, 640 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, uint32_t cbContextData) 682 void* vboxMpCrShgsmiTransportCmdVdmaCreateWriteAsync(PVBOXMP_DEVEXT pDevExt, uint32_t u32ClientID, void *pvBuffer, 683 uint32_t cbBuffer, 684 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, 685 uint32_t cbContextData) 641 686 { 642 687 const uint32_t cBuffers = 2; … … 685 730 } 686 731 687 void* VBoxMpCrShgsmiTransportCmdCreateWriteAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer, 688 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, uint32_t cbContextData) 732 void* VBoxMpCrShgsmiTransportCmdCreateWriteAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, 733 uint32_t cbBuffer, 734 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION pfnCompletion, 735 uint32_t cbContextData) 689 736 { 690 737 PVBOXMP_DEVEXT pDevExt = pCon->pDevExt; 691 738 if (pDevExt->fCmdVbvaEnabled) 692 return vboxMpCrShgsmiTransportCmdVbvaCreateWriteAsync(pDevExt, u32ClientID, pvBuffer, cbBuffer, pfnCompletion, cbContextData); 739 return vboxMpCrShgsmiTransportCmdVbvaCreateWriteAsync(pDevExt, u32ClientID, pvBuffer, cbBuffer, pfnCompletion, 740 cbContextData); 693 741 return vboxMpCrShgsmiTransportCmdVdmaCreateWriteAsync(pDevExt, u32ClientID, pvBuffer, cbBuffer, pfnCompletion, cbContextData); 694 742 } … … 709 757 { 710 758 PVBOXMP_DEVEXT pDevExt = pCon->pDevExt; 711 VBOXCMDVBVA_CRCMD_CMD* pCmd = VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(pvContext, 2, sizeof (VBOXMP_CRHGSMICMD_WRITE) + 8, VBOXCMDVBVA_CRCMD_CMD); 759 VBOXCMDVBVA_CRCMD_CMD* pCmd = VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(pvContext, 2, sizeof (VBOXMP_CRHGSMICMD_WRITE) + 8, 760 VBOXCMDVBVA_CRCMD_CMD); 712 761 return VBoxCmdVbvaConCmdSubmitAsync(pDevExt, pCmd, vboxMpCrShgsmiTransportVbvaSendWriteAsyncCompletion, pCon); 713 762 } … … 728 777 static void vboxMpCrShgsmiTransportCmdVbvaTermWriteAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvContext) 729 778 { 730 VBOXCMDVBVA_CRCMD_CMD* pCmd = VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(pvContext, 2, sizeof (VBOXMP_CRHGSMICMD_WRITE) + 8, VBOXCMDVBVA_CRCMD_CMD); 779 VBOXCMDVBVA_CRCMD_CMD* pCmd = VBOXMP_CRSHGSMICON_CMD_GET_FROM_CMDCTX(pvContext, 2, sizeof (VBOXMP_CRHGSMICMD_WRITE) + 8, 780 VBOXCMDVBVA_CRCMD_CMD); 731 781 VBoxCmdVbvaConCmdFree(pCon->pDevExt, pCmd); 732 782 } … … 1015 1065 int VBoxMpCrCtlConDisconnectVbva(PVBOXMP_DEVEXT pDevExt, PVBOXMP_CRCTLCON pCrCtlCon, uint32_t u32ClientID) 1016 1066 { 1067 RT_NOREF(pDevExt, pCrCtlCon); 1017 1068 Assert(!pCrCtlCon->hCrCtl); 1018 1069 Assert(!pCrCtlCon->cCrCtlRefs); … … 1127 1178 } 1128 1179 1129 #endif 1180 #endif /* VBOX_WITH_CROGL */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPShgsmi.cpp
r62522 r63053 1 1 /* $Id$ */ 2 3 2 /** @file 4 3 * VBox WDDM Miniport driver … … 21 20 22 21 /* SHGSMI */ 23 DECLINLINE(void) vboxSHGSMICommandRetain 22 DECLINLINE(void) vboxSHGSMICommandRetain(PVBOXSHGSMIHEADER pCmd) 24 23 { 25 24 ASMAtomicIncU32(&pCmd->cRefs); 26 25 } 27 26 28 void vboxSHGSMICommandFree 27 void vboxSHGSMICommandFree(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADER pCmd) 29 28 { 30 29 VBoxSHGSMIHeapFree(pHeap, pCmd); 31 30 } 32 31 33 DECLINLINE(void) vboxSHGSMICommandRelease 32 DECLINLINE(void) vboxSHGSMICommandRelease(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADER pCmd) 34 33 { 35 34 uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs); … … 41 40 static DECLCALLBACK(void) vboxSHGSMICompletionSetEvent(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext) 42 41 { 42 RT_NOREF(pHeap, pvCmd); 43 43 RTSemEventSignal((RTSEMEVENT)pvContext); 44 44 } … … 46 46 DECLCALLBACK(void) vboxSHGSMICompletionCommandRelease(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext) 47 47 { 48 vboxSHGSMICommandRelease (pHeap, VBoxSHGSMIBufferHeader(pvCmd)); 48 RT_NOREF(pvContext); 49 vboxSHGSMICommandRelease(pHeap, VBoxSHGSMIBufferHeader(pvCmd)); 49 50 } 50 51 51 52 /* do not wait for completion */ 52 DECLINLINE(const VBOXSHGSMIHEADER*) vboxSHGSMICommandPrepAsynch (PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADER pHeader) 53 { 53 DECLINLINE(const VBOXSHGSMIHEADER *) vboxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADER pHeader) 54 { 55 RT_NOREF(pHeap); 54 56 /* ensure the command is not removed until we're processing it */ 55 57 vboxSHGSMICommandRetain(pHeader); … … 57 59 } 58 60 59 DECLINLINE(void) vboxSHGSMICommandDoneAsynch 61 DECLINLINE(void) vboxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER* pHeader) 60 62 { 61 63 if(!(ASMAtomicReadU32((volatile uint32_t *)&pHeader->fFlags) & VBOXSHGSMI_FLAG_HG_ASYNCH)) … … 63 65 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion = (PFNVBOXSHGSMICMDCOMPLETION)pHeader->u64Info1; 64 66 if (pfnCompletion) 65 pfnCompletion(pHeap, VBoxSHGSMIBufferData 67 pfnCompletion(pHeap, VBoxSHGSMIBufferData(pHeader), (PVOID)pHeader->u64Info2); 66 68 } 67 69 … … 69 71 } 70 72 71 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchEvent 72 { 73 PVBOXSHGSMIHEADER pHeader = VBoxSHGSMIBufferHeader 73 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchEvent(PVBOXSHGSMI pHeap, PVOID pvBuff, RTSEMEVENT hEventSem) 74 { 75 PVBOXSHGSMIHEADER pHeader = VBoxSHGSMIBufferHeader(pvBuff); 74 76 pHeader->u64Info1 = (uint64_t)vboxSHGSMICompletionSetEvent; 75 77 pHeader->u64Info2 = (uint64_t)hEventSem; 76 78 pHeader->fFlags = VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ; 77 79 78 return vboxSHGSMICommandPrepAsynch 79 } 80 81 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepSynch 80 return vboxSHGSMICommandPrepAsynch(pHeap, pHeader); 81 } 82 83 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepSynch(PVBOXSHGSMI pHeap, PVOID pCmd) 82 84 { 83 85 RTSEMEVENT hEventSem; … … 86 88 if (RT_SUCCESS(rc)) 87 89 { 88 return VBoxSHGSMICommandPrepAsynchEvent 90 return VBoxSHGSMICommandPrepAsynchEvent(pHeap, pCmd, hEventSem); 89 91 } 90 92 return NULL; 91 93 } 92 94 93 void VBoxSHGSMICommandDoneAsynch 95 void VBoxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER * pHeader) 94 96 { 95 97 vboxSHGSMICommandDoneAsynch(pHeap, pHeader); 96 98 } 97 99 98 int VBoxSHGSMICommandDoneSynch 99 { 100 VBoxSHGSMICommandDoneAsynch 100 int VBoxSHGSMICommandDoneSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER* pHeader) 101 { 102 VBoxSHGSMICommandDoneAsynch(pHeap, pHeader); 101 103 RTSEMEVENT hEventSem = (RTSEMEVENT)pHeader->u64Info2; 102 104 int rc = RTSemEventWait(hEventSem, RT_INDEFINITE_WAIT); … … 107 109 } 108 110 109 void VBoxSHGSMICommandCancelAsynch 111 void VBoxSHGSMICommandCancelAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER* pHeader) 110 112 { 111 113 vboxSHGSMICommandRelease(pHeap, (PVBOXSHGSMIHEADER)pHeader); … … 119 121 } 120 122 121 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynch (PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, PVOID pvCompletion, uint32_t fFlags) 123 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, 124 PVOID pvCompletion, uint32_t fFlags) 122 125 { 123 126 fFlags &= ~VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ; … … 130 133 } 131 134 132 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchIrq (PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion, uint32_t fFlags) 135 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchIrq(PVBOXSHGSMI pHeap, PVOID pvBuff, 136 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion, 137 uint32_t fFlags) 133 138 { 134 139 fFlags |= VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ | VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ; … … 201 206 { 202 207 /* Issue the flush command. */ 203 PVBOXSHGSMIHEADER pHeader = (PVBOXSHGSMIHEADER)VBoxSHGSMIHeapAlloc(pHeap, cbData + sizeof (VBOXSHGSMIHEADER), u8Channel, u16ChannelInfo); 208 PVBOXSHGSMIHEADER pHeader = (PVBOXSHGSMIHEADER)VBoxSHGSMIHeapAlloc(pHeap, cbData + sizeof (VBOXSHGSMIHEADER), u8Channel, 209 u16ChannelInfo); 204 210 Assert(pHeader); 205 211 if (pHeader) -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp
r62522 r63053 142 142 NTSTATUS vboxVdmaPipeSvrCmdGetList(PVBOXVDMAPIPE pPipe, PLIST_ENTRY pDetachHead) 143 143 { 144 PLIST_ENTRY pEntry = NULL;145 144 KIRQL OldIrql; 146 145 NTSTATUS Status = STATUS_SUCCESS; … … 319 318 static DECLCALLBACK(void) vboxVdmaCrWriteCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvCtx) 320 319 { 320 RT_NOREF(rc); 321 321 PVBOXMP_VDMACR_WRITECOMPLETION pData = (PVBOXMP_VDMACR_WRITECOMPLETION)pvCtx; 322 322 void* pvBufferToFree = pData->pvBufferToFree; … … 472 472 NTSTATUS Status = STATUS_SUCCESS; 473 473 int rc; 474 bool fCurChanged = FALSE, fCurRectChanged = FALSE; 475 POINT CurPos; 474 bool fCurChanged = FALSE; 475 bool fCurRectChanged = FALSE; 476 POINT CurPos = { 0, 0 }; /* MSC is confused (me too), maybe used uninitialized. */ 476 477 RTRECT *pVRectsBuff = NULL; 477 478 uint32_t cVRectsBuff = 0; … … 811 812 uint32_t cbSrcLine = vboxWddmCalcRowSize(pSrcRect->left, pSrcRect->right, pSrcAlloc->SurfDesc.format); 812 813 uint32_t offSrcStart = vboxWddmCalcOffXYrd(pSrcRect->left, pSrcRect->top, pSrcAlloc->SurfDesc.pitch, pSrcAlloc->SurfDesc.format); 813 Assert(cbSrcLine <= pSrcAlloc->SurfDesc.pitch); 814 Assert(cbSrcLine <= pSrcAlloc->SurfDesc.pitch); NOREF(cbSrcLine); 814 815 uint32_t cbSrcSkip = pSrcAlloc->SurfDesc.pitch; 815 816 const uint8_t * pvSrcStart = pvSrcSurf + offSrcStart; … … 1257 1258 RTRECT Rect; 1258 1259 VBoxVrListRectsGet(&pSource->VrList, 1, &Rect); 1259 if ( Rect.xLeft== 01260 && Rect.yTop== 01261 && Rect.xRight ==pDstAllocData->SurfDesc.width1262 && Rect.yBottom ==pDstAllocData->SurfDesc.height)1260 if ( Rect.xLeft == 0 1261 && Rect.yTop == 0 1262 && Rect.xRight == (int32_t)pDstAllocData->SurfDesc.width 1263 && Rect.yBottom == (int32_t)pDstAllocData->SurfDesc.height) 1263 1264 { 1264 1265 pSource->fHas3DVrs = FALSE; … … 1468 1469 NTSTATUS vboxVdmaProcessClrFillCmd(PVBOXMP_DEVEXT pDevExt, VBOXWDDM_CONTEXT *pContext, VBOXWDDM_DMA_PRIVATEDATA_CLRFILL *pCF) 1469 1470 { 1471 RT_NOREF(pContext); 1470 1472 NTSTATUS Status = STATUS_SUCCESS; 1471 1473 PVBOXWDDM_ALLOCATION pAlloc = pCF->ClrFill.Alloc.pAlloc; … … 1510 1512 return rc; 1511 1513 } 1512 # define vboxWddmVdmaSubmit vboxWddmVdmaSubmitVbva1514 # define vboxWddmVdmaSubmit vboxWddmVdmaSubmitVbva 1513 1515 #else 1514 1516 static int vboxWddmVdmaSubmitHgsmi(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, HGSMIOFFSET offDr) 1515 1517 { 1518 RT_NOREF(pInfo); 1516 1519 VBoxVideoCmnPortWriteUlong(VBoxCommonFromDeviceExt(pDevExt)->guestCtx.port, offDr); 1517 1520 /* Make the compiler aware that the host has changed memory. */ … … 1519 1522 return VINF_SUCCESS; 1520 1523 } 1521 # define vboxWddmVdmaSubmit vboxWddmVdmaSubmitHgsmi1524 # define vboxWddmVdmaSubmit vboxWddmVdmaSubmitHgsmi 1522 1525 #endif 1523 1526 … … 1732 1735 static DECLCALLBACK(void) vboxVdmaCBufDrCompletion(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext) 1733 1736 { 1737 RT_NOREF(pHeap); 1734 1738 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)pvContext; 1735 1739 PVBOXVDMAINFO pInfo = &pDevExt->u.primary.Vdma; 1736 1740 1737 vboxVdmaCBufDrFree (pInfo, (PVBOXVDMACBUF_DR)pvCmd); 1738 } 1739 1740 static DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) vboxVdmaCBufDrCompletionIrq(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext, void **ppvCompletion) 1741 { 1741 vboxVdmaCBufDrFree(pInfo, (PVBOXVDMACBUF_DR)pvCmd); 1742 } 1743 1744 static DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) vboxVdmaCBufDrCompletionIrq(PVBOXSHGSMI pHeap, void *pvCmd, 1745 void *pvContext, void **ppvCompletion) 1746 { 1747 RT_NOREF(pHeap, ppvCompletion); 1742 1748 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)pvContext; 1743 PVBOXVDMAINFO pVdma = &pDevExt->u.primary.Vdma;1744 1749 PVBOXVDMACBUF_DR pDr = (PVBOXVDMACBUF_DR)pvCmd; 1745 1750 … … 1859 1864 DECLCALLBACK(VOID) vboxVdmaDdiCmdCompletionCbFree(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pCmd, PVOID pvContext) 1860 1865 { 1866 RT_NOREF(pDevExt, pvContext); 1861 1867 vboxWddmMemFree(pCmd); 1862 1868 }
Note:
See TracChangeset
for help on using the changeset viewer.