- Timestamp:
- Jun 28, 2010 12:34:11 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 63142
- Location:
- trunk/src/VBox/Additions/WINNT
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Display/Makefile.kmk
r30405 r30462 88 88 wddm/VBoxDispD3DIf.cpp \ 89 89 wddm/VBoxDispCm.cpp \ 90 wddm/VBoxDispMp.cpp \ 91 wddm/VBoxDispMpTst.cpp \ 90 92 wddm/VBoxDispD3D.def \ 91 93 wddm/VBoxDispD3D.rc -
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispCm.cpp
r30405 r30462 106 106 { 107 107 VBOXWDDM_CREATECONTEXT_INFO Info; 108 Info.u32IfVersion = pDevice->u32IfVersion; 109 Info.u32IsD3D = VBOXDISPMODE_IS_3D(pDevice->pAdapter); 108 110 Info.hUmEvent = (uint64_t)g_pVBoxCmMgr.Session.hEvent; 109 111 Info.u64UmInfo = (uint64_t)pContext; … … 127 129 if (hr == S_OK) 128 130 { 131 Assert(pContext->ContextInfo.hContext); 132 pContext->ContextInfo.pPrivateDriverData = NULL; 133 pContext->ContextInfo.PrivateDriverDataSize = 0; 129 134 vboxDispCmSessionCtxAdd(&g_pVBoxCmMgr.Session, pContext); 130 135 pContext->pDevice = pDevice; … … 138 143 Assert(pContext->ContextInfo.hContext); 139 144 D3DDDICB_DESTROYCONTEXT DestroyContext; 145 Assert(pDevice->DefaultContext.ContextInfo.hContext); 140 146 DestroyContext.hContext = pDevice->DefaultContext.ContextInfo.hContext; 141 147 HRESULT hr = pDevice->RtCallbacks.pfnDestroyContextCb(pDevice->hDevice, &DestroyContext); … … 154 160 } 155 161 156 HRESULT vboxDispCmSessionCmdGet(PVBOXDISPCM_SESSION pSession, void *pvCmd, uint32_t cbCmd, DWORD dwMilliseconds)157 { 158 Assert(cbCmd >= VBOXDISPIFESCAPE_SIZE(sizeof (VBOXWDDM_GETVBOXVIDEOCMCMD_HDR)));159 if (cbCmd < VBOXDISPIFESCAPE_SIZE(sizeof (VBOXWDDM_GETVBOXVIDEOCMCMD_HDR)))162 HRESULT vboxDispCmSessionCmdGet(PVBOXDISPCM_SESSION pSession, PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pCmd, uint32_t cbCmd, DWORD dwMilliseconds) 163 { 164 Assert(cbCmd >= sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)); 165 if (cbCmd < sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)) 160 166 return E_INVALIDARG; 161 167 … … 165 171 case WAIT_OBJECT_0: 166 172 { 167 PVBOXDISPIFESCAPE pEscape = (PVBOXDISPIFESCAPE)pvCmd;168 173 HRESULT hr = S_OK; 169 174 D3DDDICB_ESCAPE DdiEscape; 170 175 DdiEscape.Flags.Value = 0; 171 DdiEscape.pPrivateDriverData = p vCmd;176 DdiEscape.pPrivateDriverData = pCmd; 172 177 DdiEscape.PrivateDriverDataSize = cbCmd; 173 178 174 p Escape->escapeCode = VBOXESC_GETVBOXVIDEOCMCMD;179 pCmd->EscapeHdr.escapeCode = VBOXESC_GETVBOXVIDEOCMCMD; 175 180 /* lock to ensure the context is not distructed */ 176 181 EnterCriticalSection(&pSession->CritSect); … … 191 196 { 192 197 LeaveCriticalSection(&pSession->CritSect); 193 PVBOXWDDM_GETVBOXVIDEOCMCMD_HDR pHdr = VBOXDISPIFESCAPE_DATA(pEscape, VBOXWDDM_GETVBOXVIDEOCMCMD_HDR); 194 pHdr->cbCmdsReturned = 0; 195 pHdr->cbRemainingCmds = 0; 196 pHdr->cbRemainingFirstCmd = 0; 198 pCmd->Hdr.cbCmdsReturned = 0; 199 pCmd->Hdr.cbRemainingCmds = 0; 200 pCmd->Hdr.cbRemainingFirstCmd = 0; 197 201 } 198 202 … … 201 205 case WAIT_TIMEOUT: 202 206 { 203 PVBOXDISPIFESCAPE pEscape = (PVBOXDISPIFESCAPE)pvCmd; 204 PVBOXWDDM_GETVBOXVIDEOCMCMD_HDR pHdr = VBOXDISPIFESCAPE_DATA(pEscape, VBOXWDDM_GETVBOXVIDEOCMCMD_HDR); 205 pHdr->cbCmdsReturned = 0; 206 pHdr->cbRemainingCmds = 0; 207 pHdr->cbRemainingFirstCmd = 0; 207 pCmd->Hdr.cbCmdsReturned = 0; 208 pCmd->Hdr.cbRemainingCmds = 0; 209 pCmd->Hdr.cbRemainingFirstCmd = 0; 208 210 return S_OK; 209 211 } … … 214 216 } 215 217 216 HRESULT vboxDispCmCmdGet( void *pvCmd, uint32_t cbCmd, DWORD dwMilliseconds)217 { 218 return vboxDispCmSessionCmdGet(&g_pVBoxCmMgr.Session, p vCmd, cbCmd, dwMilliseconds);219 } 218 HRESULT vboxDispCmCmdGet(PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pCmd, uint32_t cbCmd, DWORD dwMilliseconds) 219 { 220 return vboxDispCmSessionCmdGet(&g_pVBoxCmMgr.Session, pCmd, cbCmd, dwMilliseconds); 221 } -
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp
r30405 r30462 1085 1085 LPVOID lpReserved) 1086 1086 { 1087 BOOL bOk = TRUE; 1088 1087 1089 switch (dwReason) 1088 1090 { … … 1091 1093 RTR3Init(); 1092 1094 1093 vboxVDbgPrint(("VBoxDispD3D: DLL loaded.\n")); 1095 HRESULT hr = vboxDispCmInit(); 1096 Assert(hr == S_OK); 1097 if (hr == S_OK) 1098 vboxVDbgPrint(("VBoxDispD3D: DLL loaded.\n")); 1099 else 1100 bOk = FALSE; 1094 1101 1095 1102 // VbglR3Init(); … … 1099 1106 case DLL_PROCESS_DETACH: 1100 1107 { 1101 vboxVDbgPrint(("VBoxDispD3D: DLL unloaded.\n")); 1108 HRESULT hr = vboxDispCmTerm(); 1109 Assert(hr == S_OK); 1110 if (hr == S_OK) 1111 vboxVDbgPrint(("VBoxDispD3D: DLL unloaded.\n")); 1112 else 1113 bOk = FALSE; 1102 1114 // VbglR3Term(); 1103 1115 /// @todo RTR3Term(); … … 1108 1120 break; 1109 1121 } 1110 return TRUE;1122 return bOk; 1111 1123 } 1112 1124 … … 3621 3633 3622 3634 PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice; 3623 if (pDevice->DefaultContext.ContextInfo.hContext) 3624 { 3625 D3DDDICB_DESTROYCONTEXT DestroyContext; 3626 DestroyContext.hContext = pDevice->DefaultContext.ContextInfo.hContext; 3627 HRESULT tmpHr = pDevice->RtCallbacks.pfnDestroyContextCb(pDevice->hDevice, &DestroyContext); 3628 Assert(tmpHr == S_OK); 3629 } 3630 RTMemFree(hDevice); 3631 vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice)); 3632 return S_OK; 3635 HRESULT hr = vboxDispCmCtxDestroy(pDevice, &pDevice->DefaultContext); 3636 Assert(hr == S_OK); 3637 if (hr == S_OK) 3638 RTMemFree(pDevice); 3639 vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice)); 3640 return hr; 3633 3641 } 3634 3642 … … 4106 4114 && !pCreateData->PatchLocationListSize) 4107 4115 { 4108 pDevice->DefaultContext.ContextInfo.NodeOrdinal = 0; 4109 pDevice->DefaultContext.ContextInfo.EngineAffinity = 0; 4110 pDevice->DefaultContext.ContextInfo.Flags.Value = 0; 4111 pDevice->DefaultContext.ContextInfo.pPrivateDriverData = NULL; 4112 pDevice->DefaultContext.ContextInfo.PrivateDriverDataSize = 0; 4113 pDevice->DefaultContext.ContextInfo.hContext = 0; 4114 pDevice->DefaultContext.ContextInfo.pCommandBuffer = NULL; 4115 pDevice->DefaultContext.ContextInfo.CommandBufferSize = 0; 4116 pDevice->DefaultContext.ContextInfo.pAllocationList = NULL; 4117 pDevice->DefaultContext.ContextInfo.AllocationListSize = 0; 4118 pDevice->DefaultContext.ContextInfo.pPatchLocationList = NULL; 4119 pDevice->DefaultContext.ContextInfo.PatchLocationListSize = 0; 4120 4121 hr = pDevice->RtCallbacks.pfnCreateContextCb(pDevice->hDevice, &pDevice->DefaultContext.ContextInfo); 4116 hr = vboxDispCmCtxCreate(pDevice, &pDevice->DefaultContext); 4122 4117 Assert(hr == S_OK); 4123 4118 if (hr == S_OK) 4124 { 4125 if (VBOXDISPMODE_IS_3D(pAdapter)) 4126 { 4127 /* we postpone IDirect3DDevice device creation to CreateResource, 4128 * where resource render target gets created, 4129 * which is actually done as part of d3dx.dll Direct3DDevice creation */ 4130 vboxVDbgPrint((__FUNCTION__": D3D Device Created\n")); 4131 break; 4132 } 4133 else 4134 { 4135 /* DDraw */ 4136 vboxVDbgPrint((__FUNCTION__": DirectDraw Device Created\n")); 4137 break; 4138 } 4139 4140 D3DDDICB_DESTROYCONTEXT DestroyContext; 4141 DestroyContext.hContext = pDevice->DefaultContext.ContextInfo.hContext; 4142 4143 HRESULT tmpHr = pDevice->RtCallbacks.pfnDestroyContextCb(pDevice->hDevice, &DestroyContext); 4144 Assert(tmpHr == S_OK); 4145 } 4146 else 4147 vboxVDbgPrintR((__FUNCTION__": pfnCreateContextCb failed, hr(%d)\n", hr)); 4119 break; 4148 4120 } 4149 4121 else -
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3DCmn.h
r30405 r30462 32 32 #include "VBoxDispD3DIf.h" 33 33 #include "../../Miniport/wddm/VBoxVideoIf.h" 34 #include "VBoxDispCm.h" 34 35 #include "VBoxDispD3D.h" 35 36 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoCm.cpp
r30441 r30462 357 357 } 358 358 359 NTSTATUS vboxVideoCmEscape(PVBOXVIDEOCM_CTX pContext, PVBOX WDDM_GETVBOXVIDEOCMCMD_HDR pvCmd, uint32_t cbCmd)360 { 361 Assert(cbCmd >= VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET());362 if (cbCmd < VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET())359 NTSTATUS vboxVideoCmEscape(PVBOXVIDEOCM_CTX pContext, PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pCmd, uint32_t cbCmd) 360 { 361 Assert(cbCmd >= sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)); 362 if (cbCmd < sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)) 363 363 return STATUS_BUFFER_TOO_SMALL; 364 364 … … 370 370 uint32_t cbRemainingCmds = 0; 371 371 uint32_t cbRemainingFirstCmd = 0; 372 uint 8_t * pvData = VBOXWDDM_GETVBOXVIDEOCMCMD_DATA(pvCmd, uint8_t);373 uint 32_t cbData = cbCmd - VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET();372 uint32_t cbData = cbCmd - sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD); 373 uint8_t * pvData = ((uint8_t *)pCmd) + sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD); 374 374 bool bDetachMode = true; 375 375 InitializeListHead(&DetachedList); … … 427 427 ExReleaseFastMutex(&pSession->Mutex); 428 428 429 p vCmd->cbCmdsReturned = 0;429 pCmd->Hdr.cbCmdsReturned = 0; 430 430 for (pCurEntry = DetachedList.Blink; DetachedList.Blink != &DetachedList; pCurEntry = pCurEntry->Blink) 431 431 { 432 432 memcpy(pvData, &pHdr->CmdHdr, pHdr->CmdHdr.cbCmd); 433 433 pvData += pHdr->CmdHdr.cbCmd; 434 p vCmd->cbCmdsReturned += pHdr->CmdHdr.cbCmd;434 pCmd->Hdr.cbCmdsReturned += pHdr->CmdHdr.cbCmd; 435 435 vboxVideoCmCmdReleaseByHdr(pHdr); 436 436 } 437 437 438 p vCmd->cbRemainingCmds = cbRemainingCmds;439 p vCmd->cbRemainingFirstCmd = cbRemainingFirstCmd;440 p vCmd->u32Reserved = 0;438 pCmd->Hdr.cbRemainingCmds = cbRemainingCmds; 439 pCmd->Hdr.cbRemainingFirstCmd = cbRemainingFirstCmd; 440 pCmd->Hdr.u32Reserved = 0; 441 441 442 442 return STATUS_SUCCESS; -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoCm.h
r30405 r30462 41 41 void vboxVideoCmCmdSubmit(void *pvCmd, uint32_t cbSize); 42 42 43 NTSTATUS vboxVideoCmEscape(PVBOXVIDEOCM_CTX pContext, PVBOX WDDM_GETVBOXVIDEOCMCMD_HDR pvCmd, uint32_t cbCmd);43 NTSTATUS vboxVideoCmEscape(PVBOXVIDEOCM_CTX pContext, PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pCmd, uint32_t cbCmd); 44 44 45 45 #endif /* #ifndef ___VBoxVideoCm_h___ */ -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoIf.h
r30441 r30462 23 23 24 24 #include <VBox/VBoxVideo.h> 25 #include "../../../include/VBoxDisplay.h" 26 27 #include <iprt/assert.h> 28 25 29 26 30 /* @todo: implement a check to ensure display & miniport versions match. 27 31 * One would increase this whenever definitions in this file are changed */ 28 #define VBOXVIDEOIF_VERSION 332 #define VBOXVIDEOIF_VERSION 4 29 33 30 34 /* create allocation func */ … … 145 149 typedef struct VBOXWDDM_CREATECONTEXT_INFO 146 150 { 151 /* interface version, i.e. 9 for d3d9, 8 for d3d8, etc. */ 152 uint32_t u32IfVersion; 153 /* true if d3d false if ddraw */ 154 uint32_t u32IsD3D; 147 155 /* we use uint64_t instead of HANDLE to ensure structure def is the same for both 32-bit and 64-bit 148 156 * since x64 kernel driver can be called by 32-bit UMD */ … … 184 192 }VBOXVIDEOCM_CMD_HDR, *PVBOXVIDEOCM_CMD_HDR; 185 193 194 AssertCompile((sizeof (VBOXVIDEOCM_CMD_HDR) & 7) == 0); 195 186 196 typedef struct VBOXVIDEOCM_CMD_RECTS 187 197 { … … 201 211 } VBOXWDDM_GETVBOXVIDEOCMCMD_HDR, *PVBOXWDDM_GETVBOXVIDEOCMCMD_HDR; 202 212 203 #define VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET() ((sizeof (VBOXWDDM_GETVBOXVIDEOCMCMD_HDR) + 7) & ~7) 204 #define VBOXWDDM_GETVBOXVIDEOCMCMD_DATA(_pHead, _t) ( (_t*)(((uint8_t*)(_pHead)) + VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET())) 205 #define VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_SIZE(_s) ( (_s) < VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET() ? 0 : (_s) - VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET() ) 206 #define VBOXWDDM_GETVBOXVIDEOCMCMD_SIZE(_cbData) ((_cbData) ? VBOXWDDM_GETVBOXVIDEOCMCMD_DATA_OFFSET() + (_cbData) : sizeof (VBOXWDDM_GETVBOXVIDEOCMCMD_HDR)) 213 typedef struct VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD 214 { 215 VBOXDISPIFESCAPE EscapeHdr; 216 VBOXWDDM_GETVBOXVIDEOCMCMD_HDR Hdr; 217 } VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD, *PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD; 218 219 AssertCompile((sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD) & 7) == 0); 220 AssertCompile(RT_OFFSETOF(VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD, EscapeHdr) == 0); 207 221 208 222 /* query info func */ -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r30441 r30462 2078 2078 case VBOXVDMACMD_TYPE_DMA_PRESENT_BLT: 2079 2079 { 2080 PVBOXWDDM_DMA_PRESENT_BLT pBlt = (PVBOXWDDM_DMA_PRESENT_BLT)pPrivateData; 2080 2081 uint32_t cContexts3D = ASMAtomicReadU32(&pDevExt->cContexts3D); 2081 2082 if (cContexts3D) 2082 2083 { 2083 2084 } 2084 if (pPrivateData->fFlags.bShadow2PrimaryUpdate) 2085 { 2086 RECT rect; 2087 Assert(pBlt->DstRects.cRects); 2088 if (pBlt->DstRects.cRects > 1) 2089 { 2090 rect = pBlt->DstRects.aRects[1]; 2091 for (UINT i = 2; i < pBlt->DstRects.cRects; ++i) 2092 { 2093 vboxWddmRectUnited(&rect, &rect, &pBlt->DstRects.aRects[i]); 2094 } 2095 } 2096 else 2097 rect = pBlt->DstRects.aRects[0]; 2098 2099 VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pPrivateData->SrcAllocInfo.srcId]; 2100 VBOXVBVA_OP(ReportDirtyRect, pDevExt, &pSource->Vbva, &rect); 2101 } 2102 } 2103 else 2104 Assert(!pPrivateData->fFlags.bShadow2PrimaryUpdate); 2105 2085 2106 VBOXWDDM_SHADOW_UPDATE_COMPLETION context; 2086 2107 context.pDevExt = pDevExt; … … 2572 2593 { 2573 2594 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 2574 Assert(pContext); 2575 PVBOXWDDM_GETVBOXVIDEOCMCMD_HDR pHdr = VBOXDISPIFESCAPE_DATA(pEscapeHdr, VBOXWDDM_GETVBOXVIDEOCMCMD_HDR); 2576 Status = vboxVideoCmEscape(&pContext->CmContext, pHdr, VBOXDISPIFESCAPE_DATA_SIZE(pEscape->PrivateDriverDataSize)); 2577 Assert(Status == STATUS_SUCCESS); 2595 PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pRegions = (PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)pEscapeHdr; 2596 Assert(pEscape->PrivateDriverDataSize >= sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)); 2597 if (pEscape->PrivateDriverDataSize >= sizeof (VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)) 2598 { 2599 Status = vboxVideoCmEscape(&pContext->CmContext, pRegions, pEscape->PrivateDriverDataSize); 2600 Assert(Status == STATUS_SUCCESS); 2601 } 2602 else 2603 Status = STATUS_BUFFER_TOO_SMALL; 2604 2578 2605 break; 2579 2606 } … … 2653 2680 { 2654 2681 drprintf((__FUNCTION__": pEscape->PrivateDriverDataSize(%d) < (%d)\n", pEscape->PrivateDriverDataSize, sizeof (VBOXDISPIFESCAPE))); 2655 Status = STATUS_INVALID_PARAMETER;2656 2682 AssertBreakpoint(); 2683 Status = STATUS_BUFFER_TOO_SMALL; 2657 2684 } 2658 2685 … … 3738 3765 Assert(cbCmd < UINT32_MAX/2); 3739 3766 Assert(cbCmd > sizeof (RECT)); 3740 if (cbCmd <cbRects)3767 if (cbCmd >= cbRects) 3741 3768 { 3742 3769 cbCmd -= cbRects; … … 3756 3783 } 3757 3784 3785 pPresent->pDmaBufferPrivateData = (uint8_t*)pPresent->pDmaBufferPrivateData + cbHead + cbRects; 3758 3786 pPresent->pDmaBuffer = ((uint8_t*)pPresent->pDmaBuffer) + VBOXWDDM_DUMMY_DMABUFFER_SIZE; 3759 3787 Assert(pPresent->DmaSize >= VBOXWDDM_DUMMY_DMABUFFER_SIZE); … … 4041 4069 pContext->NodeOrdinal = pCreateContext->NodeOrdinal; 4042 4070 vboxVideoCmCtxInitEmpty(&pContext->CmContext); 4043 if (pCreateContext->Flags.SystemContext) 4071 if (pCreateContext->Flags.SystemContext || pCreateContext->PrivateDriverDataSize == 0) 4072 { 4073 Assert(pCreateContext->PrivateDriverDataSize == 0); 4074 Assert(!pCreateContext->pPrivateDriverData); 4075 Assert(pCreateContext->Flags.Value == 1 || pCreateContext->Flags.Value == 0); 4044 4076 pContext->enmType = VBOXWDDM_CONTEXT_TYPE_SYSTEM; 4045 else if (pCreateContext->Flags.Value == 0) 4046 { 4077 } 4078 else 4079 { 4080 Assert(pCreateContext->Flags.Value == 0); 4047 4081 Assert(pCreateContext->PrivateDriverDataSize == sizeof (VBOXWDDM_CREATECONTEXT_INFO)); 4048 4082 Assert(pCreateContext->pPrivateDriverData); 4049 4083 if (pCreateContext->PrivateDriverDataSize == sizeof (VBOXWDDM_CREATECONTEXT_INFO)) 4050 4084 { 4051 pContext->enmType = VBOXWDDM_CONTEXT_TYPE_CUSTOM_3D;4052 4085 PVBOXWDDM_CREATECONTEXT_INFO pInfo = (PVBOXWDDM_CREATECONTEXT_INFO)pCreateContext->pPrivateDriverData; 4053 Status = vboxVideoCmCtxAdd(&pDevice->pAdapter->CmMgr, &pContext->CmContext, (HANDLE)pInfo->hUmEvent, pInfo->u64UmInfo); 4054 Assert(Status == STATUS_SUCCESS); 4055 if (Status == STATUS_SUCCESS) 4086 if (pInfo->u32IsD3D) 4056 4087 { 4057 Assert(KeGetCurrentIrql() < DISPATCH_LEVEL); 4058 ExAcquireFastMutex(&pDevExt->ContextMutex); 4059 InsertHeadList(&pDevExt->ContextList3D, &pContext->ListEntry); 4060 ASMAtomicIncU32(&pDevExt->cContexts3D); 4061 ExReleaseFastMutex(&pDevExt->ContextMutex); 4088 pContext->enmType = VBOXWDDM_CONTEXT_TYPE_CUSTOM_3D; 4089 Status = vboxVideoCmCtxAdd(&pDevice->pAdapter->CmMgr, &pContext->CmContext, (HANDLE)pInfo->hUmEvent, pInfo->u64UmInfo); 4090 Assert(Status == STATUS_SUCCESS); 4091 if (Status == STATUS_SUCCESS) 4092 { 4093 Assert(KeGetCurrentIrql() < DISPATCH_LEVEL); 4094 ExAcquireFastMutex(&pDevExt->ContextMutex); 4095 InsertHeadList(&pDevExt->ContextList3D, &pContext->ListEntry); 4096 ASMAtomicIncU32(&pDevExt->cContexts3D); 4097 ExReleaseFastMutex(&pDevExt->ContextMutex); 4098 } 4062 4099 } 4063 } 4064 else 4065 { 4066 pContext->enmType = VBOXWDDM_CONTEXT_TYPE_CUSTOM_2D; 4067 } 4068 } 4069 else 4070 { 4071 AssertBreakpoint(); /* we do not support custom contexts for now */ 4072 drprintf((__FUNCTION__ ", we do not support custom contexts for now, hDevice (0x%x)\n", hDevice)); 4100 else 4101 { 4102 pContext->enmType = VBOXWDDM_CONTEXT_TYPE_CUSTOM_2D; 4103 } 4104 } 4073 4105 } 4074 4106 -
trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h
r30405 r30462 22 22 # define VBOXESC_GETVBOXVIDEOCMCMD 0xABCD9004 23 23 24 #include <iprt/assert.h> 25 24 26 typedef struct 25 27 { … … 42 44 typedef struct VBOXDISPIFESCAPE 43 45 { 44 int escapeCode; 46 int32_t escapeCode; 47 uint32_t u32CmdSpecific; 45 48 } VBOXDISPIFESCAPE, *PVBOXDISPIFESCAPE; 49 50 /* ensure command body is always 8-byte-aligned*/ 51 AssertCompile((sizeof (VBOXDISPIFESCAPE) & 7) == 0); 46 52 47 53 #define VBOXDISPIFESCAPE_DATA_OFFSET() ((sizeof (VBOXDISPIFESCAPE) + 7) & ~7)
Note:
See TracChangeset
for help on using the changeset viewer.