Changeset 30239 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Miniport
- Timestamp:
- Jun 16, 2010 12:15:34 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62734
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVhwa.cpp
r30215 r30239 676 676 int vboxVhwaHlpDestroyPrimary(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_SOURCE pSource, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId) 677 677 { 678 #ifdef VBOXWDDM_RENDER_FROM_SHADOW 679 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pShadowAllocation; 680 #else 681 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pPrimaryAllocation; 682 #endif 678 PVBOXWDDM_ALLOCATION pFbSurf = VBOXWDDM_FB_ALLOCATION(pSource); 683 679 684 680 int rc = vboxVhwaHlpDestroySurface(pDevExt, pFbSurf, VidPnSourceId); … … 689 685 int vboxVhwaHlpCreatePrimary(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_SOURCE pSource, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId) 690 686 { 691 #ifdef VBOXWDDM_RENDER_FROM_SHADOW 692 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pShadowAllocation; 693 #else 694 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pPrimaryAllocation; 695 #endif 687 PVBOXWDDM_ALLOCATION pFbSurf = VBOXWDDM_FB_ALLOCATION(pSource); 696 688 Assert(pSource->Vhwa.cOverlaysCreated == 1); 697 689 Assert(pFbSurf->hHostHandle == VBOXVHWA_SURFHANDLE_INVALID); … … 728 720 else 729 721 { 730 #ifdef VBOXWDDM_RENDER_FROM_SHADOW 731 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pShadowAllocation; 732 #else 733 PVBOXWDDM_ALLOCATION pFbSurf = pSource->pPrimaryAllocation; 734 #endif 722 PVBOXWDDM_ALLOCATION pFbSurf = VBOXWDDM_FB_ALLOCATION(pSource); 735 723 Assert(pFbSurf->hHostHandle); 736 724 if (pFbSurf->hHostHandle) … … 772 760 } 773 761 774 int vboxVhwaHlpCreateOverlay(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_ALLOCATION pSurf, uint32_t cBackBuffers, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId) 762 int vboxVhwaHlpOverlayFlip(PVBOXWDDM_OVERLAY pOverlay, const DXGKARG_FLIPOVERLAY *pFlipInfo) 763 { 764 PVBOXWDDM_ALLOCATION pAlloc = (PVBOXWDDM_ALLOCATION)pFlipInfo->hSource; 765 Assert(pAlloc->hHostHandle); 766 Assert(pAlloc->pResource); 767 Assert(pAlloc->pResource == pOverlay->pResource); 768 Assert(pFlipInfo->PrivateDriverDataSize == sizeof (VBOXWDDM_OVERLAYFLIP_INFO)); 769 Assert(pFlipInfo->pPrivateDriverData); 770 PVBOXWDDM_SOURCE pSource = &pOverlay->pDevExt->aSources[pOverlay->VidPnSourceId]; 771 Assert(!!(pSource->Vhwa.Settings.fFlags & VBOXVHWA_F_ENABLED)); 772 PVBOXWDDM_ALLOCATION pFbSurf = VBOXWDDM_FB_ALLOCATION(pSource); 773 Assert(pFbSurf); 774 Assert(pFbSurf->hHostHandle); 775 Assert(pFbSurf->offVram != VBOXVIDEOOFFSET_VOID); 776 Assert(pOverlay->pCurentAlloc); 777 Assert(pOverlay->pCurentAlloc->pResource == pOverlay->pResource); 778 Assert(pOverlay->pCurentAlloc != pAlloc); 779 int rc = VINF_SUCCESS; 780 if (pFlipInfo->PrivateDriverDataSize == sizeof (VBOXWDDM_OVERLAYFLIP_INFO)) 781 { 782 PVBOXWDDM_OVERLAYFLIP_INFO pOurInfo = (PVBOXWDDM_OVERLAYFLIP_INFO)pFlipInfo->pPrivateDriverData; 783 784 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 785 VBOXVHWACMD_TYPE_SURF_FLIP, sizeof(VBOXVHWACMD_SURF_FLIP)); 786 Assert(pCmd); 787 if(pCmd) 788 { 789 VBOXVHWACMD_SURF_FLIP * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); 790 791 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_FLIP)); 792 793 // pBody->TargGuestSurfInfo; 794 // pBody->CurrGuestSurfInfo; 795 pBody->u.in.hTargSurf = pAlloc->hHostHandle; 796 pBody->u.in.offTargSurface = pFlipInfo->SrcPhysicalAddress.QuadPart; 797 pAlloc->offVram = pFlipInfo->SrcPhysicalAddress.QuadPart; 798 pBody->u.in.hCurrSurf = pOverlay->pCurentAlloc->hHostHandle; 799 pBody->u.in.offCurrSurface = pOverlay->pCurentAlloc->offVram; 800 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_VALID) 801 { 802 pBody->u.in.xUpdatedTargMemValid = 1; 803 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_RECT_VALID) 804 pBody->u.in.xUpdatedTargMemRect = *(VBOXVHWA_RECTL*)((void*)&pOurInfo->DirtyRegion.Rect); 805 else 806 { 807 pBody->u.in.xUpdatedTargMemRect.right = pAlloc->SurfDesc.width; 808 pBody->u.in.xUpdatedTargMemRect.bottom = pAlloc->SurfDesc.height; 809 /* top & left are zero-inited with the above memset */ 810 } 811 } 812 813 /* we're not interested in completion, just send the command */ 814 vboxVhwaCommandSubmitAsynchAndComplete(pOverlay->pDevExt, pCmd); 815 816 rc = VINF_SUCCESS; 817 } 818 else 819 rc = VERR_OUT_OF_RESOURCES; 820 } 821 else 822 rc = VERR_INVALID_PARAMETER; 823 824 return rc; 825 } 826 827 AssertCompile(sizeof (RECT) == sizeof (VBOXVHWA_RECTL)); 828 AssertCompile(RT_SIZEOFMEMB(RECT, left) == RT_SIZEOFMEMB(VBOXVHWA_RECTL, left)); 829 AssertCompile(RT_SIZEOFMEMB(RECT, right) == RT_SIZEOFMEMB(VBOXVHWA_RECTL, right)); 830 AssertCompile(RT_SIZEOFMEMB(RECT, top) == RT_SIZEOFMEMB(VBOXVHWA_RECTL, top)); 831 AssertCompile(RT_SIZEOFMEMB(RECT, bottom) == RT_SIZEOFMEMB(VBOXVHWA_RECTL, bottom)); 832 AssertCompile(RT_OFFSETOF(RECT, left) == RT_OFFSETOF(VBOXVHWA_RECTL, left)); 833 AssertCompile(RT_OFFSETOF(RECT, right) == RT_OFFSETOF(VBOXVHWA_RECTL, right)); 834 AssertCompile(RT_OFFSETOF(RECT, top) == RT_OFFSETOF(VBOXVHWA_RECTL, top)); 835 AssertCompile(RT_OFFSETOF(RECT, bottom) == RT_OFFSETOF(VBOXVHWA_RECTL, bottom)); 836 837 int vboxVhwaHlpOverlayUpdate(PVBOXWDDM_OVERLAY pOverlay, const DXGK_OVERLAYINFO *pOverlayInfo) 838 { 839 PVBOXWDDM_ALLOCATION pAlloc = (PVBOXWDDM_ALLOCATION)pOverlayInfo->hAllocation; 840 Assert(pAlloc->hHostHandle); 841 Assert(pAlloc->pResource); 842 Assert(pAlloc->pResource == pOverlay->pResource); 843 Assert(pOverlayInfo->PrivateDriverDataSize == sizeof (VBOXWDDM_OVERLAY_INFO)); 844 Assert(pOverlayInfo->pPrivateDriverData); 845 PVBOXWDDM_SOURCE pSource = &pOverlay->pDevExt->aSources[pOverlay->VidPnSourceId]; 846 Assert(!!(pSource->Vhwa.Settings.fFlags & VBOXVHWA_F_ENABLED)); 847 PVBOXWDDM_ALLOCATION pFbSurf = VBOXWDDM_FB_ALLOCATION(pSource); 848 Assert(pFbSurf); 849 Assert(pFbSurf->hHostHandle); 850 Assert(pFbSurf->offVram != VBOXVIDEOOFFSET_VOID); 851 int rc = VINF_SUCCESS; 852 if (pOverlayInfo->PrivateDriverDataSize == sizeof (VBOXWDDM_OVERLAY_INFO)) 853 { 854 PVBOXWDDM_OVERLAY_INFO pOurInfo = (PVBOXWDDM_OVERLAY_INFO)pOverlayInfo->pPrivateDriverData; 855 856 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 857 VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 858 Assert(pCmd); 859 if(pCmd) 860 { 861 VBOXVHWACMD_SURF_OVERLAY_UPDATE * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); 862 863 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 864 865 pBody->u.in.hDstSurf = pFbSurf->hHostHandle; 866 pBody->u.in.offDstSurface = pFbSurf->offVram; 867 pBody->u.in.dstRect = *(VBOXVHWA_RECTL*)((void*)&pOverlayInfo->DstRect); 868 pBody->u.in.hSrcSurf = pAlloc->hHostHandle; 869 pBody->u.in.offSrcSurface = pOverlayInfo->PhysicalAddress.QuadPart; 870 pAlloc->offVram = pOverlayInfo->PhysicalAddress.QuadPart; 871 pBody->u.in.srcRect = *(VBOXVHWA_RECTL*)((void*)&pOverlayInfo->SrcRect); 872 pBody->u.in.flags |= VBOXVHWA_OVER_SHOW; 873 if (pOurInfo->OverlayDesc.fFlags & VBOXWDDM_OVERLAY_F_CKEY_DST) 874 { 875 pBody->u.in.flags |= VBOXVHWA_OVER_KEYDESTOVERRIDE /* ?? VBOXVHWA_OVER_KEYDEST */; 876 pBody->u.in.desc.DstCK.high = pOurInfo->OverlayDesc.DstColorKeyHigh; 877 pBody->u.in.desc.DstCK.low = pOurInfo->OverlayDesc.DstColorKeyLow; 878 } 879 880 if (pOurInfo->OverlayDesc.fFlags & VBOXWDDM_OVERLAY_F_CKEY_SRC) 881 { 882 pBody->u.in.flags |= VBOXVHWA_OVER_KEYSRCOVERRIDE /* ?? VBOXVHWA_OVER_KEYSRC */; 883 pBody->u.in.desc.SrcCK.high = pOurInfo->OverlayDesc.SrcColorKeyHigh; 884 pBody->u.in.desc.SrcCK.low = pOurInfo->OverlayDesc.SrcColorKeyLow; 885 } 886 887 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_VALID) 888 { 889 pBody->u.in.xUpdatedSrcMemValid = 1; 890 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_RECT_VALID) 891 pBody->u.in.xUpdatedSrcMemRect = *(VBOXVHWA_RECTL*)((void*)&pOurInfo->DirtyRegion.Rect); 892 else 893 { 894 pBody->u.in.xUpdatedSrcMemRect.right = pAlloc->SurfDesc.width; 895 pBody->u.in.xUpdatedSrcMemRect.bottom = pAlloc->SurfDesc.height; 896 /* top & left are zero-inited with the above memset */ 897 } 898 } 899 900 /* we're not interested in completion, just send the command */ 901 vboxVhwaCommandSubmitAsynchAndComplete(pOverlay->pDevExt, pCmd); 902 903 pOverlay->pCurentAlloc = pAlloc; 904 905 rc = VINF_SUCCESS; 906 } 907 else 908 rc = VERR_OUT_OF_RESOURCES; 909 } 910 else 911 rc = VERR_INVALID_PARAMETER; 912 913 return rc; 914 } 915 916 int vboxVhwaHlpOverlayDestroy(PVBOXWDDM_OVERLAY pOverlay) 917 { 918 int rc = VINF_SUCCESS; 919 for (uint32_t i = 0; i < pOverlay->pResource->cAllocations; ++i) 920 { 921 PVBOXWDDM_ALLOCATION pCurAlloc = &pOverlay->pResource->aAllocations[i]; 922 rc = vboxVhwaHlpDestroySurface(pOverlay->pDevExt, pCurAlloc, pOverlay->VidPnSourceId); 923 AssertRC(rc); 924 } 925 926 if (RT_SUCCESS(rc)) 927 { 928 int tmpRc = vboxVhwaHlpCheckTerm(pOverlay->pDevExt, pOverlay->VidPnSourceId); 929 AssertRC(tmpRc); 930 } 931 932 return rc; 933 } 934 935 936 int vboxVhwaHlpOverlayCreate(PDEVICE_EXTENSION pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, DXGK_OVERLAYINFO *pOverlayInfo, 937 /* OUT */ PVBOXWDDM_OVERLAY pOverlay) 775 938 { 776 939 int rc = vboxVhwaHlpCheckInit(pDevExt, VidPnSourceId); … … 778 941 if (RT_SUCCESS(rc)) 779 942 { 780 rc = vboxVhwaHlpCreateSurface(pDevExt, pSurf, 781 0, cBackBuffers, VBOXVHWA_SCAPS_OVERLAY | VBOXVHWA_SCAPS_VIDEOMEMORY | VBOXVHWA_SCAPS_LOCALVIDMEM | VBOXVHWA_SCAPS_COMPLEX, 782 VidPnSourceId); 783 AssertRC(rc); 784 } 785 786 return rc; 787 } 788 789 int vboxVhwaHlpDestroyOverlay(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_ALLOCATION pSurf, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId) 790 { 791 int rc = vboxVhwaHlpDestroySurface(pDevExt, pSurf, VidPnSourceId); 792 AssertRC(rc); 793 if (RT_SUCCESS(rc)) 794 { 795 rc = vboxVhwaHlpCheckTerm(pDevExt, VidPnSourceId); 796 AssertRC(rc); 797 } 798 799 return rc; 800 } 943 PVBOXWDDM_ALLOCATION pAlloc = (PVBOXWDDM_ALLOCATION)pOverlayInfo->hAllocation; 944 PVBOXWDDM_RESOURCE pRc = pAlloc->pResource; 945 Assert(pRc); 946 for (uint32_t i = 0; i < pRc->cAllocations; ++i) 947 { 948 PVBOXWDDM_ALLOCATION pCurAlloc = &pRc->aAllocations[i]; 949 rc = vboxVhwaHlpCreateSurface(pDevExt, pAlloc, 950 0, pRc->cAllocations - 1, VBOXVHWA_SCAPS_OVERLAY | VBOXVHWA_SCAPS_VIDEOMEMORY | VBOXVHWA_SCAPS_LOCALVIDMEM | VBOXVHWA_SCAPS_COMPLEX, 951 VidPnSourceId); 952 AssertRC(rc); 953 if (!RT_SUCCESS(rc)) 954 { 955 int tmpRc; 956 for (uint32_t j = i; j < pRc->cAllocations; ++j) 957 { 958 PVBOXWDDM_ALLOCATION pDestroyAlloc = &pRc->aAllocations[j]; 959 tmpRc = vboxVhwaHlpDestroySurface(pDevExt, pDestroyAlloc, VidPnSourceId); 960 AssertRC(tmpRc); 961 } 962 break; 963 } 964 } 965 966 if (RT_SUCCESS(rc)) 967 { 968 pOverlay->pDevExt = pDevExt; 969 pOverlay->pResource = pRc; 970 pOverlay->VidPnSourceId = VidPnSourceId; 971 rc = vboxVhwaHlpOverlayUpdate(pOverlay, pOverlayInfo); 972 if (!RT_SUCCESS(rc)) 973 { 974 int tmpRc = vboxVhwaHlpOverlayDestroy(pOverlay); 975 AssertRC(tmpRc); 976 } 977 } 978 979 if (RT_FAILURE(rc)) 980 { 981 int tmpRc = vboxVhwaHlpCheckTerm(pDevExt, VidPnSourceId); 982 AssertRC(tmpRc); 983 AssertRC(rc); 984 } 985 } 986 987 return rc; 988 } -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVhwa.h
r29922 r30239 54 54 void vboxVHWAFree(PDEVICE_EXTENSION pDevExt); 55 55 56 int vboxVhwaHlpCreateOverlay(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_ALLOCATION pSurf, uint32_t cBackBuffers, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId); 57 int vboxVhwaHlpDestroyOverlay(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_ALLOCATION pSurf, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId); 56 int vboxVhwaHlpOverlayFlip(PVBOXWDDM_OVERLAY pOverlay, const DXGKARG_FLIPOVERLAY *pFlipInfo); 57 int vboxVhwaHlpOverlayUpdate(PVBOXWDDM_OVERLAY pOverlay, const DXGK_OVERLAYINFO *pOverlayInfo); 58 int vboxVhwaHlpOverlayDestroy(PVBOXWDDM_OVERLAY pOverlay); 59 int vboxVhwaHlpOverlayCreate(PDEVICE_EXTENSION pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, DXGK_OVERLAYINFO *pOverlayInfo, /* OUT */ PVBOXWDDM_OVERLAY pOverlay); 60 58 61 int vboxVhwaHlpGetSurfInfo(PDEVICE_EXTENSION pDevExt, PVBOXWDDM_ALLOCATION pSurf); 59 62 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r30215 r30239 3251 3251 DXGKARG_CREATEOVERLAY *pCreateOverlay) 3252 3252 { 3253 dfprintf(("==> "__FUNCTION__ ", hAdapter(0x%x)\n", hAdapter)); 3254 3255 AssertBreakpoint(); 3256 3257 dfprintf(("<== "__FUNCTION__ ", hAdapter(0x%x)\n", hAdapter)); 3258 3259 return STATUS_NOT_IMPLEMENTED; 3253 dfprintf(("==> "__FUNCTION__ ", hAdapter(0x%p)\n", hAdapter)); 3254 3255 NTSTATUS Status = STATUS_SUCCESS; 3256 PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)hAdapter; 3257 PVBOXWDDM_OVERLAY pOverlay = (PVBOXWDDM_OVERLAY)vboxWddmMemAllocZero(sizeof (VBOXWDDM_OVERLAY)); 3258 Assert(pOverlay); 3259 if (pOverlay) 3260 { 3261 int rc = vboxVhwaHlpOverlayCreate(pDevExt, pCreateOverlay->VidPnSourceId, &pCreateOverlay->OverlayInfo, pOverlay); 3262 AssertRC(rc); 3263 if (RT_FAILURE(rc)) 3264 Status = STATUS_UNSUCCESSFUL; 3265 } 3266 else 3267 Status = STATUS_NO_MEMORY; 3268 3269 dfprintf(("<== "__FUNCTION__ ", hAdapter(0x%p)\n", hAdapter)); 3270 3271 return Status; 3260 3272 } 3261 3273 … … 3410 3422 { 3411 3423 return vboxWddmGetAllocationFromOpenData(pDevExt, (PVBOXWDDM_OPENALLOCATION)pAllocList->hDeviceSpecificAllocation); 3412 }3413 3414 DECLINLINE(VBOXVIDEOOFFSET) vboxWddmOffsetFromPhAddress(PHYSICAL_ADDRESS phAddr)3415 {3416 return (VBOXVIDEOOFFSET)(phAddr.QuadPart ? phAddr.QuadPart - VBE_DISPI_LFB_PHYSICAL_ADDRESS : VBOXVIDEOOFFSET_VOID);3417 3424 } 3418 3425 … … 3782 3789 CONST DXGKARG_UPDATEOVERLAY *pUpdateOverlay) 3783 3790 { 3784 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3785 AssertBreakpoint(); 3786 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3787 return STATUS_NOT_IMPLEMENTED; 3791 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3792 3793 NTSTATUS Status = STATUS_SUCCESS; 3794 PVBOXWDDM_OVERLAY pOverlay = (PVBOXWDDM_OVERLAY)hOverlay; 3795 Assert(pOverlay); 3796 int rc = vboxVhwaHlpOverlayUpdate(pOverlay, &pUpdateOverlay->OverlayInfo); 3797 AssertRC(rc); 3798 if (RT_FAILURE(rc)) 3799 Status = STATUS_UNSUCCESSFUL; 3800 3801 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3802 3803 return Status; 3788 3804 } 3789 3805 … … 3794 3810 CONST DXGKARG_FLIPOVERLAY *pFlipOverlay) 3795 3811 { 3796 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3797 AssertBreakpoint(); 3798 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3799 return STATUS_NOT_IMPLEMENTED; 3812 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3813 3814 NTSTATUS Status = STATUS_SUCCESS; 3815 PVBOXWDDM_OVERLAY pOverlay = (PVBOXWDDM_OVERLAY)hOverlay; 3816 Assert(pOverlay); 3817 int rc = vboxVhwaHlpOverlayFlip(pOverlay, pFlipOverlay); 3818 AssertRC(rc); 3819 if (RT_FAILURE(rc)) 3820 Status = STATUS_UNSUCCESSFUL; 3821 3822 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3823 3824 return Status; 3800 3825 } 3801 3826 … … 3805 3830 CONST HANDLE hOverlay) 3806 3831 { 3807 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3808 AssertBreakpoint(); 3809 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%x)\n", hOverlay)); 3810 return STATUS_NOT_IMPLEMENTED; 3832 dfprintf(("==> "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3833 3834 NTSTATUS Status = STATUS_SUCCESS; 3835 PVBOXWDDM_OVERLAY pOverlay = (PVBOXWDDM_OVERLAY)hOverlay; 3836 Assert(pOverlay); 3837 int rc = vboxVhwaHlpOverlayDestroy(pOverlay); 3838 AssertRC(rc); 3839 if (RT_SUCCESS(rc)) 3840 vboxWddmMemFree(pOverlay); 3841 else 3842 Status = STATUS_UNSUCCESSFUL; 3843 3844 dfprintf(("<== "__FUNCTION__ ", hOverlay(0x%p)\n", hOverlay)); 3845 3846 return Status; 3811 3847 } 3812 3848 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.h
r29922 r30239 49 49 50 50 /* allocation */ 51 //#define VBOXWDDM_ALLOCATIONINDEX_VOID (~0U) 51 52 typedef struct VBOXWDDM_ALLOCATION 52 53 { … … 73 74 } VBOXWDDM_RESOURCE, *PVBOXWDDM_RESOURCE; 74 75 76 DECLINLINE(PVBOXWDDM_RESOURCE) vboxWddmResourceForAlloc(PVBOXWDDM_ALLOCATION pAlloc) 77 { 78 #if 0 79 if(pAlloc->iIndex == VBOXWDDM_ALLOCATIONINDEX_VOID) 80 return NULL; 81 PVBOXWDDM_RESOURCE pRc = (PVBOXWDDM_RESOURCE)(((uint8_t*)pAlloc) - RT_OFFSETOF(VBOXWDDM_RESOURCE, aAllocations[pAlloc->iIndex])); 82 return pRc; 83 #else 84 return pAlloc->pResource; 85 #endif 86 } 87 88 typedef struct VBOXWDDM_OVERLAY 89 { 90 PDEVICE_EXTENSION pDevExt; 91 PVBOXWDDM_RESOURCE pResource; 92 PVBOXWDDM_ALLOCATION pCurentAlloc; 93 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; 94 } VBOXWDDM_OVERLAY, *PVBOXWDDM_OVERLAY; 75 95 76 96 typedef enum … … 121 141 } VBOXWDDM_OPENALLOCATION, *PVBOXWDDM_OPENALLOCATION; 122 142 143 #ifdef VBOXWDDM_RENDER_FROM_SHADOW 144 # define VBOXWDDM_FB_ALLOCATION(_pSrc) ((_pSrc)->pShadowAllocation) 145 #else 146 # define VBOXWDDM_FB_ALLOCATION(_pSrc) ((_pSrc)->pPrimaryAllocation) 147 #endif 148 149 //DECLINLINE(VBOXVIDEOOFFSET) vboxWddmOffsetFromPhAddress(PHYSICAL_ADDRESS phAddr) 150 //{ 151 // return (VBOXVIDEOOFFSET)(phAddr.QuadPart ? phAddr.QuadPart - VBE_DISPI_LFB_PHYSICAL_ADDRESS : VBOXVIDEOOFFSET_VOID); 152 //} 153 123 154 #endif /* #ifndef ___VBoxVideoWddm_h___ */
Note:
See TracChangeset
for help on using the changeset viewer.