From 54116897897066a7971429fc5c870fdb86bb4d6a Mon Sep 17 00:00:00 2001 From: notaz Date: Tue, 27 Mar 2018 02:58:33 +0300 Subject: [PATCH] [dxgi] More argument handling improvements (#211) Fixes 11 tests + a crash. --- src/dxgi/dxgi_factory.cpp | 2 ++ src/dxgi/dxgi_main.cpp | 4 +++- src/dxgi/dxgi_swapchain.cpp | 7 +++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/dxgi/dxgi_factory.cpp b/src/dxgi/dxgi_factory.cpp index adac98de1..55cfdb3e7 100644 --- a/src/dxgi/dxgi_factory.cpp +++ b/src/dxgi/dxgi_factory.cpp @@ -52,6 +52,8 @@ namespace dxvk { IDXGISwapChain** ppSwapChain) { if (ppSwapChain == nullptr || pDesc == nullptr || pDevice == NULL) return DXGI_ERROR_INVALID_CALL; + if (pDesc->OutputWindow == nullptr) + return DXGI_ERROR_INVALID_CALL; try { *ppSwapChain = ref(new DxgiSwapChain(this, pDevice, pDesc)); diff --git a/src/dxgi/dxgi_main.cpp b/src/dxgi/dxgi_main.cpp index 495b3ec02..b602e7211 100644 --- a/src/dxgi/dxgi_main.cpp +++ b/src/dxgi/dxgi_main.cpp @@ -9,7 +9,9 @@ namespace dxvk { if (riid != __uuidof(IDXGIFactory) && riid != __uuidof(IDXGIFactory1)) { Logger::err("CreateDXGIFactory: Requested version of IDXGIFactory not supported"); - return DXGI_ERROR_UNSUPPORTED; + Logger::err(str::format(riid)); + *ppFactory = nullptr; + return E_NOINTERFACE; } try { diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp index 30f976638..6005c43c3 100644 --- a/src/dxgi/dxgi_swapchain.cpp +++ b/src/dxgi/dxgi_swapchain.cpp @@ -139,8 +139,11 @@ namespace dxvk { if (pFullscreen != nullptr) *pFullscreen = !m_desc.Windowed; - if ((ppTarget != nullptr) && !m_desc.Windowed) - hr = this->GetContainingOutput(ppTarget); + if (ppTarget != nullptr) { + *ppTarget = nullptr; + if (!m_desc.Windowed) + hr = this->GetContainingOutput(ppTarget); + } return hr; }