Changeset 42098 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Video
- Timestamp:
- Jul 10, 2012 4:16:18 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 79044
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/mp
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/common/VBoxMPVidModes.cpp
r42081 r42098 493 493 return (pExt->CurrentMode == 0); 494 494 #else 495 return (!VBoxCommonFromDeviceExt(pExt)->cDisplays || !pExt->aSources[iDisplay].pPrimaryAllocation); 495 return (!VBoxCommonFromDeviceExt(pExt)->cDisplays 496 # ifndef VBOX_WDDM_MINIPORT 497 || !pExt->aSources[iDisplay].pPrimaryAllocation 498 # endif 499 ); 496 500 #endif 497 501 } … … 520 524 bpp = bpp ? bpp :pExt->CurrentModeBPP; 521 525 #else 522 xres = xres ? xres:pExt->aSources[iDisplay].pPrimaryAllocation->AllocData.SurfDesc.width; 523 yres = yres ? yres:pExt->aSources[iDisplay].pPrimaryAllocation->AllocData.SurfDesc.height; 524 bpp = bpp ? bpp :pExt->aSources[iDisplay].pPrimaryAllocation->AllocData.SurfDesc.bpp; 526 PVBOXWDDM_ALLOC_DATA pAllocData = pExt->aSources[iDisplay].pPrimaryAllocation ? 527 &pExt->aSources[iDisplay].pPrimaryAllocation->AllocData 528 : &pExt->aSources[iDisplay].AllocData; 529 xres = xres ? xres:pAllocData->SurfDesc.width; 530 yres = yres ? yres:pAllocData->SurfDesc.height; 531 bpp = bpp ? bpp :pAllocData->SurfDesc.bpp; 525 532 #endif 526 533 } -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r42092 r42098 510 510 } 511 511 512 typedef struct VBOXWDDMCHILDSTATUSCB 513 { 514 PVBOXVDMACBUF_DR pDr; 515 PKEVENT pEvent; 516 } VBOXWDDMCHILDSTATUSCB, *PVBOXWDDMCHILDSTATUSCB; 517 518 static DECLCALLBACK(VOID) vboxWddmChildStatusReportCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pCmd, PVOID pvContext) 519 { 520 /* we should be called from our DPC routine */ 521 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); 522 523 PVBOXWDDMCHILDSTATUSCB pCtx = (PVBOXWDDMCHILDSTATUSCB)pvContext; 524 PVBOXVDMACBUF_DR pDr = pCtx->pDr; 525 PVBOXVDMACMD pHdr = VBOXVDMACBUF_DR_TAIL(pDr, VBOXVDMACMD); 526 VBOXVDMACMD_CHILD_STATUS_IRQ *pBody = VBOXVDMACMD_BODY(pHdr, VBOXVDMACMD_CHILD_STATUS_IRQ); 512 static NTSTATUS vboxWddmChildStatusDoReportReconnected(PVBOXMP_DEVEXT pDevExt, VBOXVDMACMD_CHILD_STATUS_IRQ *pBody) 513 { 514 NTSTATUS Status = STATUS_SUCCESS; 527 515 528 516 for (UINT i = 0; i < pBody->cInfos; ++i) … … 533 521 for (D3DDDI_VIDEO_PRESENT_TARGET_ID iChild = 0; iChild < (UINT)VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++iChild) 534 522 { 535 NTSTATUSStatus = vboxWddmChildStatusReportPerform(pDevExt, pInfo, iChild);523 Status = vboxWddmChildStatusReportPerform(pDevExt, pInfo, iChild); 536 524 if (!NT_SUCCESS(Status)) 537 525 { … … 543 531 else 544 532 { 545 NTSTATUSStatus = vboxWddmChildStatusReportPerform(pDevExt, pInfo, D3DDDI_ID_UNINITIALIZED);533 Status = vboxWddmChildStatusReportPerform(pDevExt, pInfo, D3DDDI_ID_UNINITIALIZED); 546 534 if (!NT_SUCCESS(Status)) 547 535 { … … 552 540 } 553 541 542 return Status; 543 } 544 545 typedef struct VBOXWDDMCHILDSTATUSCB 546 { 547 PVBOXVDMACBUF_DR pDr; 548 PKEVENT pEvent; 549 } VBOXWDDMCHILDSTATUSCB, *PVBOXWDDMCHILDSTATUSCB; 550 551 static DECLCALLBACK(VOID) vboxWddmChildStatusReportCompletion(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pCmd, PVOID pvContext) 552 { 553 /* we should be called from our DPC routine */ 554 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL); 555 556 PVBOXWDDMCHILDSTATUSCB pCtx = (PVBOXWDDMCHILDSTATUSCB)pvContext; 557 PVBOXVDMACBUF_DR pDr = pCtx->pDr; 558 PVBOXVDMACMD pHdr = VBOXVDMACBUF_DR_TAIL(pDr, VBOXVDMACMD); 559 VBOXVDMACMD_CHILD_STATUS_IRQ *pBody = VBOXVDMACMD_BODY(pHdr, VBOXVDMACMD_CHILD_STATUS_IRQ); 560 561 vboxWddmChildStatusDoReportReconnected(pDevExt, pBody); 562 554 563 vboxVdmaCBufDrFree(&pDevExt->u.primary.Vdma, pDr); 555 564 … … 562 571 static NTSTATUS vboxWddmChildStatusReportReconnected(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_TARGET_ID idTarget) 563 572 { 573 #ifdef VBOX_WDDM_MONITOR_REPLUG_IRQ 564 574 NTSTATUS Status = STATUS_UNSUCCESSFUL; 565 575 UINT cbCmd = VBOXVDMACMD_SIZE_FROMBODYSIZE(sizeof (VBOXVDMACMD_CHILD_STATUS_IRQ)); … … 585 595 pBody->aInfos[0].iChild = idTarget; 586 596 pBody->aInfos[0].fFlags = VBOXVDMA_CHILD_STATUS_F_DISCONNECTED | VBOXVDMA_CHILD_STATUS_F_CONNECTED; 587 588 597 /* we're going to KeWaitForSingleObject */ 589 598 Assert(KeGetCurrentIrql() < DISPATCH_LEVEL); … … 620 629 621 630 return Status; 631 #else 632 VBOXVDMACMD_CHILD_STATUS_IRQ Body = {0}; 633 Body.cInfos = 1; 634 if (idTarget == D3DDDI_ID_ALL) 635 { 636 Body.fFlags |= VBOXVDMACMD_CHILD_STATUS_IRQ_F_APPLY_TO_ALL; 637 } 638 Body.aInfos[0].iChild = idTarget; 639 Body.aInfos[0].fFlags = VBOXVDMA_CHILD_STATUS_F_DISCONNECTED | VBOXVDMA_CHILD_STATUS_F_CONNECTED; 640 Assert(KeGetCurrentIrql() <= DISPATCH_LEVEL); 641 return vboxWddmChildStatusDoReportReconnected(pDevExt, &Body); 642 #endif 622 643 } 623 644 … … 629 650 630 651 Assert(!bChanged[0]); 631 for (i = 1; i < VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++i)652 for (i = 0; i < VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++i) 632 653 { 633 654 /* @todo: check that we actually need the current source->target */ … … 4083 4104 case VBOXESC_REINITVIDEOMODES: 4084 4105 { 4085 /* clear driver's internal videomodes cache */ 4086 VBoxWddmInvalidateVideoModesInfo(pDevExt); 4087 Status = STATUS_SUCCESS; 4106 PVBOXWDDM_VIDEOMODES_INFO pInfo = VBoxWddmUpdateVideoModesInfo(pDevExt, NULL); 4107 Status = vboxWddmChildStatusCheck(pDevExt, pInfo); 4108 if (!NT_SUCCESS(Status)) 4109 { 4110 WARN(("vboxWddmChildStatusCheck failed, Status 0x%x", Status)); 4111 } 4088 4112 break; 4089 4113 } … … 6175 6199 LOGF(("ENTER, hAdapter(0x%x)", hAdapter)); 6176 6200 vboxVDbgBreakF(); 6177 AssertBreakpoint();6178 6201 6179 6202 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)hAdapter; … … 6577 6600 } 6578 6601 6579 //#ifdef VBOX_WDDM_WIN8 6580 // LOGREL(("Current win8 video driver only supports display-only mode no matter whether or not host 3D is enabled!")); 6581 // g_VBoxDisplayOnly = 1; 6582 //#endif 6602 #ifdef DEBUG_misha 6603 /* force g_VBoxDisplayOnly for debugging purposes */ 6604 LOGREL(("Current win8 video driver only supports display-only mode no matter whether or not host 3D is enabled!")); 6605 g_VBoxDisplayOnly = 1; 6606 #endif 6583 6607 6584 6608 if (NT_SUCCESS(Status))
Note:
See TracChangeset
for help on using the changeset viewer.