【发布时间】:2020-07-30 19:34:14
【问题描述】:
当用DXGI_FORMAT_B5G6R5_UNORM 调用IDXGIFactory1::CreateSwapChain 时,我收到一个错误,指出不支持这种格式,特别是E_INVALIDARG One or more arguments are invalid. 但是,这适用于DXGI_FORMAT_B8G8R8A8_UNORM 等更标准的格式。
我试图了解如何知道支持哪些交换链格式。通过深入研究文档,我可以找到“渲染目标”支持的格式列表,但这似乎与交换链支持的格式不同。 B5G6R5 确实需要 11.1 才能获得大多数用途所需的支持,但它可用作渲染目标。
- https://docs.microsoft.com/en-us/previous-versions//ff471325(v=vs.85)
- https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/format-support-for-direct3d-11-0-feature-level-hardware
- https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/format-support-for-direct3d-11-1-feature-level-hardware
作为测试,我遍历了所有格式并尝试为每种格式创建交换链。在 118 种格式中,我的机器上似乎只支持 8 种(RTX 2070):
DXGI_FORMAT_R16G16B16A16_FLOAT
DXGI_FORMAT_R10G10B10A2_UNORM
DXGI_FORMAT_R8G8B8A8_UNORM
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
DXGI_FORMAT_B8G8R8A8_UNORM
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
DXGI_FORMAT_NV12
DXGI_FORMAT_YUY2
了解支持哪些交换链格式的正确方法是什么?
对于其他上下文,我正在将屏幕外渲染为 16 位 (565) 格式。我有一个可选的“预览窗口”,我偶尔会打开它以快速查看渲染结果。当我创建窗口时,我创建了一个交换链并将真实渲染目标的副本复制到交换链后台缓冲区中。我的目标是 DirectX 11 或 11.1。我能够很好地渲染为 B5G6R5 格式,只是交换链抱怨。我正在运行 Windows 10 1909。
这是一个包含资源创建 sn-ps 和完整代码示例的要点。 https://gist.github.com/akbyrd/c9d312048b49c5bd607ceba084d95bd0
【问题讨论】:
-
这在此处记录:docs.microsoft.com/en-us/previous-versions/windows/desktop/…。不确定 DXGI_FORMAT_NV12 和 DXGI_FORMAT_YUY2
标签: directx directx-11 direct3d direct3d11 dxgi