Changeset 42501 in vbox for trunk/src/VBox
- Timestamp:
- Aug 1, 2012 10:48:53 AM (13 years ago)
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/Makefile.kmk
r42314 r42501 107 107 VBoxDispD3D_INCS = \ 108 108 ../../../include \ 109 .. 109 .. \ 110 $(VBOX_PATH_CROGL_INCLUDE) 110 111 VBoxDispD3D_SOURCES = \ 111 112 wddm/VBoxDispD3D.cpp \ … … 118 119 wddm/VBoxDispDbg.cpp \ 119 120 wddm/VBoxDispD3D.rc \ 120 wddm/VBoxDispD3D.def \ 121 #ifdef VBOX_WITH_CRHGSMI 122 #VBoxDispD3D_SOURCES += \ 123 # wddm/VBoxUhgsmiDisp.cpp \ 124 # wddm/VBoxUhgsmiKmt.cpp 125 #VBoxDispD3D_DEFS += VBOX_WITH_CRHGSMI 126 #endif 121 wddm/VBoxDispD3D.def 122 ifdef VBOX_WITH_CRHGSMI 123 VBoxDispD3D_DEFS += VBOX_WITH_CRHGSMI 124 endif 127 125 VBoxDispD3D_LIBS = \ 128 126 $(VBOX_LIB_IPRT_GUEST_R3) \ 129 127 $(VBOX_LIB_VBGL_R3) \ 130 128 Psapi.lib \ 131 $(VBOX_PATH_ADDITIONS_LIB)/VBoxDispMpLogger$(VBOX_SUFF_LIB) 129 $(VBOX_PATH_ADDITIONS_LIB)/VBoxDispMpLogger$(VBOX_SUFF_LIB) \ 130 $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi$(VBOX_SUFF_LIB) 132 131 133 132 # … … 141 140 $(VBOX_LIB_VBGL_R3_X86) \ 142 141 Psapi.lib \ 143 $(VBOX_PATH_ADDITIONS_LIB)/VBoxDispMpLogger-x86$(VBOX_SUFF_LIB) 142 $(VBOX_PATH_ADDITIONS_LIB)/VBoxDispMpLogger-x86$(VBOX_SUFF_LIB) \ 143 $(VBOX_PATH_ADDITIONS_LIB)/VBoxCrHgsmi-x86$(VBOX_SUFF_LIB) 144 144 VBoxDispD3D-x86_DEFS = $(VBoxDispD3D_DEFS) VBOX_WDDM_WOW64 145 145 … … 151 151 VBoxCrHgsmi_TEMPLATE = VBOXGUESTR3LIB 152 152 VBoxCrHgsmi_SDKS = ReorderCompilerIncs $(VBOX_WINDDK_GST_WLH) 153 VBoxCrHgsmi_DEFS = UNICODE _UNICODE VBOX_WITH_CRHGSMI IN_VBOXCRHGSMI VBOX_WITH_WDDM VBOX_WITH_VDMA VBOX_WITH_HGCM 154 VBoxCrHgsmi_INCS = ../../../include .. 153 #use same defines as VBoxDispD3D to ensure structure definitions match 154 VBoxCrHgsmi_DEFS = $(subst VBOXWDDMDISP,IN_VBOXCRHGSMI,$(VBoxDispD3D_DEFS)) 155 VBoxCrHgsmi_INCS = ../../../include .. $(VBOX_PATH_CROGL_INCLUDE) 155 156 VBoxCrHgsmi_SOURCES = \ 156 157 wddm/VBoxCrHgsmi.cpp \ 157 158 wddm/VBoxDispKmt.cpp \ 158 159 wddm/VBoxDispDbg.cpp \ 159 wddm/VBoxUhgsmiKmt.cpp 160 wddm/VBoxUhgsmiKmt.cpp \ 161 wddm/VBoxUhgsmiBase.cpp \ 162 wddm/VBoxUhgsmiDisp.cpp 160 163 161 164 # -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
r41858 r42501 806 806 807 807 808 #ifdef VBOX_WITH_CRHGSMI809 /* cr hgsmi */810 static VBOXCRHGSMI_CALLBACKS g_VBoxCrHgsmiCallbacks = {0};811 #define VBOXUHGSMIKMT_PERTHREAD812 #ifdef VBOXUHGSMIKMT_PERTHREAD813 #define VBOXUHGSMIKMT_VAR(_type) __declspec(thread) _type814 #else815 #define VBOXUHGSMIKMT_VAR(_type) _type816 #endif817 static VBOXUHGSMIKMT_VAR(VBOXUHGSMI_PRIVATE_KMT) g_VBoxUhgsmiKmt;818 static VBOXUHGSMIKMT_VAR(uint32_t) g_cVBoxUhgsmiKmtRefs = 0;819 #endif820 821 #ifdef VBOX_WITH_CRHGSMI822 static __declspec(thread) PVBOXUHGSMI_PRIVATE_BASE gt_pHgsmi = NULL;823 824 VBOXWDDMDISP_DECL(int) VBoxDispCrHgsmiInit(PVBOXCRHGSMI_CALLBACKS pCallbacks)825 {826 #ifdef VBOX_WITH_CRHGSMI827 vboxDispLock(); /* the lock is needed here only to ensure callbacks are not initialized & used concurrently828 * @todo: make a separate call used to init the per-thread info and make the VBoxDispCrHgsmiInit be called only once */829 g_VBoxCrHgsmiCallbacks = *pCallbacks;830 PVBOXUHGSMI_PRIVATE_BASE pHgsmi = gt_pHgsmi;831 #ifdef DEBUG_misha832 Assert(pHgsmi);833 #endif834 if (pHgsmi)835 {836 if (!pHgsmi->hClient)837 {838 pHgsmi->hClient = g_VBoxCrHgsmiCallbacks.pfnClientCreate(&pHgsmi->Base);839 Assert(pHgsmi->hClient);840 }841 }842 vboxDispUnlock();843 #endif844 return VINF_SUCCESS;845 }846 847 VBOXWDDMDISP_DECL(int) VBoxDispCrHgsmiTerm()848 {849 return VINF_SUCCESS;850 }851 852 VBOXWDDMDISP_DECL(HVBOXCRHGSMI_CLIENT) VBoxDispCrHgsmiQueryClient()853 {854 #ifdef VBOX_WITH_CRHGSMI855 PVBOXUHGSMI_PRIVATE_BASE pHgsmi = gt_pHgsmi;856 #ifdef DEBUG_misha857 Assert(pHgsmi);858 #endif859 if (pHgsmi)860 {861 Assert(pHgsmi->hClient);862 return pHgsmi->hClient;863 }864 #endif865 return NULL;866 }867 868 static HRESULT vboxUhgsmiGlobalRetain()869 {870 HRESULT hr = S_OK;871 vboxDispLock();872 if (!g_cVBoxUhgsmiKmtRefs)873 {874 hr = vboxUhgsmiKmtCreate(&g_VBoxUhgsmiKmt, TRUE);875 Assert(hr == S_OK);876 /* can not do it here because callbacks may not be set yet877 * @todo: need to call the cr lib from here to get the callbacks878 * rather than making the cr lib call us */879 // if (hr == S_OK)880 // {881 // g_VBoxUhgsmiKmt.BasePrivate.hClient = g_VBoxCrHgsmiCallbacks.pfnClientCreate(&g_VBoxUhgsmiKmt.BasePrivate.Base);882 // Assert(g_VBoxUhgsmiKmt.BasePrivate.hClient);883 // }884 }885 886 if (hr == S_OK)887 {888 ++g_cVBoxUhgsmiKmtRefs;889 }890 vboxDispUnlock();891 892 return hr;893 }894 895 static HRESULT vboxUhgsmiGlobalRelease()896 {897 HRESULT hr = S_OK;898 vboxDispLock();899 --g_cVBoxUhgsmiKmtRefs;900 if (!g_cVBoxUhgsmiKmtRefs)901 {902 if (g_VBoxUhgsmiKmt.BasePrivate.hClient)903 g_VBoxCrHgsmiCallbacks.pfnClientDestroy(g_VBoxUhgsmiKmt.BasePrivate.hClient);904 hr = vboxUhgsmiKmtDestroy(&g_VBoxUhgsmiKmt);905 Assert(hr == S_OK);906 }907 vboxDispUnlock();908 return hr;909 }910 911 DECLINLINE(void) vboxDispCrHgsmiClientSet(PVBOXUHGSMI_PRIVATE_BASE pHgsmi)912 {913 gt_pHgsmi = pHgsmi;914 }915 916 DECLINLINE(void) vboxDispCrHgsmiClientClear()917 {918 gt_pHgsmi = NULL;919 }920 921 HRESULT vboxUhgsmiGlobalSetCurrent()922 {923 HRESULT hr = vboxUhgsmiGlobalRetain();924 Assert(hr == S_OK);925 if (hr == S_OK)926 vboxDispCrHgsmiClientSet(&g_VBoxUhgsmiKmt.BasePrivate);927 return hr;928 }929 930 HRESULT vboxUhgsmiGlobalClearCurrent()931 {932 vboxUhgsmiGlobalRelease();933 vboxDispCrHgsmiClientClear();934 return S_OK;935 }936 937 class VBoxDispCrHgsmiScope938 {939 public:940 VBoxDispCrHgsmiScope(PVBOXUHGSMI_PRIVATE_BASE pHgsmi)941 {942 vboxDispCrHgsmiClientSet(pHgsmi);943 }944 945 ~VBoxDispCrHgsmiScope()946 {947 vboxDispCrHgsmiClientClear();948 }949 private:950 };951 952 #define VBOXDISPCRHGSMI_SCOPE_SET_DEV(_pDev) VBoxDispCrHgsmiScope __vboxCrHgsmiScope(&(_pDev)->Uhgsmi.BasePrivate)953 #define VBOXDISPCRHGSMI_SCOPE_SET_GLOBAL() VBoxDispCrHgsmiScope __vboxCrHgsmiScope(&g_VBoxUhgsmiKmt.BasePrivate)954 #else955 808 #define VBOXDISPCRHGSMI_SCOPE_SET_DEV(_pDev) do {} while(0) 956 809 #define VBOXDISPCRHGSMI_SCOPE_SET_GLOBAL() do {} while(0) 957 810 958 VBOXWDDMDISP_DECL(int) VBoxDispCrHgsmiInit(void*)959 {960 return VERR_NOT_IMPLEMENTED;961 }962 963 VBOXWDDMDISP_DECL(int) VBoxDispCrHgsmiTerm()964 {965 return VERR_NOT_IMPLEMENTED;966 }967 968 VBOXWDDMDISP_DECL(void*) VBoxDispCrHgsmiQueryClient()969 {970 return NULL;971 }972 #endif973 811 974 812 typedef struct VBOXWDDMDISP_NSCADD … … 2638 2476 if (!bReuseSwapchain) 2639 2477 { 2640 D3DPRESENT_PARAMETERS Params; 2641 vboxWddmSwapchainFillParams(pSwapchain, &Params); 2478 VBOXWINEEX_D3DPRESENT_PARAMETERS Params; 2479 vboxWddmSwapchainFillParams(pSwapchain, &Params.Base); 2480 Params.pHgsmi = NULL; 2642 2481 2643 2482 if (hr == S_OK) … … 2645 2484 DWORD fFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; 2646 2485 2647 Params. hDeviceWindow = NULL;2486 Params.Base.hDeviceWindow = NULL; 2648 2487 /* @todo: it seems there should be a way to detect this correctly since 2649 2488 * our vboxWddmDDevSetDisplayMode will be called in case we are using full-screen */ 2650 Params. Windowed = TRUE;2489 Params.Base.Windowed = TRUE; 2651 2490 // params.EnableAutoDepthStencil = FALSE; 2652 2491 // params.AutoDepthStencilFormat = D3DFMT_UNKNOWN; … … 2656 2495 if (!pDevice->pDevice9If) 2657 2496 { 2658 hr = pAdapter->pD3D9If->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, NULL, fFlags, &Params, &pDevice9If); 2497 Params.pHgsmi = &pDevice->Uhgsmi.BasePrivate.Base; 2498 hr = pAdapter->pD3D9If->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, NULL, fFlags, &Params.Base, &pDevice9If); 2659 2499 Assert(hr == S_OK); 2660 2500 if (hr == S_OK) 2661 2501 { 2662 Assert(Params. hDeviceWindow);2663 pSwapchain->hWnd = Params. hDeviceWindow;2502 Assert(Params.Base.hDeviceWindow); 2503 pSwapchain->hWnd = Params.Base.hDeviceWindow; 2664 2504 pDevice->pDevice9If = pDevice9If; 2665 2505 hr = pDevice9If->GetSwapChain(0, &pNewIf); … … 2691 2531 /* re-use swapchain window 2692 2532 * this will invalidate the previusly used swapchain */ 2693 Params. hDeviceWindow = pSwapchain->hWnd;2694 2695 hr = pDevice->pDevice9If->CreateAdditionalSwapChain(&Params , &pNewIf);2533 Params.Base.hDeviceWindow = pSwapchain->hWnd; 2534 2535 hr = pDevice->pDevice9If->CreateAdditionalSwapChain(&Params.Base, &pNewIf); 2696 2536 Assert(hr == S_OK); 2697 2537 if (hr == S_OK) 2698 2538 { 2699 Assert(Params. hDeviceWindow);2700 pSwapchain->hWnd = Params. hDeviceWindow;2539 Assert(Params.Base.hDeviceWindow); 2540 pSwapchain->hWnd = Params.Base.hDeviceWindow; 2701 2541 Assert(pNewIf); 2702 2542 } … … 6789 6629 vboxWddmSwapchainDestroyAll(pDevice); 6790 6630 } 6791 6792 #ifdef VBOX_WITH_CRHGSMI6793 vboxDispLock();6794 if (pDevice->Uhgsmi.BasePrivate.hClient)6795 g_VBoxCrHgsmiCallbacks.pfnClientDestroy(pDevice->Uhgsmi.BasePrivate.hClient);6796 vboxDispUnlock();6797 #endif6798 6631 6799 6632 HRESULT hr = vboxDispCmCtxDestroy(pDevice, &pDevice->DefaultContext); … … 7443 7276 && !pCreateData->PatchLocationListSize) 7444 7277 { 7445 #ifdef VBOX_WITH_CRHGSMI7446 hr = vboxUhgsmiD3DInit(&pDevice->Uhgsmi, pDevice);7447 Assert(hr == S_OK);7448 if (hr == S_OK)7449 #endif7450 7278 { 7451 7279 VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice); … … 7537 7365 pAdapter->pD3D9If->Release(); 7538 7366 VBoxDispD3DClose(&pAdapter->D3D); 7539 7540 #ifdef VBOX_WITH_CRHGSMI7541 vboxUhgsmiGlobalRelease();7542 #endif7543 7367 } 7544 7368 … … 7668 7492 do 7669 7493 { 7670 #ifdef VBOX_WITH_CRHGSMI7671 hr = vboxUhgsmiGlobalRetain();7672 Assert(hr == S_OK);7673 if (hr == S_OK)7674 #endif7675 7494 { 7676 7495 VBOXDISPCRHGSMI_SCOPE_SET_GLOBAL(); … … 7709 7528 else 7710 7529 vboxVDbgPrintR((__FUNCTION__": VBoxDispD3DOpen failed, hr (%d)\n", hr)); 7711 #ifdef VBOX_WITH_CRHGSMI 7712 vboxUhgsmiGlobalRelease(); 7713 #endif 7530 7714 7531 } 7715 7532 } while (0); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D64.def
r36867 r42501 20 20 OpenAdapter 21 21 VBoxDispMpGetCallbacks 22 VBoxDispCrHgsmiInit23 VBoxDispCrHgsmiTerm24 VBoxDispCrHgsmiQueryClient -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxUhgsmiDisp.h
r36867 r42501 29 29 } VBOXUHGSMI_PRIVATE_D3D, *PVBOXUHGSMI_PRIVATE_D3D; 30 30 31 HRESULT vboxUhgsmiD3DInit(PVBOXUHGSMI_PRIVATE_D3D pHgsmi, struct VBOXWDDMDISP_DEVICE *pDevice); 31 #if 0 32 void vboxUhgsmiD3DInit(PVBOXUHGSMI_PRIVATE_D3D pHgsmi, struct VBOXWDDMDISP_DEVICE *pDevice); 33 #endif 32 34 33 35 void vboxUhgsmiD3DEscInit(PVBOXUHGSMI_PRIVATE_D3D pHgsmi, struct VBOXWDDMDISP_DEVICE *pDevice); 34 36 35 37 #endif /* #ifndef ___VBoxUhgsmiDisp_h__ */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r42232 r42501 3924 3924 case VBOXESC_UHGSMI_SUBMIT: 3925 3925 { 3926 /* submit UHGSMI command */3926 /* submit VBOXUHGSMI command */ 3927 3927 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3928 3928 PVBOXDISPIFESCAPE_UHGSMI_SUBMIT pSubmit = (PVBOXDISPIFESCAPE_UHGSMI_SUBMIT)pEscapeHdr; … … 3943 3943 case VBOXESC_UHGSMI_ALLOCATE: 3944 3944 { 3945 /* allocate UHGSMI buffer */3945 /* allocate VBOXUHGSMI buffer */ 3946 3946 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3947 3947 PVBOXDISPIFESCAPE_UHGSMI_ALLOCATE pAlocate = (PVBOXDISPIFESCAPE_UHGSMI_ALLOCATE)pEscapeHdr; … … 3960 3960 case VBOXESC_UHGSMI_DEALLOCATE: 3961 3961 { 3962 /* deallocate UHGSMI buffer */3962 /* deallocate VBOXUHGSMI buffer */ 3963 3963 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3964 3964 PVBOXDISPIFESCAPE_UHGSMI_DEALLOCATE pDealocate = (PVBOXDISPIFESCAPE_UHGSMI_DEALLOCATE)pEscapeHdr;
Note:
See TracChangeset
for help on using the changeset viewer.