Changeset 30152 in vbox for trunk/src/VBox/Additions/WINNT
- Timestamp:
- Jun 10, 2010 4:21:59 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62574
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp
r30144 r30152 2049 2049 Assert(pD3DIfTex); 2050 2050 RECT *pRect = NULL; 2051 bool bNeedResynch = false; 2051 2052 Assert(!pData->Flags.RangeValid); 2052 2053 Assert(!pData->Flags.BoxValid); … … 2083 2084 } 2084 2085 2085 ++pLockAlloc->LockInfo.cLocks;2086 bNeedResynch = !pData->Flags.Discard; 2086 2087 } 2087 2088 } … … 2101 2102 } 2102 2103 Assert(pLockAlloc->LockInfo.LockedRect.pBits); 2103 } 2104 2105 2106 ++pLockAlloc->LockInfo.cLocks; 2107 2108 if (!pData->Flags.NotifyOnly) 2109 { 2110 pData->pSurfData = pLockAlloc->LockInfo.LockedRect.pBits; 2111 pData->Pitch = pLockAlloc->LockInfo.LockedRect.Pitch; 2112 pData->SlicePitch = 0; 2113 Assert(pLockAlloc->SurfDesc.slicePitch == 0); 2114 Assert(!pLockAlloc->pvMem); 2115 } 2116 else 2117 { 2118 Assert(pLockAlloc->pvMem); 2119 Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM); 2120 if (/* !pData->Flags.WriteOnly && */ !pData->Flags.Discard) 2121 vboxWddmLockUnlockMemSynch(pLockAlloc, &pLockAlloc->LockInfo.LockedRect, pRect, false /*bool bToLockInfo*/); 2104 2105 bNeedResynch = pLockAlloc->LockInfo.fFlags.Discard && !pData->Flags.Discard; 2106 2107 Assert(!bNeedResynch); 2108 2109 if (/*(pLockAlloc->LockInfo.fFlags.Discard && !pData->Flags.Discard) 2110 || */ 2111 (pLockAlloc->LockInfo.fFlags.ReadOnly && !pData->Flags.ReadOnly)) 2112 { 2113 hr = pD3DIfTex->UnlockRect(pData->SubResourceIndex); 2114 Assert(hr == S_OK); 2115 if (hr == S_OK) 2116 { 2117 hr = pD3DIfTex->LockRect(pData->SubResourceIndex, 2118 &pLockAlloc->LockInfo.LockedRect, 2119 pRect, 2120 vboxDDI2D3DLockFlags(pData->Flags)); 2121 Assert(hr == S_OK); 2122 pLockAlloc->LockInfo.fFlags.ReadOnly = 0; 2123 } 2124 } 2125 } 2126 2127 if (hr == S_OK) 2128 { 2129 ++pLockAlloc->LockInfo.cLocks; 2130 2131 if (!pData->Flags.NotifyOnly) 2132 { 2133 pData->pSurfData = pLockAlloc->LockInfo.LockedRect.pBits; 2134 pData->Pitch = pLockAlloc->LockInfo.LockedRect.Pitch; 2135 pData->SlicePitch = 0; 2136 Assert(pLockAlloc->SurfDesc.slicePitch == 0); 2137 Assert(!pLockAlloc->pvMem); 2138 } 2139 else 2140 { 2141 Assert(pLockAlloc->pvMem); 2142 Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM); 2143 2144 if (bNeedResynch) 2145 vboxWddmLockUnlockMemSynch(pLockAlloc, &pLockAlloc->LockInfo.LockedRect, pRect, false /*bool bToLockInfo*/); 2146 } 2122 2147 } 2123 2148 } … … 2136 2161 } 2137 2162 2138 /* else - we lock the entire texture, pRect == NULL */2139 2140 // Assert(!pLockAlloc->LockInfo.cLocks);2163 /* else - we lock the entire vertex buffer, pRect == NULL */ 2164 2165 Assert(!pAlloc->LockInfo.cLocks); 2141 2166 if (!pAlloc->LockInfo.cLocks) 2142 2167 { … … 2145 2170 &pAlloc->LockInfo.LockedRect.pBits, 2146 2171 vboxDDI2D3DLockFlags(pData->Flags)); 2172 #ifdef VBOXWDDMDISP_WITH_TMPWORKAROUND 2173 if (pData->Flags.MightDrawFromLocked) 2174 { 2175 RECT r, *pr; 2176 if (pRange) 2177 { 2178 r.top = 0; 2179 r.left = pRange->Offset; 2180 r.bottom = 1; 2181 r.right = pRange->Offset + pRange->Size; 2182 pr = &r; 2183 } 2184 else 2185 pr = NULL; 2186 2187 pAlloc->LockInfo.LockedRect.Pitch = pAlloc->SurfDesc.width; 2188 2189 vboxWddmLockUnlockMemSynch(pAlloc, &pAlloc->LockInfo.LockedRect, pr, true /*bool bToLockInfo*/); 2190 pD3D9VBuf->Unlock(); 2191 } 2192 #endif 2147 2193 Assert(hr == S_OK); 2148 2194 if (hr == S_OK) … … 2162 2208 // pAlloc->LockInfo.fFlags.RangeValid = 0; 2163 2209 } 2164 2165 ++pAlloc->LockInfo.cLocks;2166 2210 } 2167 2211 } … … 2181 2225 } 2182 2226 2183 2184 ++pAlloc->LockInfo.cLocks; 2185 2186 if (!pData->Flags.NotifyOnly) 2187 { 2188 pData->pSurfData = pAlloc->LockInfo.LockedRect.pBits; 2189 pData->Pitch = pAlloc->LockInfo.LockedRect.Pitch; 2190 pData->SlicePitch = 0; 2191 Assert(pAlloc->SurfDesc.slicePitch == 0); 2192 Assert(!pAlloc->pvMem); 2193 } 2194 else 2195 { 2196 Assert(pAlloc->pvMem); 2197 Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM); 2198 if (/* !pData->Flags.WriteOnly && */ !pData->Flags.Discard) 2199 { 2200 RECT r, *pr; 2201 if (pRange) 2227 if (hr == S_OK) 2228 { 2229 ++pAlloc->LockInfo.cLocks; 2230 2231 if (!pData->Flags.NotifyOnly) 2232 { 2233 pData->pSurfData = pAlloc->LockInfo.LockedRect.pBits; 2234 pData->Pitch = pAlloc->LockInfo.LockedRect.Pitch; 2235 pData->SlicePitch = 0; 2236 Assert(pAlloc->SurfDesc.slicePitch == 0); 2237 Assert(!pAlloc->pvMem); 2238 } 2239 else 2240 { 2241 Assert(pAlloc->pvMem); 2242 Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM); 2243 if (/* !pData->Flags.WriteOnly && */ !pData->Flags.Discard) 2202 2244 { 2203 r.top = 0; 2204 r.left = pRange->Offset; 2205 r.bottom = 1; 2206 r.right = pRange->Offset + pRange->Size; 2207 pr = &r; 2245 RECT r, *pr; 2246 if (pRange) 2247 { 2248 r.top = 0; 2249 r.left = pRange->Offset; 2250 r.bottom = 1; 2251 r.right = pRange->Offset + pRange->Size; 2252 pr = &r; 2253 } 2254 else 2255 pr = NULL; 2256 vboxWddmLockUnlockMemSynch(pAlloc, &pAlloc->LockInfo.LockedRect, pr, false /*bool bToLockInfo*/); 2208 2257 } 2209 else2210 pr = NULL;2211 vboxWddmLockUnlockMemSynch(pAlloc, &pAlloc->LockInfo.LockedRect, pr, false /*bool bToLockInfo*/);2212 2258 } 2213 2259 } … … 2322 2368 Assert(pAlloc->LockInfo.cLocks < UINT32_MAX); 2323 2369 // pAlloc->LockInfo.cLocks = 0; 2370 #ifdef VBOXWDDMDISP_WITH_TMPWORKAROUND 2371 if (!pAlloc->LockInfo.cLocks && !pAlloc->LockInfo.fFlags.MightDrawFromLocked) 2372 #else 2324 2373 if (!pAlloc->LockInfo.cLocks) 2374 #endif 2325 2375 { 2326 2376 // Assert(!pAlloc->LockInfo.cLocks);
Note:
See TracChangeset
for help on using the changeset viewer.