d3d12: Only use DComp swapchains when alpha is present in the framebuffer
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36994>
This commit is contained in:
@@ -179,30 +179,45 @@ d3d12_wgl_framebuffer_resize(stw_winsys_framebuffer *fb,
|
||||
break;
|
||||
}
|
||||
|
||||
if (!framebuffer->dcomp) {
|
||||
framebuffer->dcomp.Attach(dcomp_get_device());
|
||||
if (desc.AlphaMode != DXGI_ALPHA_MODE_IGNORE) {
|
||||
if (!framebuffer->dcomp) {
|
||||
debug_printf("D3D12: failed to create dcomp device\n");
|
||||
return;
|
||||
framebuffer->dcomp.Attach(dcomp_get_device());
|
||||
if (!framebuffer->dcomp) {
|
||||
debug_printf("D3D12: failed to create dcomp device\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!framebuffer->target) {
|
||||
if (FAILED(framebuffer->dcomp->CreateTargetForHwnd(framebuffer->window, TRUE, &framebuffer->target))) {
|
||||
debug_printf("D3D12: failed to create dcomp target\n");
|
||||
return;
|
||||
if (!framebuffer->target) {
|
||||
if (FAILED(framebuffer->dcomp->CreateTargetForHwnd(framebuffer->window, TRUE, &framebuffer->target))) {
|
||||
debug_printf("D3D12: failed to create dcomp target\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!framebuffer->swapchain) {
|
||||
ComPtr<IDXGISwapChain1> swapchain1;
|
||||
if (FAILED(screen->factory->CreateSwapChainForComposition(
|
||||
screen->base.cmdqueue,
|
||||
&desc,
|
||||
nullptr,
|
||||
&swapchain1))) {
|
||||
debug_printf("D3D12: failed to create swapchain\n");
|
||||
return;
|
||||
if (desc.AlphaMode != DXGI_ALPHA_MODE_IGNORE) {
|
||||
if (FAILED(screen->factory->CreateSwapChainForComposition(
|
||||
screen->base.cmdqueue,
|
||||
&desc,
|
||||
nullptr,
|
||||
&swapchain1))) {
|
||||
debug_printf("D3D12: failed to create swapchain\n");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (FAILED(screen->factory->CreateSwapChainForHwnd(
|
||||
screen->base.cmdqueue,
|
||||
framebuffer->window,
|
||||
&desc,
|
||||
nullptr,
|
||||
nullptr,
|
||||
&swapchain1))) {
|
||||
debug_printf("D3D12: failed to create swapchain\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
swapchain1.As(&framebuffer->swapchain);
|
||||
@@ -235,7 +250,7 @@ d3d12_wgl_framebuffer_resize(stw_winsys_framebuffer *fb,
|
||||
}
|
||||
}
|
||||
|
||||
if (!framebuffer->visual) {
|
||||
if (!framebuffer->visual && desc.AlphaMode != DXGI_ALPHA_MODE_IGNORE) {
|
||||
if (FAILED(framebuffer->dcomp->CreateVisual(&framebuffer->visual)) ||
|
||||
FAILED(framebuffer->target->SetRoot(framebuffer->visual.Get())) ||
|
||||
FAILED(framebuffer->visual->SetContent(framebuffer->swapchain.Get())) ||
|
||||
|
||||
Reference in New Issue
Block a user