|
@@ -2609,7 +2609,16 @@ Error RenderingDeviceDriverD3D12::swap_chain_resize(CommandQueueID p_cmd_queue,
|
|
|
swap_chain_desc.Height = surface->height;
|
|
|
|
|
|
ComPtr<IDXGISwapChain1> swap_chain_1;
|
|
|
+#ifdef DCOMP_ENABLED
|
|
|
res = context_driver->dxgi_factory_get()->CreateSwapChainForComposition(command_queue->d3d_queue.Get(), &swap_chain_desc, nullptr, swap_chain_1.GetAddressOf());
|
|
|
+#else
|
|
|
+ res = context_driver->dxgi_factory_get()->CreateSwapChainForHwnd(command_queue->d3d_queue.Get(), surface->hwnd, &swap_chain_desc, nullptr, nullptr, swap_chain_1.GetAddressOf());
|
|
|
+ if (!SUCCEEDED(res) && swap_chain_desc.AlphaMode != DXGI_ALPHA_MODE_IGNORE) {
|
|
|
+ swap_chain_desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
|
|
|
+ has_comp_alpha[(uint64_t)p_cmd_queue.id] = false;
|
|
|
+ res = context_driver->dxgi_factory_get()->CreateSwapChainForHwnd(command_queue->d3d_queue.Get(), surface->hwnd, &swap_chain_desc, nullptr, nullptr, swap_chain_1.GetAddressOf());
|
|
|
+ }
|
|
|
+#endif
|
|
|
ERR_FAIL_COND_V(!SUCCEEDED(res), ERR_CANT_CREATE);
|
|
|
|
|
|
swap_chain_1.As(&swap_chain->d3d_swap_chain);
|
|
@@ -2619,6 +2628,7 @@ Error RenderingDeviceDriverD3D12::swap_chain_resize(CommandQueueID p_cmd_queue,
|
|
|
ERR_FAIL_COND_V(!SUCCEEDED(res), ERR_CANT_CREATE);
|
|
|
}
|
|
|
|
|
|
+#ifdef DCOMP_ENABLED
|
|
|
if (surface->composition_device.Get() == nullptr) {
|
|
|
using PFN_DCompositionCreateDevice = HRESULT(WINAPI *)(IDXGIDevice *, REFIID, void **);
|
|
|
PFN_DCompositionCreateDevice pfn_DCompositionCreateDevice = (PFN_DCompositionCreateDevice)(void *)GetProcAddress(context_driver->lib_dcomp, "DCompositionCreateDevice");
|
|
@@ -2648,6 +2658,7 @@ Error RenderingDeviceDriverD3D12::swap_chain_resize(CommandQueueID p_cmd_queue,
|
|
|
res = surface->composition_device->Commit();
|
|
|
ERR_FAIL_COND_V(!SUCCEEDED(res), ERR_CANT_CREATE);
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
res = swap_chain->d3d_swap_chain->GetDesc1(&swap_chain_desc);
|
|
|
ERR_FAIL_COND_V(!SUCCEEDED(res), ERR_CANT_CREATE);
|