Changeset 29488 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm
- Timestamp:
- May 14, 2010 5:05:43 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 61618
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp
r29452 r29488 30 30 #include "VBoxDispD3D.h" 31 31 #include "VBoxDispD3DCmn.h" 32 #include "../../Miniport/wddm/VBoxVideoIf.h" 32 33 33 34 #ifdef VBOXWDDMDISP_DEBUG … … 73 74 74 75 HRESULT hr = S_OK; 76 PVBOXWDDMDISP_ADAPTER pAdapter = (PVBOXWDDMDISP_ADAPTER)hAdapter; 75 77 76 78 switch (pData->Type) 77 79 { 78 80 case D3DDDICAPS_DDRAW: 81 { 82 AssertBreakpoint(); 79 83 Assert(pData->DataSize >= sizeof (DDRAW_CAPS)); 80 84 if (pData->DataSize >= sizeof (DDRAW_CAPS)) 85 { 81 86 memset(pData->pData, 0, sizeof (DDRAW_CAPS)); 87 #ifdef VBOX_WITH_VIDEOHWACCEL 88 VBOXWDDM_QI_2D_1 Query; 89 Query.hdr.enmType = VBOXWDDM_QI_TYPE_2D_1; 90 VBOXVHWA_VERSION_INIT(&Query.Info.u.in.guestVersion); 91 D3DDDICB_QUERYADAPTERINFO DdiQuery; 92 DdiQuery.PrivateDriverDataSize = sizeof(Query); 93 DdiQuery.pPrivateDriverData = &Query; 94 hr = pAdapter->RtCallbacks.pfnQueryAdapterInfoCb(pAdapter->hAdapter, &DdiQuery); 95 Assert(hr == S_OK); 96 if (hr == S_OK) 97 { 98 if (Query.hdr.rc == VINF_SUCCESS) 99 { 100 /* query succeeded, check the results */ 101 if (Query.Info.u.out.cfgFlags == VBOXVHWA_CFG_ENABLED) 102 { 103 /* 2D is enabled*/ 104 DDRAW_CAPS *pCaps = (DDRAW_CAPS*)pData->pData; 105 /* overlay supported */ 106 if (Query.Info.u.out.surfaceCaps & VBOXVHWA_SCAPS_OVERLAY) 107 { 108 if (Query.Info.u.out.caps & VBOXVHWA_CAPS_COLORKEY) 109 { 110 pCaps->Caps = DDRAW_CAPS_COLORKEY; 111 } 112 } 113 114 /* @todo: feel the caps from here */ 115 } 116 } 117 } 118 #endif 119 } 82 120 else 83 121 hr = E_INVALIDARG; 84 122 break; 123 } 85 124 case D3DDDICAPS_DDRAW_MODE_SPECIFIC: 125 { 126 AssertBreakpoint(); 86 127 Assert(pData->DataSize >= sizeof (DDRAW_MODE_SPECIFIC_CAPS)); 87 128 if (pData->DataSize >= sizeof (DDRAW_MODE_SPECIFIC_CAPS)) 88 memset(pData->pData, 0, sizeof (DDRAW_MODE_SPECIFIC_CAPS)); 129 { 130 DDRAW_MODE_SPECIFIC_CAPS * pCaps = (DDRAW_MODE_SPECIFIC_CAPS*)pData->pData; 131 memset(&pCaps->Caps /* do not cleanup the first "Head" field, 132 zero starting with the one following "Head", i.e. Caps */, 133 0, sizeof (DDRAW_MODE_SPECIFIC_CAPS) - RT_OFFSETOF(DDRAW_MODE_SPECIFIC_CAPS, Caps)); 134 #ifdef VBOX_WITH_VIDEOHWACCEL 135 VBOXWDDM_QI_2D_1 Query; 136 Query.hdr.enmType = VBOXWDDM_QI_TYPE_2D_1; 137 VBOXVHWA_VERSION_INIT(&Query.Info.u.in.guestVersion); 138 D3DDDICB_QUERYADAPTERINFO DdiQuery; 139 DdiQuery.PrivateDriverDataSize = sizeof(Query); 140 DdiQuery.pPrivateDriverData = &Query; 141 hr = pAdapter->RtCallbacks.pfnQueryAdapterInfoCb(pAdapter->hAdapter, &DdiQuery); 142 Assert(hr == S_OK); 143 if (hr == S_OK) 144 { 145 if (Query.hdr.rc == VINF_SUCCESS) 146 { 147 /* query succeeded, check the results */ 148 if (Query.Info.u.out.cfgFlags == VBOXVHWA_CFG_ENABLED) 149 { 150 /* 2D is enabled*/ 151 if (Query.Info.u.out.surfaceCaps & VBOXVHWA_SCAPS_OVERLAY) 152 { 153 /* overlay supported */ 154 pCaps->Caps = MODE_CAPS_OVERLAY | MODE_CAPS_OVERLAYSTRETCH; 155 if (Query.Info.u.out.caps & VBOXVHWA_CAPS_COLORKEY) 156 { 157 if (Query.Info.u.out.colorKeyCaps & VBOXVHWA_CKEYCAPS_DESTOVERLAY) 158 { 159 pCaps->CKeyCaps |= MODE_CKEYCAPS_DESTOVERLAY 160 | MODE_CKEYCAPS_DESTOVERLAYYUV /* ?? */; 161 } 162 } 163 164 pCaps->FxCaps = MODE_FXCAPS_OVERLAYSHRINKX 165 | MODE_FXCAPS_OVERLAYSHRINKY 166 | MODE_FXCAPS_OVERLAYSTRETCHX 167 | MODE_FXCAPS_OVERLAYSTRETCHY; 168 169 pCaps->MaxVisibleOverlays = Query.Info.u.out.numOverlays; 170 pCaps->MinOverlayStretch = 1; 171 pCaps->MaxOverlayStretch = 32000; 172 } 173 } 174 } 175 } 176 #endif 177 } 89 178 else 90 179 hr = E_INVALIDARG; 91 180 break; 181 } 92 182 case D3DDDICAPS_GETFORMATCOUNT: 93 183 *((uint32_t*)pData->pData) = 0; … … 114 204 break; 115 205 case D3DDDICAPS_GETD3D9CAPS: 206 { 116 207 Assert(pData->DataSize >= sizeof (D3DCAPS9)); 117 208 if (pData->DataSize >= sizeof (D3DCAPS9)) 209 { 210 if (pAdapter->pD3D9If) 211 { 212 hr = pAdapter->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, (D3DCAPS9*)pData->pData); 213 Assert(hr == S_OK); 214 if (hr == S_OK) 215 break; 216 217 vboxVDbgPrintR((__FUNCTION__": GetDeviceCaps hr(%d)\n", hr)); 218 /* let's fall back to the 3D disabled case */ 219 hr = S_OK; 220 } 221 118 222 memset(pData->pData, 0, sizeof (D3DCAPS9)); 223 } 119 224 else 120 225 hr = E_INVALIDARG; 121 226 break; 227 } 122 228 case D3DDDICAPS_GETGAMMARAMPCAPS: 123 229 *((uint32_t*)pData->pData) = 0;
Note:
See TracChangeset
for help on using the changeset viewer.