The open source OpenXR runtime
1// Copyright 2022, Collabora, Ltd.
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief DXGI formats shared between D3D11 and D3D12 tests.
6 * @author Rylie Pavlik <rylie.pavlik@collabora.com>
7 */
8
9#pragma once
10
11#include <dxgi.h>
12#include <initializer_list>
13#include <algorithm>
14
15#define MAKE_PAIR(ENUM) \
16 { \
17#ENUM, ENUM \
18 }
19static constexpr std::initializer_list<std::pair<const char *, DXGI_FORMAT>> colorNamesAndFormats = {
20 MAKE_PAIR(DXGI_FORMAT_B8G8R8A8_UNORM_SRGB), MAKE_PAIR(DXGI_FORMAT_B8G8R8A8_UNORM),
21 MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_FLOAT), MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_UNORM),
22 MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_FLOAT), MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_UNORM),
23 MAKE_PAIR(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB), MAKE_PAIR(DXGI_FORMAT_R8G8B8A8_UNORM),
24 MAKE_PAIR(DXGI_FORMAT_R32_FLOAT),
25};
26
27static constexpr std::initializer_list<DXGI_FORMAT> depthStencilFormats = {
28 DXGI_FORMAT_D16_UNORM,
29 DXGI_FORMAT_D24_UNORM_S8_UINT,
30 DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
31 DXGI_FORMAT_D32_FLOAT,
32};
33static constexpr std::initializer_list<std::pair<const char *, DXGI_FORMAT>> namesAndFormats = {
34 MAKE_PAIR(DXGI_FORMAT_B8G8R8A8_UNORM_SRGB), MAKE_PAIR(DXGI_FORMAT_B8G8R8A8_UNORM),
35 MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_FLOAT), MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_UNORM),
36 MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_FLOAT), MAKE_PAIR(DXGI_FORMAT_R16G16B16A16_UNORM),
37 MAKE_PAIR(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB), MAKE_PAIR(DXGI_FORMAT_R8G8B8A8_UNORM),
38 MAKE_PAIR(DXGI_FORMAT_R32_FLOAT), MAKE_PAIR(DXGI_FORMAT_D16_UNORM),
39 MAKE_PAIR(DXGI_FORMAT_D24_UNORM_S8_UINT), MAKE_PAIR(DXGI_FORMAT_D32_FLOAT_S8X24_UINT),
40 MAKE_PAIR(DXGI_FORMAT_D32_FLOAT),
41};
42
43static inline bool
44isDepthStencilFormat(DXGI_FORMAT format)
45{
46 const auto b = depthStencilFormats.begin();
47 const auto e = depthStencilFormats.end();
48 auto it = std::find(b, e, format);
49 return it != e;
50}