Henri Verbeet : d3d10: Use the factory that created the adapter to create a swapchain.
Alexandre Julliard
julliard at winehq.org
Fri Nov 14 07:55:12 CST 2008
Module: wine
Branch: master
Commit: 70088c4ef323e41386c54c4ef4d9f4c5166564fb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=70088c4ef323e41386c54c4ef4d9f4c5166564fb
Author: Henri Verbeet <hverbeet at 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);
More information about the wine-cvs
mailing list