From dbb17f567a2c3b20e30f2ebe20c6918a99e8e238 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Tue, 30 Aug 2022 11:58:06 -0700 Subject: [PATCH] d3d12: Change displayable format logic Instead of not reporting support for the pixel format at all, just disable swapchain creation. Some apps want to create off-screen contexts targeting these formats, but since WGL doesn't really have "off-screen," the pixel format enumeration should return support for these. Reviewed-by: Giancarlo Devich Part-of: --- src/gallium/drivers/d3d12/d3d12_screen.cpp | 11 ----------- .../winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp | 6 ++++++ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index d128fa07e69..791b638be19 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -653,17 +653,6 @@ d3d12_is_format_supported(struct pipe_screen *pscreen, } else fmt_info_sv = fmt_info; -#ifdef _WIN32 - if (bind & PIPE_BIND_DISPLAY_TARGET && - (!(fmt_info.Support1 & D3D12_FORMAT_SUPPORT1_DISPLAY) || - // Disable formats that don't support flip model - dxgi_format == DXGI_FORMAT_B8G8R8X8_UNORM || - dxgi_format == DXGI_FORMAT_B5G5R5A1_UNORM || - dxgi_format == DXGI_FORMAT_B5G6R5_UNORM || - dxgi_format == DXGI_FORMAT_B4G4R4A4_UNORM)) - return false; -#endif - if (bind & PIPE_BIND_DEPTH_STENCIL && !(fmt_info.Support1 & D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL)) return false; diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp index 65aebdb92d1..ee3edc32b05 100644 --- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp +++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp @@ -227,6 +227,12 @@ d3d12_wgl_create_framebuffer(struct pipe_screen *screen, (pfi->pfd.dwFlags & PFD_SUPPORT_GDI)) return NULL; + if (pfi->stvis.color_format != PIPE_FORMAT_B8G8R8A8_UNORM && + pfi->stvis.color_format != PIPE_FORMAT_R8G8B8A8_UNORM && + pfi->stvis.color_format != PIPE_FORMAT_R10G10B10A2_UNORM && + pfi->stvis.color_format != PIPE_FORMAT_R16G16B16A16_FLOAT) + return NULL; + struct d3d12_wgl_framebuffer *fb = CALLOC_STRUCT(d3d12_wgl_framebuffer); if (!fb) return NULL;