mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 11:08:03 +02:00
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:
parent
75d285c2e2
commit
11bf9ad9ee
1 changed files with 32 additions and 17 deletions
|
|
@ -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())) ||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue