forked from MoonsideGames/Refresh
Apply swapchainDesc fix from FNA3D, add cdefines.h to CMakeLists
parent
8c98889f46
commit
433c70eb8c
|
@ -55,6 +55,7 @@ add_library(Refresh
|
||||||
# Internal Headers
|
# Internal Headers
|
||||||
src/Refresh_Driver.h
|
src/Refresh_Driver.h
|
||||||
src/Refresh_Driver_Vulkan_vkfuncs.h
|
src/Refresh_Driver_Vulkan_vkfuncs.h
|
||||||
|
Refresh_Driver_D3D11_cdefines.h
|
||||||
# Source Files
|
# Source Files
|
||||||
src/Refresh.c
|
src/Refresh.c
|
||||||
src/Refresh_Driver_D3D11.c
|
src/Refresh_Driver_D3D11.c
|
||||||
|
|
|
@ -825,50 +825,12 @@ static D3D11WindowData* D3D11_INTERNAL_FetchWindowData(
|
||||||
return (D3D11WindowData*) SDL_GetWindowData(windowHandle, WINDOW_DATA);
|
return (D3D11WindowData*) SDL_GetWindowData(windowHandle, WINDOW_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void D3D11_INTERNAL_ResolveSwapChainModeDescription(
|
|
||||||
IUnknown *device,
|
|
||||||
IDXGIAdapter *adapter,
|
|
||||||
IDXGIFactory1 *factory,
|
|
||||||
HWND window,
|
|
||||||
DXGI_MODE_DESC *modeDescription,
|
|
||||||
DXGI_MODE_DESC *swapChainDescription
|
|
||||||
) {
|
|
||||||
HMONITOR monitor;
|
|
||||||
int iAdapter = 0, iOutput;
|
|
||||||
IDXGIAdapter1* pAdapter;
|
|
||||||
IDXGIOutput *output;
|
|
||||||
DXGI_OUTPUT_DESC description;
|
|
||||||
|
|
||||||
/* Find the output (on any adapter) attached to the monitor that holds our window */
|
|
||||||
monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
|
|
||||||
while (SUCCEEDED(IDXGIFactory1_EnumAdapters1(factory, iAdapter++, &pAdapter)))
|
|
||||||
{
|
|
||||||
iOutput = 0;
|
|
||||||
while (SUCCEEDED(IDXGIAdapter_EnumOutputs(pAdapter, iOutput++, &output)))
|
|
||||||
{
|
|
||||||
IDXGIOutput_GetDesc(output, &description);
|
|
||||||
if (description.Monitor == monitor)
|
|
||||||
{
|
|
||||||
if (SUCCEEDED(IDXGIOutput_FindClosestMatchingMode(output, modeDescription, swapChainDescription, device)))
|
|
||||||
{
|
|
||||||
IDXGIOutput_Release(output);
|
|
||||||
IDXGIAdapter1_Release(pAdapter);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
IDXGIOutput_Release(output);
|
|
||||||
}
|
|
||||||
IDXGIAdapter1_Release(pAdapter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t D3D11_INTERNAL_CreateSwapchain(
|
static uint8_t D3D11_INTERNAL_CreateSwapchain(
|
||||||
D3D11Renderer *renderer,
|
D3D11Renderer *renderer,
|
||||||
D3D11WindowData *windowData
|
D3D11WindowData *windowData
|
||||||
) {
|
) {
|
||||||
SDL_SysWMinfo info;
|
SDL_SysWMinfo info;
|
||||||
HWND dxgiHandle;
|
HWND dxgiHandle;
|
||||||
DXGI_MODE_DESC swapchainBufferDesc;
|
|
||||||
DXGI_SWAP_CHAIN_DESC swapchainDesc;
|
DXGI_SWAP_CHAIN_DESC swapchainDesc;
|
||||||
IDXGIFactory1 *pParent;
|
IDXGIFactory1 *pParent;
|
||||||
IDXGISwapChain *swapchain;
|
IDXGISwapChain *swapchain;
|
||||||
|
@ -881,26 +843,15 @@ static uint8_t D3D11_INTERNAL_CreateSwapchain(
|
||||||
dxgiHandle = info.info.win.window;
|
dxgiHandle = info.info.win.window;
|
||||||
|
|
||||||
/* Initialize the swapchain buffer descriptor */
|
/* Initialize the swapchain buffer descriptor */
|
||||||
swapchainBufferDesc.Width = 0;
|
swapchainDesc.BufferDesc.Width = 0;
|
||||||
swapchainBufferDesc.Height = 0;
|
swapchainDesc.BufferDesc.Height = 0;
|
||||||
swapchainBufferDesc.RefreshRate.Numerator = 0;
|
swapchainDesc.BufferDesc.RefreshRate.Numerator = 0;
|
||||||
swapchainBufferDesc.RefreshRate.Denominator = 0;
|
swapchainDesc.BufferDesc.RefreshRate.Denominator = 0;
|
||||||
swapchainBufferDesc.Format = RefreshToD3D11_TextureFormat[REFRESH_TEXTUREFORMAT_R8G8B8A8];
|
swapchainDesc.BufferDesc.Format = RefreshToD3D11_TextureFormat[REFRESH_TEXTUREFORMAT_R8G8B8A8];
|
||||||
swapchainBufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
|
swapchainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
|
||||||
swapchainBufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
|
swapchainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
|
||||||
|
|
||||||
/* Get the closest matching mode we can from the current monitor */
|
/* Initialize the rest of the swapchain descriptor */
|
||||||
D3D11_INTERNAL_ResolveSwapChainModeDescription(
|
|
||||||
(IUnknown*) renderer->device,
|
|
||||||
(IDXGIAdapter*) renderer->adapter,
|
|
||||||
(IDXGIFactory1*) renderer->factory,
|
|
||||||
dxgiHandle,
|
|
||||||
&swapchainBufferDesc,
|
|
||||||
&swapchainDesc.BufferDesc
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Initialize the swapchain descriptor */
|
|
||||||
swapchainDesc.BufferDesc = swapchainBufferDesc; /* FIXME: I think this is wrong, and it's wrong in FNA3D too! */
|
|
||||||
swapchainDesc.SampleDesc.Count = 1;
|
swapchainDesc.SampleDesc.Count = 1;
|
||||||
swapchainDesc.SampleDesc.Quality = 0;
|
swapchainDesc.SampleDesc.Quality = 0;
|
||||||
swapchainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
swapchainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
||||||
|
|
Loading…
Reference in New Issue