Cogs.Core
FormatsD3D12.cpp
1#include "FormatsD3D12.h"
2
3// Use to ensure arrays used for mapping enumeration values are of correct size.
4#define STATIC_ASSERT_MAPPING(mappingArray, sourceEnum) static_assert(sizeof(mappingArray) / sizeof(mappingArray[0]) == sourceEnum, "Array size of " #mappingArray " must match number of enumerations in mapping array.");
5
9const DXGI_FORMAT Cogs::Direct3D12::Formats[] = {
10 DXGI_FORMAT_UNKNOWN,
11
12 // Unsigned byte formats
13
14 DXGI_FORMAT_R8_UNORM,
15 DXGI_FORMAT_R8G8_UNORM,
16 DXGI_FORMAT_UNKNOWN,
17 DXGI_FORMAT_R8G8B8A8_UNORM,
18
19 // Unsigned short formats
20
21 DXGI_FORMAT_R16_UNORM,
22 DXGI_FORMAT_R16G16_UNORM,
23 DXGI_FORMAT_UNKNOWN,
24 DXGI_FORMAT_R16G16B16A16_UNORM,
25
26 // Signed byte formats
27
28 DXGI_FORMAT_R8_SNORM,
29 DXGI_FORMAT_R8G8_SNORM,
30 DXGI_FORMAT_UNKNOWN,
31 DXGI_FORMAT_R8G8B8A8_SNORM,
32
33 // Signed short formats
34
35 DXGI_FORMAT_R16_SNORM,
36 DXGI_FORMAT_R16G16_SNORM,
37 DXGI_FORMAT_UNKNOWN,
38 DXGI_FORMAT_R16G16B16A16_SNORM,
39
40 // Unsigned byte formats
41
42 DXGI_FORMAT_R8_UNORM,
43 DXGI_FORMAT_R8G8_UNORM,
44 DXGI_FORMAT_UNKNOWN,
45 DXGI_FORMAT_R8G8B8A8_UNORM,
46
47 // Unsigned short formats
48
49 DXGI_FORMAT_R16_UNORM,
50 DXGI_FORMAT_R16G16_UNORM,
51 DXGI_FORMAT_UNKNOWN,
52 DXGI_FORMAT_R16G16B16A16_UNORM,
53
54 // Unsigned integer formats
55
56 DXGI_FORMAT_R32_UINT,
57 DXGI_FORMAT_R32G32_UINT,
58 DXGI_FORMAT_R32G32B32_UINT,
59 DXGI_FORMAT_R32G32B32A32_UINT,
60
61 // Signed byte formats
62
63 DXGI_FORMAT_R8_SNORM,
64 DXGI_FORMAT_R8G8_SNORM,
65 DXGI_FORMAT_UNKNOWN,
66 DXGI_FORMAT_R8G8B8A8_SNORM,
67
68 // Signed short formats
69
70 DXGI_FORMAT_R16_SNORM,
71 DXGI_FORMAT_R16G16_SNORM,
72 DXGI_FORMAT_UNKNOWN,
73 DXGI_FORMAT_R16G16B16A16_SNORM,
74
75 // Signed integer formats
76
77 DXGI_FORMAT_R32_SINT,
78 DXGI_FORMAT_R32G32_SINT,
79 DXGI_FORMAT_R32G32B32_SINT,
80 DXGI_FORMAT_R32G32B32A32_SINT,
81
82 // Half precision floating point formats
83
84 DXGI_FORMAT_R16_FLOAT,
85 DXGI_FORMAT_R16G16_FLOAT,
86 DXGI_FORMAT_UNKNOWN,
87 DXGI_FORMAT_R16G16B16A16_FLOAT,
88
89 // Single precision floating point formats
90
91 DXGI_FORMAT_R32_FLOAT,
92 DXGI_FORMAT_R32G32_FLOAT,
93 DXGI_FORMAT_R32G32B32_FLOAT,
94 DXGI_FORMAT_R32G32B32A32_FLOAT,
95
96 // Depth buffer formats
97
98 DXGI_FORMAT_D16_UNORM,
99 DXGI_FORMAT_UNKNOWN,
100 DXGI_FORMAT_D24_UNORM_S8_UINT,
101 DXGI_FORMAT_D32_FLOAT,
102 DXGI_FORMAT_R32_TYPELESS,
103 DXGI_FORMAT_R16_TYPELESS,
104
105 // 8 bit typeless
106
107 DXGI_FORMAT_R8_TYPELESS,
108 DXGI_FORMAT_R8G8_TYPELESS,
109 DXGI_FORMAT_UNKNOWN,
110 DXGI_FORMAT_R8G8B8A8_TYPELESS,
111
112 // Reverse component order formats.
113
114 DXGI_FORMAT_UNKNOWN,
115 DXGI_FORMAT_B8G8R8A8_UNORM,
116
117 // Alpha
118
119 DXGI_FORMAT_A8_UNORM,
120
121 // Compressed
122
123 DXGI_FORMAT_BC1_TYPELESS,
124 DXGI_FORMAT_BC1_UNORM,
125 DXGI_FORMAT_BC1_UNORM_SRGB,
126 DXGI_FORMAT_BC2_TYPELESS,
127 DXGI_FORMAT_BC2_UNORM,
128 DXGI_FORMAT_BC2_UNORM_SRGB,
129 DXGI_FORMAT_BC3_TYPELESS,
130 DXGI_FORMAT_BC3_UNORM,
131 DXGI_FORMAT_BC3_UNORM_SRGB,
132 DXGI_FORMAT_BC4_TYPELESS,
133 DXGI_FORMAT_BC4_UNORM,
134 DXGI_FORMAT_BC4_SNORM,
135 DXGI_FORMAT_BC5_TYPELESS,
136 DXGI_FORMAT_BC5_UNORM,
137 DXGI_FORMAT_BC5_SNORM,
138
139 // BC7
140 DXGI_FORMAT_BC6H_SF16, // TODO: Test
141 DXGI_FORMAT_BC6H_UF16, // TODO: Test
142 DXGI_FORMAT_BC7_UNORM, // TODO: Test
143 DXGI_FORMAT_BC7_UNORM_SRGB, // TODO: Test
144
145 // PVRTC
146 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
147 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
148 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
149 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
150
151 // ETC
152 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
153 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
154 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
155 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
156
157 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
158 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
159 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
160 DXGI_FORMAT_UNKNOWN, // Not supported on DX12
161
162 // ASTC TODO
163 DXGI_FORMAT_UNKNOWN,
164 DXGI_FORMAT_UNKNOWN,
165 DXGI_FORMAT_UNKNOWN,
166 DXGI_FORMAT_UNKNOWN,
167 DXGI_FORMAT_UNKNOWN,
168 DXGI_FORMAT_UNKNOWN,
169 DXGI_FORMAT_UNKNOWN,
170 DXGI_FORMAT_UNKNOWN,
171 DXGI_FORMAT_UNKNOWN,
172 DXGI_FORMAT_UNKNOWN,
173 DXGI_FORMAT_UNKNOWN,
174 DXGI_FORMAT_UNKNOWN,
175 DXGI_FORMAT_UNKNOWN,
176 DXGI_FORMAT_UNKNOWN,
177 // ASTC SRGBA TODO
178 DXGI_FORMAT_UNKNOWN,
179 DXGI_FORMAT_UNKNOWN,
180 DXGI_FORMAT_UNKNOWN,
181 DXGI_FORMAT_UNKNOWN,
182 DXGI_FORMAT_UNKNOWN,
183 DXGI_FORMAT_UNKNOWN,
184 DXGI_FORMAT_UNKNOWN,
185 DXGI_FORMAT_UNKNOWN,
186 DXGI_FORMAT_UNKNOWN,
187 DXGI_FORMAT_UNKNOWN,
188 DXGI_FORMAT_UNKNOWN,
189 DXGI_FORMAT_UNKNOWN,
190 DXGI_FORMAT_UNKNOWN,
191 DXGI_FORMAT_UNKNOWN,
192
193 // SRGB
194 DXGI_FORMAT_UNKNOWN,
195 DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
196
197 // 10 bit formats
198
199 DXGI_FORMAT_R10G10B10A2_TYPELESS,
200 DXGI_FORMAT_R10G10B10A2_UNORM,
201 DXGI_FORMAT_R10G10B10A2_UINT,
202 DXGI_FORMAT_R11G11B10_FLOAT,
203 DXGI_FORMAT_B5G6R5_UNORM, // Note: wrong order.
204 DXGI_FORMAT_B5G5R5A1_UNORM, // Note: wrong order.
205 DXGI_FORMAT_B4G4R4A4_UNORM , // Note: wrong order.
206 DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
207
208 // Matrix format for instancing
209
210 DXGI_FORMAT_R32G32B32A32_FLOAT,
211};
212
213STATIC_ASSERT_MAPPING(Cogs::Direct3D12::Formats, (int)Cogs::DataFormat::Format_Size);
214
215const D3D12_TEXTURE_ADDRESS_MODE Cogs::Direct3D12::AddressModes[] = {
216 D3D12_TEXTURE_ADDRESS_MODE_CLAMP,
217 D3D12_TEXTURE_ADDRESS_MODE_WRAP,
218 D3D12_TEXTURE_ADDRESS_MODE_MIRROR,
219 D3D12_TEXTURE_ADDRESS_MODE_BORDER,
220};
221
222const D3D12_FILTER Cogs::Direct3D12::FilterModes[] = {
223 D3D12_FILTER_MIN_MAG_MIP_POINT,
224 D3D12_FILTER_MIN_MAG_MIP_LINEAR,
225 D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT,
226 D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR,
227};
228
229const D3D12_COMPARISON_FUNC Cogs::Direct3D12::ComparisonFunctions[] = {
230 D3D12_COMPARISON_FUNC_NEVER,
231 D3D12_COMPARISON_FUNC_LESS,
232 D3D12_COMPARISON_FUNC_EQUAL,
233 D3D12_COMPARISON_FUNC_LESS_EQUAL,
234 D3D12_COMPARISON_FUNC_GREATER,
235 D3D12_COMPARISON_FUNC_NOT_EQUAL,
236 D3D12_COMPARISON_FUNC_GREATER_EQUAL,
237 D3D12_COMPARISON_FUNC_ALWAYS,
238};
const DXGI_FORMAT Formats[]
Must match up to Format definition.
Definition: FormatsD3D12.cpp:9