Changeset 57633 in vbox
- Timestamp:
- Sep 4, 2015 3:04:47 PM (9 years ago)
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm
- Files:
-
- 4 edited
-
VBoxD3DIf.h (modified) (1 diff)
-
VBoxDispD3D.cpp (modified) (5 diffs)
-
VBoxDispDbg.cpp (modified) (1 diff)
-
VBoxDispDbg.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxD3DIf.h
r49244 r57633 80 80 case VBOXDISP_D3DIFTYPE_TEXTURE: 81 81 { 82 Assert(pRc->cAllocations == 1); /* <- VBoxD3DIfSurfGet is typically used in Blt & ColorFill functions 83 * in this case, if texture is used as a destination, 84 * we should update sub-layers as well which is not done currently 85 * so for now check VBoxD3DIfSurfGet is used for one-level textures */ 82 /* @todo VBoxD3DIfSurfGet is typically used in Blt & ColorFill functions 83 * in this case, if texture is used as a destination, 84 * we should update sub-layers as well which is not done currently. */ 86 85 IDirect3DTexture9 *pD3DIfTex = (IDirect3DTexture9*)pD3DIf; 87 86 IDirect3DSurface9 *pSurfaceLevel; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
r56974 r57633 686 686 static VOID vboxWddmDbgRcSynchMemCheck(PVBOXWDDMDISP_RESOURCE pRc) 687 687 { 688 if (!pRc) 689 { 690 return; 691 } 692 688 693 if (pRc->RcDesc.enmPool != D3DDDIPOOL_SYSTEMMEM) 689 694 { … … 1378 1383 { 1379 1384 PVBOXWDDMDISP_ALLOCATION pRtAlloc = pDevice->apRTs[i]; 1385 if (!pRtAlloc) continue; 1380 1386 for (UINT j = 0; j < pSwapchain->cRTs; ++j) 1381 1387 { … … 1894 1900 { 1895 1901 IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice); 1896 PVBOXWDDMDISP_SWAPCHAIN pSwapchain = vboxWddmSwapchainForAlloc(pAlloc);1897 1902 HRESULT hr = S_OK; 1898 IDirect3DSurface9 *pD3D9Surf; 1899 if (pSwapchain) 1900 { 1901 hr = vboxWddmSwapchainRtSurfGet(pDevice, pSwapchain, iRt, pAlloc, bOnSwapchainSynch, &pD3D9Surf); 1902 if (FAILED(hr)) 1903 { 1904 WARN(("vboxWddmSwapchainRtSurfGet failed, hr(0x%x)",hr)); 1905 return hr; 1906 } 1907 } 1908 else 1909 { 1910 hr = VBoxD3DIfSurfGet(pAlloc->pRc, pAlloc->iAlloc, &pD3D9Surf); 1911 if (FAILED(hr)) 1912 { 1913 WARN(("VBoxD3DIfSurfGet failed, hr(0x%x)",hr)); 1914 return hr; 1915 } 1916 } 1917 1918 Assert(pD3D9Surf); 1903 IDirect3DSurface9 *pD3D9Surf = NULL; 1904 if (pAlloc) 1905 { 1906 PVBOXWDDMDISP_SWAPCHAIN pSwapchain = vboxWddmSwapchainForAlloc(pAlloc); 1907 if (pSwapchain) 1908 { 1909 hr = vboxWddmSwapchainRtSurfGet(pDevice, pSwapchain, iRt, pAlloc, bOnSwapchainSynch, &pD3D9Surf); 1910 if (FAILED(hr)) 1911 { 1912 WARN(("vboxWddmSwapchainRtSurfGet failed, hr(0x%x)",hr)); 1913 return hr; 1914 } 1915 } 1916 else 1917 { 1918 hr = VBoxD3DIfSurfGet(pAlloc->pRc, pAlloc->iAlloc, &pD3D9Surf); 1919 if (FAILED(hr)) 1920 { 1921 WARN(("VBoxD3DIfSurfGet failed, hr(0x%x)",hr)); 1922 return hr; 1923 } 1924 } 1925 1926 Assert(pD3D9Surf); 1927 } 1919 1928 1920 1929 hr = pDevice9If->SetRenderTarget(iRt, pD3D9Surf); 1921 Assert(hr == S_OK);1922 1930 if (hr == S_OK) 1923 1931 { … … 1925 1933 pDevice->apRTs[iRt] = pAlloc; 1926 1934 } 1927 pD3D9Surf->Release(); 1935 else 1936 { 1937 /* @todo This is workaround for wine 1 render target. */ 1938 if (!pAlloc) 1939 { 1940 pDevice->apRTs[iRt] = NULL; 1941 hr = S_OK; 1942 } 1943 else 1944 { 1945 AssertFailed(); 1946 } 1947 } 1948 1949 if (pD3D9Surf) 1950 { 1951 pD3D9Surf->Release(); 1952 } 1928 1953 1929 1954 return hr; … … 5287 5312 IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice); 5288 5313 PVBOXWDDMDISP_RESOURCE pRc = (PVBOXWDDMDISP_RESOURCE)pData->hRenderTarget; 5289 VBOXVDBG_CHECK_SMSYNC(pRc); 5290 Assert(pRc); 5291 Assert(pData->SubResourceIndex < pRc->cAllocations); 5292 PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[pData->SubResourceIndex]; 5314 PVBOXWDDMDISP_ALLOCATION pAlloc = NULL; 5315 if (pRc) 5316 { 5317 VBOXVDBG_CHECK_SMSYNC(pRc); 5318 Assert(pRc); 5319 Assert(pData->SubResourceIndex < pRc->cAllocations); 5320 pAlloc = &pRc->aAllocations[pData->SubResourceIndex]; 5321 } 5293 5322 HRESULT hr = vboxWddmRenderTargetSet(pDevice, pData->RenderTargetIndex, pAlloc, FALSE); 5294 5323 Assert(hr == S_OK); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
r56279 r57633 391 391 IDirect3DSurface9 *pRt; 392 392 PVBOXWDDMDISP_ALLOCATION pAlloc = pDevice->apRTs[i]; 393 if (!pAlloc) continue; 393 394 IDirect3DDevice9 *pDeviceIf = pDevice->pDevice9If; 394 395 HRESULT hr = pDeviceIf->GetRenderTarget(i, &pRt); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h
r49263 r57633 339 339 for (UINT i = 0; i < (_pDevice)->cRTs; ++i) { \ 340 340 PVBOXWDDMDISP_ALLOCATION pRtVar = (_pDevice)->apRTs[i]; \ 341 if (pRtVar ->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \341 if (pRtVar && pRtVar->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \ 342 342 } \ 343 343 if (!*(_pIsShared)) { \
Note:
See TracChangeset
for help on using the changeset viewer.

