mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 16:19:28 +01:00
9316e25652
It appears that some older drivers do not support CreateSwapChainForHwnd, resulting in DXGI_ERROR_INVALID_CALL. For these cases, fall back to the base CreateSwapChain() from DXGI 1.0. In theory this should also let us run on Win7 without the platform update, but in reality we require the newer shader compiler so this probably won't work regardless. Also any hardware of this vintage is unlikely to run Dolphin well.
75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
// Copyright 2019 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <dxgi1_5.h>
|
|
#include <wrl/client.h>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "Common/WindowSystemInfo.h"
|
|
#include "VideoBackends/D3DCommon/Common.h"
|
|
#include "VideoCommon/TextureConfig.h"
|
|
|
|
namespace D3DCommon
|
|
{
|
|
class SwapChain
|
|
{
|
|
public:
|
|
SwapChain(const WindowSystemInfo& wsi, IDXGIFactory* dxgi_factory, IUnknown* d3d_device);
|
|
virtual ~SwapChain();
|
|
|
|
// Sufficient buffers for triple buffering.
|
|
static const u32 SWAP_CHAIN_BUFFER_COUNT = 3;
|
|
|
|
// Returns true if the stereo mode is quad-buffering.
|
|
static bool WantsStereo();
|
|
|
|
IDXGISwapChain* GetDXGISwapChain() const { return m_swap_chain.Get(); }
|
|
AbstractTextureFormat GetFormat() const { return m_texture_format; }
|
|
u32 GetWidth() const { return m_width; }
|
|
u32 GetHeight() const { return m_height; }
|
|
u32 GetLayers() const { return m_stereo ? 2u : 1u; }
|
|
bool IsStereoEnabled() const { return m_stereo; }
|
|
bool HasExclusiveFullscreen() const { return m_has_fullscreen; }
|
|
|
|
// Mode switches.
|
|
bool GetFullscreen() const;
|
|
void SetFullscreen(bool request);
|
|
|
|
// Checks for loss of exclusive fullscreen.
|
|
bool CheckForFullscreenChange();
|
|
|
|
// Presents the swap chain to the screen.
|
|
virtual bool Present();
|
|
|
|
bool ChangeSurface(void* native_handle);
|
|
bool ResizeSwapChain();
|
|
void SetStereo(bool stereo);
|
|
|
|
protected:
|
|
u32 GetSwapChainFlags() const;
|
|
bool CreateSwapChain(bool stereo);
|
|
void DestroySwapChain();
|
|
|
|
virtual bool CreateSwapChainBuffers() = 0;
|
|
virtual void DestroySwapChainBuffers() = 0;
|
|
|
|
WindowSystemInfo m_wsi;
|
|
Microsoft::WRL::ComPtr<IDXGIFactory> m_dxgi_factory;
|
|
Microsoft::WRL::ComPtr<IDXGISwapChain> m_swap_chain;
|
|
Microsoft::WRL::ComPtr<IUnknown> m_d3d_device;
|
|
AbstractTextureFormat m_texture_format = AbstractTextureFormat::RGBA8;
|
|
|
|
u32 m_width = 1;
|
|
u32 m_height = 1;
|
|
|
|
bool m_stereo = false;
|
|
bool m_allow_tearing_supported = false;
|
|
bool m_has_fullscreen = false;
|
|
bool m_fullscreen_request = false;
|
|
};
|
|
|
|
} // namespace D3DCommon
|