diff --git a/src/vulkan/wsi/wsi_common_win32.cpp b/src/vulkan/wsi/wsi_common_win32.cpp index e614dae9782..d8033ef1533 100644 --- a/src/vulkan/wsi/wsi_common_win32.cpp +++ b/src/vulkan/wsi/wsi_common_win32.cpp @@ -209,7 +209,8 @@ wsi_win32_surface_get_capabilities(VkIcdSurfaceBase *surf, caps->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR | - VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR; + VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR | + VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR; caps->supportedUsageFlags = wsi_caps_get_image_usage(); @@ -751,6 +752,22 @@ wsi_win32_surface_create_swapchain_dxgi( ID3D12CommandQueue *queue = (ID3D12CommandQueue *)wsi->wsi->win32.get_d3d12_command_queue(device); + DXGI_ALPHA_MODE alpha_mode; + switch (create_info->compositeAlpha) { + case VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR: + alpha_mode = DXGI_ALPHA_MODE_IGNORE; + break; + case VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR: + alpha_mode = DXGI_ALPHA_MODE_PREMULTIPLIED; + break; + case VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR: + alpha_mode = DXGI_ALPHA_MODE_STRAIGHT; + break; + default: + alpha_mode = DXGI_ALPHA_MODE_UNSPECIFIED; + break; + } + DXGI_SWAP_CHAIN_DESC1 desc = { create_info->imageExtent.width, create_info->imageExtent.height, @@ -761,7 +778,7 @@ wsi_win32_surface_create_swapchain_dxgi( create_info->minImageCount, DXGI_SCALING_STRETCH, DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL, - DXGI_ALPHA_MODE_UNSPECIFIED, + alpha_mode, chain->base.present_mode == VK_PRESENT_MODE_IMMEDIATE_KHR ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0u };