Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/d3d11/d3d11_private.h | 4 ++-- dlls/d3d11/device.c | 20 ++++++++++---------- dlls/d3d11/texture.c | 10 +++++----- 3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h index e7fd3a7f4c79..a184b9377a02 100644 --- a/dlls/d3d11/d3d11_private.h +++ b/dlls/d3d11/d3d11_private.h @@ -126,9 +126,9 @@ struct d3d_texture2d ID3D11Device *device; };
-static inline struct d3d_texture2d *impl_from_ID3D10Texture2D(ID3D10Texture2D *iface) +static inline struct d3d_texture2d *impl_from_ID3D11Texture2D(ID3D11Texture2D *iface) { - return CONTAINING_RECORD(iface, struct d3d_texture2d, ID3D10Texture2D_iface); + return CONTAINING_RECORD(iface, struct d3d_texture2d, ID3D11Texture2D_iface); }
HRESULT d3d_texture2d_create(struct d3d_device *device, const D3D11_TEXTURE2D_DESC *desc, diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index b2a40b3c6d31..86778f313355 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -5767,8 +5767,8 @@ static HRESULT CDECL device_parent_create_swapchain_texture(struct wined3d_devic { struct d3d_device *device = device_from_wined3d_device_parent(device_parent); struct d3d_texture2d *texture; - ID3D10Texture2D *texture_iface; - D3D10_TEXTURE2D_DESC desc; + ID3D11Texture2D *texture_iface; + D3D11_TEXTURE2D_DESC desc; HRESULT hr;
FIXME("device_parent %p, container_parent %p, wined3d_desc %p, texture flags %#x, " @@ -5784,32 +5784,32 @@ static HRESULT CDECL device_parent_create_swapchain_texture(struct wined3d_devic desc.Format = dxgi_format_from_wined3dformat(wined3d_desc->format); desc.SampleDesc.Count = wined3d_desc->multisample_type ? wined3d_desc->multisample_type : 1; desc.SampleDesc.Quality = wined3d_desc->multisample_quality; - desc.Usage = D3D10_USAGE_DEFAULT; - desc.BindFlags = D3D10_BIND_RENDER_TARGET; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = D3D11_BIND_RENDER_TARGET; desc.CPUAccessFlags = 0; desc.MiscFlags = 0;
if (texture_flags & WINED3D_TEXTURE_CREATE_GET_DC) { - desc.MiscFlags |= D3D10_RESOURCE_MISC_GDI_COMPATIBLE; + desc.MiscFlags |= D3D11_RESOURCE_MISC_GDI_COMPATIBLE; texture_flags &= ~WINED3D_TEXTURE_CREATE_GET_DC; }
if (texture_flags) FIXME("Unhandled flags %#x.\n", texture_flags);
- if (FAILED(hr = d3d10_device_CreateTexture2D(&device->ID3D10Device1_iface, + if (FAILED(hr = d3d11_device_CreateTexture2D(&device->ID3D11Device_iface, &desc, NULL, &texture_iface))) { - WARN("CreateTexture2D failed, returning %#x.\n", hr); + WARN("Failed to create 2D texture, hr %#x.\n", hr); return hr; }
- texture = impl_from_ID3D10Texture2D(texture_iface); + texture = impl_from_ID3D11Texture2D(texture_iface);
*wined3d_texture = texture->wined3d_texture; wined3d_texture_incref(*wined3d_texture); - ID3D10Texture2D_Release(&texture->ID3D10Texture2D_iface); + ID3D11Texture2D_Release(&texture->ID3D11Texture2D_iface);
return S_OK; } @@ -5823,7 +5823,7 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent
TRACE("device_parent %p, desc %p, swapchain %p.\n", device_parent, desc, swapchain);
- if (FAILED(hr = d3d10_device_QueryInterface(&device->ID3D10Device1_iface, + if (FAILED(hr = d3d11_device_QueryInterface(&device->ID3D11Device_iface, &IID_IWineDXGIDevice, (void **)&wine_device))) { ERR("Device should implement IWineDXGIDevice.\n"); diff --git a/dlls/d3d11/texture.c b/dlls/d3d11/texture.c index 17fb4b1da37c..2644b52dfa25 100644 --- a/dlls/d3d11/texture.c +++ b/dlls/d3d11/texture.c @@ -27,11 +27,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d11);
/* ID3D11Texture2D methods */
-static inline struct d3d_texture2d *impl_from_ID3D11Texture2D(ID3D11Texture2D *iface) -{ - return CONTAINING_RECORD(iface, struct d3d_texture2d, ID3D11Texture2D_iface); -} - static HRESULT STDMETHODCALLTYPE d3d11_texture2d_QueryInterface(ID3D11Texture2D *iface, REFIID riid, void **object) { struct d3d_texture2d *texture = impl_from_ID3D11Texture2D(iface); @@ -251,6 +246,11 @@ struct d3d_texture2d *unsafe_impl_from_ID3D11Texture2D(ID3D11Texture2D *iface)
/* IUnknown methods */
+static inline struct d3d_texture2d *impl_from_ID3D10Texture2D(ID3D10Texture2D *iface) +{ + return CONTAINING_RECORD(iface, struct d3d_texture2d, ID3D10Texture2D_iface); +} + static HRESULT STDMETHODCALLTYPE d3d10_texture2d_QueryInterface(ID3D10Texture2D *iface, REFIID riid, void **object) { struct d3d_texture2d *texture = impl_from_ID3D10Texture2D(iface);
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/d3d10_1/tests/d3d10_1.c | 2 +- dlls/d3d11/tests/d3d11.c | 2 +- dlls/dxgi/swapchain.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d10_1/tests/d3d10_1.c b/dlls/d3d10_1/tests/d3d10_1.c index 47c7c86380b5..2b18110fa6e9 100644 --- a/dlls/d3d10_1/tests/d3d10_1.c +++ b/dlls/d3d10_1/tests/d3d10_1.c @@ -189,7 +189,7 @@ static void test_create_device(void) "Got unexpected SampleDesc.Count %u.\n", obtained_desc.SampleDesc.Count); ok(obtained_desc.SampleDesc.Quality == swapchain_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", obtained_desc.SampleDesc.Quality); - todo_wine ok(obtained_desc.BufferUsage == swapchain_desc.BufferUsage, + ok(obtained_desc.BufferUsage == swapchain_desc.BufferUsage, "Got unexpected BufferUsage %#x.\n", obtained_desc.BufferUsage); ok(obtained_desc.BufferCount == swapchain_desc.BufferCount, "Got unexpected BufferCount %u.\n", obtained_desc.BufferCount); diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index dca2515d0ec7..19e428c2f5bc 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -1548,7 +1548,7 @@ static void test_create_device(void) "Got unexpected SampleDesc.Count %u.\n", obtained_desc.SampleDesc.Count); ok(obtained_desc.SampleDesc.Quality == swapchain_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", obtained_desc.SampleDesc.Quality); - todo_wine ok(obtained_desc.BufferUsage == swapchain_desc.BufferUsage, + ok(obtained_desc.BufferUsage == swapchain_desc.BufferUsage, "Got unexpected BufferUsage %#x.\n", obtained_desc.BufferUsage); ok(obtained_desc.BufferCount == swapchain_desc.BufferCount, "Got unexpected BufferCount %u.\n", obtained_desc.BufferCount); diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index eca68c3e5e35..ec9b2b43b6ba 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -285,7 +285,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc(IDXGISwapChain1 *iface, wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &wined3d_desc); wined3d_mutex_unlock();
- FIXME("Ignoring ScanlineOrdering, Scaling and SwapEffect.\n"); + FIXME("Ignoring ScanlineOrdering, Scaling, BufferUsage and SwapEffect.\n");
desc->BufferDesc.Width = wined3d_desc.backbuffer_width; desc->BufferDesc.Height = wined3d_desc.backbuffer_height; @@ -295,6 +295,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc(IDXGISwapChain1 *iface, desc->BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; desc->BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; dxgi_sample_desc_from_wined3d(&desc->SampleDesc, wined3d_desc.multisample_type, wined3d_desc.multisample_quality); + desc->BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; desc->BufferCount = wined3d_desc.backbuffer_count; desc->OutputWindow = wined3d_desc.device_window; desc->Windowed = wined3d_desc.windowed;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/dxgi/tests/device.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c index 77b7cb70c38b..18306db74818 100644 --- a/dlls/dxgi/tests/device.c +++ b/dlls/dxgi/tests/device.c @@ -2604,6 +2604,7 @@ static void test_swapchain_resize(void) ok(EqualRect(&r, &client_rect), "Got unexpected rect %s, expected %s.\n", wine_dbgstr_rect(&r), wine_dbgstr_rect(&client_rect));
+ memset(&swapchain_desc, 0, sizeof(swapchain_desc)); hr = IDXGISwapChain_GetDesc(swapchain, &swapchain_desc); ok(SUCCEEDED(hr), "Failed to get swapchain desc, hr %#x.\n", hr); ok(swapchain_desc.BufferDesc.Width == 640, @@ -2668,6 +2669,7 @@ static void test_swapchain_resize(void) ok(EqualRect(&r, &client_rect), "Got unexpected rect %s, expected %s.\n", wine_dbgstr_rect(&r), wine_dbgstr_rect(&client_rect));
+ memset(&swapchain_desc, 0, sizeof(swapchain_desc)); hr = IDXGISwapChain_GetDesc(swapchain, &swapchain_desc); ok(SUCCEEDED(hr), "Failed to get swapchain desc, hr %#x.\n", hr); ok(swapchain_desc.BufferDesc.Width == 640, @@ -2738,6 +2740,7 @@ static void test_swapchain_resize(void) ok(EqualRect(&r, &client_rect), "Got unexpected rect %s, expected %s.\n", wine_dbgstr_rect(&r), wine_dbgstr_rect(&client_rect));
+ memset(&swapchain_desc, 0, sizeof(swapchain_desc)); hr = IDXGISwapChain_GetDesc(swapchain, &swapchain_desc); ok(SUCCEEDED(hr), "Failed to get swapchain desc, hr %#x.\n", hr); ok(swapchain_desc.BufferDesc.Width == 320, @@ -2800,6 +2803,7 @@ static void test_swapchain_resize(void) hr = IDXGISwapChain_ResizeBuffers(swapchain, 0, 0, 0, DXGI_FORMAT_UNKNOWN, 0); ok(SUCCEEDED(hr), "Failed to resize buffers, hr %#x.\n", hr);
+ memset(&swapchain_desc, 0, sizeof(swapchain_desc)); hr = IDXGISwapChain_GetDesc(swapchain, &swapchain_desc); ok(SUCCEEDED(hr), "Failed to get swapchain desc, hr %#x.\n", hr); ok(swapchain_desc.BufferDesc.Width == client_rect.right - client_rect.left,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/dxgi/swapchain.c | 32 ++++++++++++++++++++++++++++++-- dlls/dxgi/tests/device.c | 10 ++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index ec9b2b43b6ba..fe7e5cc4bc88 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -429,9 +429,37 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetLastPresentCount(IDXGISwapCha
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc1(IDXGISwapChain1 *iface, DXGI_SWAP_CHAIN_DESC1 *desc) { - FIXME("iface %p, desc %p stub!\n", iface, desc); + struct dxgi_swapchain *swapchain = impl_from_IDXGISwapChain1(iface); + struct wined3d_swapchain_desc wined3d_desc;
- return E_NOTIMPL; + TRACE("iface %p, desc %p.\n", iface, desc); + + if (!desc) + { + WARN("Invalid pointer.\n"); + return E_INVALIDARG; + } + + wined3d_mutex_lock(); + wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &wined3d_desc); + wined3d_mutex_unlock(); + + FIXME("Ignoring Stereo, BufferUsage, Scaling, SwapEffect and AlphaMode.\n"); + + desc->Width = wined3d_desc.backbuffer_width; + desc->Height = wined3d_desc.backbuffer_height; + desc->Format = dxgi_format_from_wined3dformat(wined3d_desc.backbuffer_format); + desc->Stereo = FALSE; + dxgi_sample_desc_from_wined3d(&desc->SampleDesc, + wined3d_desc.multisample_type, wined3d_desc.multisample_quality); + desc->BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + desc->BufferCount = wined3d_desc.backbuffer_count; + desc->Scaling = DXGI_SCALING_STRETCH; + desc->SwapEffect = DXGI_SWAP_EFFECT_DISCARD; + desc->AlphaMode = DXGI_ALPHA_MODE_IGNORE; + desc->Flags = dxgi_swapchain_flags_from_wined3d(wined3d_desc.flags); + + return S_OK; }
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetFullscreenDesc(IDXGISwapChain1 *iface, diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c index 18306db74818..ea10ff5ef863 100644 --- a/dlls/dxgi/tests/device.c +++ b/dlls/dxgi/tests/device.c @@ -868,6 +868,7 @@ static void test_create_swapchain(void) struct swapchain_fullscreen_state initial_state, expected_state; unsigned int i, expected_width, expected_height; DXGI_SWAP_CHAIN_DESC creation_desc, result_desc; + DXGI_SWAP_CHAIN_DESC1 swapchain_desc; IDXGIDevice *device, *bgra_device; ULONG refcount, expected_refcount; IUnknown *obj, *obj2, *parent; @@ -968,6 +969,15 @@ static void test_create_swapchain(void) "Failed to query IDXGISwapChain1 interface, hr %#x.\n", hr); if (SUCCEEDED(hr)) { + hr = IDXGISwapChain1_GetDesc1(swapchain1, NULL); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + hr = IDXGISwapChain1_GetDesc1(swapchain1, &swapchain_desc); + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(!swapchain_desc.Stereo, "Got unexpected stereo %#x.\n", swapchain_desc.Stereo); + ok(swapchain_desc.Scaling == DXGI_SCALING_STRETCH, + "Got unexpected scaling %#x.\n", swapchain_desc.Scaling); + ok(swapchain_desc.AlphaMode == DXGI_ALPHA_MODE_IGNORE, + "Got unexpected alpha mode %#x.\n", swapchain_desc.AlphaMode); hr = IDXGISwapChain1_GetHwnd(swapchain1, &window); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); ok(window == creation_desc.OutputWindow, "Got unexpected window %p.\n", window);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/dxgi/swapchain.c | 25 +++++++++++++++++++++++-- dlls/dxgi/tests/device.c | 7 +++++++ 2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index fe7e5cc4bc88..8e7dccbf9618 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -465,9 +465,30 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetDesc1(IDXGISwapChain1 *iface, static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetFullscreenDesc(IDXGISwapChain1 *iface, DXGI_SWAP_CHAIN_FULLSCREEN_DESC *desc) { - FIXME("iface %p, desc %p stub!\n", iface, desc); + struct dxgi_swapchain *swapchain = impl_from_IDXGISwapChain1(iface); + struct wined3d_swapchain_desc wined3d_desc;
- return E_NOTIMPL; + TRACE("iface %p, desc %p.\n", iface, desc); + + if (!desc) + { + WARN("Invalid pointer.\n"); + return E_INVALIDARG; + } + + wined3d_mutex_lock(); + wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &wined3d_desc); + wined3d_mutex_unlock(); + + FIXME("Ignoring ScanlineOrdering and Scaling.\n"); + + desc->RefreshRate.Numerator = wined3d_desc.refresh_rate; + desc->RefreshRate.Denominator = 1; + desc->ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; + desc->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + desc->Windowed = wined3d_desc.windowed; + + return S_OK; }
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetHwnd(IDXGISwapChain1 *iface, HWND *hwnd) diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c index ea10ff5ef863..899a06383ae0 100644 --- a/dlls/dxgi/tests/device.c +++ b/dlls/dxgi/tests/device.c @@ -868,6 +868,7 @@ static void test_create_swapchain(void) struct swapchain_fullscreen_state initial_state, expected_state; unsigned int i, expected_width, expected_height; DXGI_SWAP_CHAIN_DESC creation_desc, result_desc; + DXGI_SWAP_CHAIN_FULLSCREEN_DESC fullscreen_desc; DXGI_SWAP_CHAIN_DESC1 swapchain_desc; IDXGIDevice *device, *bgra_device; ULONG refcount, expected_refcount; @@ -978,6 +979,12 @@ static void test_create_swapchain(void) "Got unexpected scaling %#x.\n", swapchain_desc.Scaling); ok(swapchain_desc.AlphaMode == DXGI_ALPHA_MODE_IGNORE, "Got unexpected alpha mode %#x.\n", swapchain_desc.AlphaMode); + hr = IDXGISwapChain1_GetFullscreenDesc(swapchain1, NULL); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); + hr = IDXGISwapChain1_GetFullscreenDesc(swapchain1, &fullscreen_desc); + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(fullscreen_desc.Windowed == creation_desc.Windowed, + "Got unexpected windowed %#x.\n", fullscreen_desc.Windowed); hr = IDXGISwapChain1_GetHwnd(swapchain1, &window); ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); ok(window == creation_desc.OutputWindow, "Got unexpected window %p.\n", window);
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com