Module: wine Branch: master Commit: 70088c4ef323e41386c54c4ef4d9f4c5166564fb URL: http://source.winehq.org/git/wine.git/?a=commit;h=70088c4ef323e41386c54c4ef4...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Nov 14 13:57:07 2008 +0100
d3d10: Use the factory that created the adapter to create a swapchain.
---
dlls/d3d10/d3d10_main.c | 25 ++++++++++++++++++++++--- 1 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d10/d3d10_main.c b/dlls/d3d10/d3d10_main.c index 188d354..ad9651e 100644 --- a/dlls/d3d10/d3d10_main.c +++ b/dlls/d3d10/d3d10_main.c @@ -141,6 +141,7 @@ HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D10Device **device) { + IDXGIDevice *dxgi_device; IDXGIFactory *factory; HRESULT hr;
@@ -153,22 +154,40 @@ HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER if (FAILED(hr)) { WARN("Failed to create a device, returning %#x\n", hr); + *device = NULL; return hr; }
TRACE("Created ID3D10Device %p\n", *device);
- hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory); + hr = ID3D10Device_QueryInterface(*device, &IID_IDXGIDevice, (void **)&dxgi_device); if (FAILED(hr)) { + ERR("Failed to get a dxgi device from the d3d10 device, returning %#x\n", hr); ID3D10Device_Release(*device); *device = NULL; + return hr; + }
- WARN("Failed to create a DXGI factory, returning %#x\n", hr); + hr = IDXGIDevice_GetAdapter(dxgi_device, &adapter); + IDXGIDevice_Release(dxgi_device); + if (FAILED(hr)) + { + ERR("Failed to get the device adapter, returning %#x\n", hr); + ID3D10Device_Release(*device); + *device = NULL; return hr; }
- TRACE("Created IDXGIFactory %p\n", factory); + hr = IDXGIAdapter_GetParent(adapter, &IID_IDXGIFactory, (void **)&factory); + IDXGIAdapter_Release(adapter); + if (FAILED(hr)) + { + ERR("Failed to get the adapter factory, returning %#x\n", hr); + ID3D10Device_Release(*device); + *device = NULL; + return hr; + }
hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)*device, swapchain_desc, swapchain); IDXGIFactory_Release(factory);