Changeset 27307 in vbox
- Timestamp:
- Mar 11, 2010 9:17:00 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 58719
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoShgsmi.cpp
r27286 r27307 239 239 PFNVBOXSHGSMICMDCOMPLETION pfnCallback = (PFNVBOXSHGSMICMDCOMPLETION)pCmd->u64Info1; 240 240 void *pvCallback = (void*)pCmd->u64Info2; 241 pfnCallback(pHeap, pCmd, pvCallback);241 pfnCallback(pHeap, VBoxSHGSMIBufferData(pCmd), pvCallback); 242 242 } 243 243 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoShgsmi.h
r26556 r27307 52 52 Assert(pFirst); 53 53 Assert(pLast); 54 pLast->pNext = NULL; 54 55 if (pList->pLast) 55 56 { … … 57 58 pList->pLast->pNext = pFirst; 58 59 pList->pLast = pLast; 59 pLast->pNext = NULL;60 60 } 61 61 else -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r27286 r27307 106 106 pScreen->i32OriginX = 0; 107 107 pScreen->i32OriginY = 0; 108 pScreen->u32StartOffset = offVram;108 pScreen->u32StartOffset = (uint32_t)offVram; 109 109 pScreen->u32LineSize = pAllocation->u.SurfInfo.pitch; 110 110 pScreen->u32Width = pAllocation->u.SurfInfo.width; … … 140 140 141 141 pView->u32ViewIndex = pPrimaryInfo->VidPnSourceId; 142 pView->u32ViewOffset = offVram;142 pView->u32ViewOffset = (uint32_t)offVram; 143 143 pView->u32ViewSize = vboxWddmVramReportedSegmentSize(pDevExt)/pDevExt->cSources; 144 144 … … 776 776 PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)MiniportDeviceContext; 777 777 BOOLEAN bOur = FALSE; 778 BOOLEAN bNeedDpc = FALSE; 778 779 if (pDevExt->u.primary.pHostFlags) /* If HGSMI is enabled at all. */ 779 780 { … … 782 783 vboxSHGSMIListInit(&CtlList); 783 784 vboxSHGSMIListInit(&DmaCmdList); 785 786 uint32_t flags = pDevExt->u.primary.pHostFlags->u32HostFlags; 787 bOur = (flags & HGSMIHOSTFLAGS_IRQ); 784 788 do 785 789 { 786 uint32_t flags = pDevExt->u.primary.pHostFlags->u32HostFlags;787 790 if (flags & HGSMIHOSTFLAGS_GCOMMAND_COMPLETED) 788 791 { 789 bOur = TRUE;790 792 /* read the command offset */ 791 793 HGSMIOFFSET offCmd = VBoxHGSMIGuestRead(pDevExt); … … 819 821 else if (flags & HGSMIHOSTFLAGS_COMMANDS_PENDING) 820 822 { 821 bOur = TRUE;822 823 AssertBreakpoint(); 823 824 /* @todo: FIXME: implement !!! */ 824 825 } 825 else if (flags & HGSMIHOSTFLAGS_IRQ)826 {827 bOur = TRUE;828 AssertBreakpoint();829 /* unknown command */830 }831 826 else 832 827 break; 828 829 flags = pDevExt->u.primary.pHostFlags->u32HostFlags; 833 830 } while (1); 834 831 835 832 if (!vboxSHGSMIListIsEmpty(&CtlList)) 833 { 836 834 vboxSHGSMIListCat(&pDevExt->CtlList, &CtlList); 835 bNeedDpc = TRUE; 836 } 837 837 838 838 if (!vboxSHGSMIListIsEmpty(&DmaCmdList)) 839 { 839 840 vboxSHGSMIListCat(&pDevExt->DmaCmdList, &DmaCmdList); 841 bNeedDpc = TRUE; 842 } 840 843 841 844 if (pDevExt->bSetNotifyDxDpc) 842 845 { 846 Assert(bNeedDpc == TRUE); 843 847 pDevExt->bNotifyDxDpc = TRUE; 844 848 pDevExt->bSetNotifyDxDpc = FALSE; 849 bNeedDpc = TRUE; 845 850 } 846 851 847 852 if (bOur) 853 { 848 854 HGSMIClearIrq (pDevExt); 855 #ifdef DEBUG_misha 856 /* this is not entirely correct since host may concurrently complete some commands and raise a new IRQ while we are here, 857 * still this allows to check that the host flags are correctly cleared after the ISR */ 858 Assert(pDevExt->u.primary.pHostFlags); 859 uint32_t flags = pDevExt->u.primary.pHostFlags->u32HostFlags; 860 Assert(flags == 0); 861 #endif 862 BOOLEAN bDpcQueued = pDevExt->u.primary.DxgkInterface.DxgkCbQueueDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle); 863 Assert(bDpcQueued); 864 } 849 865 } 850 866 … … 889 905 PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)MiniportDeviceContext; 890 906 891 VBOXWDDM_ DPCDATA dpcData= {0};907 VBOXWDDM_GETDPCDATA_CONTEXT context = {0}; 892 908 BOOLEAN bRet; 909 910 context.pDevExt = pDevExt; 893 911 894 912 /* get DPC data at IRQL */ … … 896 914 pDevExt->u.primary.DxgkInterface.DeviceHandle, 897 915 vboxWddmGetDPCDataCallback, 898 & dpcData,899 0, 916 &context, 917 0, /* IN ULONG MessageNumber */ 900 918 &bRet); 901 919 Assert(Status == STATUS_SUCCESS); 902 920 903 if (!vboxSHGSMIListIsEmpty(& dpcData.CtlList))904 { 905 int rc = VBoxSHGSMICommandPostprocessCompletion (&pDevExt->u.primary.hgsmiAdapterHeap, & dpcData.CtlList);921 if (!vboxSHGSMIListIsEmpty(&context.data.CtlList)) 922 { 923 int rc = VBoxSHGSMICommandPostprocessCompletion (&pDevExt->u.primary.hgsmiAdapterHeap, &context.data.CtlList); 906 924 AssertRC(rc); 907 925 } 908 926 909 if (!vboxSHGSMIListIsEmpty(& dpcData.DmaCmdList))910 { 911 int rc = VBoxSHGSMICommandPostprocessCompletion (&pDevExt->u.primary.Vdma.CmdHeap, & dpcData.DmaCmdList);927 if (!vboxSHGSMIListIsEmpty(&context.data.DmaCmdList)) 928 { 929 int rc = VBoxSHGSMICommandPostprocessCompletion (&pDevExt->u.primary.Vdma.CmdHeap, &context.data.DmaCmdList); 912 930 AssertRC(rc); 913 931 } 914 932 915 if ( dpcData.bNotifyDpc)933 if (context.data.bNotifyDpc) 916 934 pDevExt->u.primary.DxgkInterface.DxgkCbNotifyDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle); 917 935 … … 2667 2685 if (vboxWddmPixFormatConversionSupported(pSrcAlloc->u.SurfInfo.format, pDstAlloc->u.SurfInfo.format)) 2668 2686 { 2669 memset(pPresent->pPatchLocationListOut, 0, 3*sizeof (D3DDDI_PATCHLOCATIONLIST));2687 memset(pPresent->pPatchLocationListOut, 0, 2*sizeof (D3DDDI_PATCHLOCATIONLIST)); 2670 2688 // pPresent->pPatchLocationListOut->PatchOffset = 0; 2671 ++pPresent->pPatchLocationListOut;2689 // ++pPresent->pPatchLocationListOut; 2672 2690 pPresent->pPatchLocationListOut->PatchOffset = VBOXVDMACMD_BODY_FIELD_OFFSET(UINT, VBOXVDMACMD_DMA_PRESENT_BLT, offSrc); 2673 2691 pPresent->pPatchLocationListOut->AllocationIndex = DXGK_PRESENT_SOURCE_INDEX;
Note:
See TracChangeset
for help on using the changeset viewer.