1 //
2 // Copyright (c) 2013-2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // formatutils11.cpp: Queries for GL image formats and their translations to D3D11
8 // formats.
9
10 #include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
11
12 #include "image_util/copyimage.h"
13 #include "image_util/generatemip.h"
14 #include "image_util/loadimage.h"
15
16 #include "libANGLE/formatutils.h"
17 #include "libANGLE/renderer/d3d/d3d11/copyvertex.h"
18 #include "libANGLE/renderer/d3d/d3d11/dxgi_support_table.h"
19 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
20 #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
21
22 namespace rx
23 {
24
25 namespace d3d11
26 {
27
SupportsMipGen(DXGI_FORMAT dxgiFormat,D3D_FEATURE_LEVEL featureLevel)28 bool SupportsMipGen(DXGI_FORMAT dxgiFormat, D3D_FEATURE_LEVEL featureLevel)
29 {
30 const auto &support = GetDXGISupport(dxgiFormat, featureLevel);
31 ASSERT((support.optionallySupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) == 0);
32 return ((support.alwaysSupportedFlags & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN) != 0);
33 }
34
DXGIFormatSize(GLuint pixelBits,GLuint blockWidth,GLuint blockHeight)35 DXGIFormatSize::DXGIFormatSize(GLuint pixelBits, GLuint blockWidth, GLuint blockHeight)
36 : pixelBytes(pixelBits / 8), blockWidth(blockWidth), blockHeight(blockHeight)
37 {
38 }
39
GetDXGIFormatSizeInfo(DXGI_FORMAT format)40 const DXGIFormatSize &GetDXGIFormatSizeInfo(DXGI_FORMAT format)
41 {
42 static const DXGIFormatSize sizeUnknown(0, 0, 0);
43 static const DXGIFormatSize size128(128, 1, 1);
44 static const DXGIFormatSize size96(96, 1, 1);
45 static const DXGIFormatSize size64(64, 1, 1);
46 static const DXGIFormatSize size32(32, 1, 1);
47 static const DXGIFormatSize size16(16, 1, 1);
48 static const DXGIFormatSize size8(8, 1, 1);
49 static const DXGIFormatSize sizeBC1(64, 4, 4);
50 static const DXGIFormatSize sizeBC2(128, 4, 4);
51 static const DXGIFormatSize sizeBC3(128, 4, 4);
52 static const DXGIFormatSize sizeBC4(64, 4, 4);
53 static const DXGIFormatSize sizeBC5(128, 4, 4);
54 static const DXGIFormatSize sizeBC6H(128, 4, 4);
55 static const DXGIFormatSize sizeBC7(128, 4, 4);
56 switch (format)
57 {
58 case DXGI_FORMAT_UNKNOWN:
59 return sizeUnknown;
60 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
61 case DXGI_FORMAT_R32G32B32A32_FLOAT:
62 case DXGI_FORMAT_R32G32B32A32_UINT:
63 case DXGI_FORMAT_R32G32B32A32_SINT:
64 return size128;
65 case DXGI_FORMAT_R32G32B32_TYPELESS:
66 case DXGI_FORMAT_R32G32B32_FLOAT:
67 case DXGI_FORMAT_R32G32B32_UINT:
68 case DXGI_FORMAT_R32G32B32_SINT:
69 return size96;
70 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
71 case DXGI_FORMAT_R16G16B16A16_FLOAT:
72 case DXGI_FORMAT_R16G16B16A16_UNORM:
73 case DXGI_FORMAT_R16G16B16A16_UINT:
74 case DXGI_FORMAT_R16G16B16A16_SNORM:
75 case DXGI_FORMAT_R16G16B16A16_SINT:
76 case DXGI_FORMAT_R32G32_TYPELESS:
77 case DXGI_FORMAT_R32G32_FLOAT:
78 case DXGI_FORMAT_R32G32_UINT:
79 case DXGI_FORMAT_R32G32_SINT:
80 case DXGI_FORMAT_R32G8X24_TYPELESS:
81 case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
82 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
83 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
84 return size64;
85 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
86 case DXGI_FORMAT_R10G10B10A2_UNORM:
87 case DXGI_FORMAT_R10G10B10A2_UINT:
88 case DXGI_FORMAT_R11G11B10_FLOAT:
89 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
90 case DXGI_FORMAT_R8G8B8A8_UNORM:
91 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
92 case DXGI_FORMAT_R8G8B8A8_UINT:
93 case DXGI_FORMAT_R8G8B8A8_SNORM:
94 case DXGI_FORMAT_R8G8B8A8_SINT:
95 case DXGI_FORMAT_R16G16_TYPELESS:
96 case DXGI_FORMAT_R16G16_FLOAT:
97 case DXGI_FORMAT_R16G16_UNORM:
98 case DXGI_FORMAT_R16G16_UINT:
99 case DXGI_FORMAT_R16G16_SNORM:
100 case DXGI_FORMAT_R16G16_SINT:
101 case DXGI_FORMAT_R32_TYPELESS:
102 case DXGI_FORMAT_D32_FLOAT:
103 case DXGI_FORMAT_R32_FLOAT:
104 case DXGI_FORMAT_R32_UINT:
105 case DXGI_FORMAT_R32_SINT:
106 case DXGI_FORMAT_R24G8_TYPELESS:
107 case DXGI_FORMAT_D24_UNORM_S8_UINT:
108 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
109 case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
110 return size32;
111 case DXGI_FORMAT_R8G8_TYPELESS:
112 case DXGI_FORMAT_R8G8_UNORM:
113 case DXGI_FORMAT_R8G8_UINT:
114 case DXGI_FORMAT_R8G8_SNORM:
115 case DXGI_FORMAT_R8G8_SINT:
116 case DXGI_FORMAT_R16_TYPELESS:
117 case DXGI_FORMAT_R16_FLOAT:
118 case DXGI_FORMAT_D16_UNORM:
119 case DXGI_FORMAT_R16_UNORM:
120 case DXGI_FORMAT_R16_UINT:
121 case DXGI_FORMAT_R16_SNORM:
122 case DXGI_FORMAT_R16_SINT:
123 return size16;
124 case DXGI_FORMAT_R8_TYPELESS:
125 case DXGI_FORMAT_R8_UNORM:
126 case DXGI_FORMAT_R8_UINT:
127 case DXGI_FORMAT_R8_SNORM:
128 case DXGI_FORMAT_R8_SINT:
129 case DXGI_FORMAT_A8_UNORM:
130 return size8;
131 case DXGI_FORMAT_R1_UNORM:
132 UNREACHABLE();
133 return sizeUnknown;
134 case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
135 case DXGI_FORMAT_R8G8_B8G8_UNORM:
136 case DXGI_FORMAT_G8R8_G8B8_UNORM:
137 return size32;
138 case DXGI_FORMAT_BC1_TYPELESS:
139 case DXGI_FORMAT_BC1_UNORM:
140 case DXGI_FORMAT_BC1_UNORM_SRGB:
141 return sizeBC1;
142 case DXGI_FORMAT_BC2_TYPELESS:
143 case DXGI_FORMAT_BC2_UNORM:
144 case DXGI_FORMAT_BC2_UNORM_SRGB:
145 return sizeBC2;
146 case DXGI_FORMAT_BC3_TYPELESS:
147 case DXGI_FORMAT_BC3_UNORM:
148 case DXGI_FORMAT_BC3_UNORM_SRGB:
149 return sizeBC3;
150 case DXGI_FORMAT_BC4_TYPELESS:
151 case DXGI_FORMAT_BC4_UNORM:
152 case DXGI_FORMAT_BC4_SNORM:
153 return sizeBC4;
154 case DXGI_FORMAT_BC5_TYPELESS:
155 case DXGI_FORMAT_BC5_UNORM:
156 case DXGI_FORMAT_BC5_SNORM:
157 return sizeBC5;
158 case DXGI_FORMAT_B5G6R5_UNORM:
159 case DXGI_FORMAT_B5G5R5A1_UNORM:
160 return size16;
161 case DXGI_FORMAT_B8G8R8A8_UNORM:
162 case DXGI_FORMAT_B8G8R8X8_UNORM:
163 case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
164 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
165 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
166 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
167 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
168 return size32;
169 case DXGI_FORMAT_BC6H_TYPELESS:
170 case DXGI_FORMAT_BC6H_UF16:
171 case DXGI_FORMAT_BC6H_SF16:
172 return sizeBC6H;
173 case DXGI_FORMAT_BC7_TYPELESS:
174 case DXGI_FORMAT_BC7_UNORM:
175 case DXGI_FORMAT_BC7_UNORM_SRGB:
176 return sizeBC7;
177 case DXGI_FORMAT_AYUV:
178 case DXGI_FORMAT_Y410:
179 case DXGI_FORMAT_Y416:
180 case DXGI_FORMAT_NV12:
181 case DXGI_FORMAT_P010:
182 case DXGI_FORMAT_P016:
183 case DXGI_FORMAT_420_OPAQUE:
184 case DXGI_FORMAT_YUY2:
185 case DXGI_FORMAT_Y210:
186 case DXGI_FORMAT_Y216:
187 case DXGI_FORMAT_NV11:
188 case DXGI_FORMAT_AI44:
189 case DXGI_FORMAT_IA44:
190 case DXGI_FORMAT_P8:
191 case DXGI_FORMAT_A8P8:
192 UNREACHABLE();
193 return sizeUnknown;
194 case DXGI_FORMAT_B4G4R4A4_UNORM:
195 return size16;
196 default:
197 UNREACHABLE();
198 return sizeUnknown;
199 }
200 }
201
VertexFormat()202 constexpr VertexFormat::VertexFormat()
203 : conversionType(VERTEX_CONVERT_NONE), nativeFormat(DXGI_FORMAT_UNKNOWN), copyFunction(nullptr)
204 {
205 }
206
VertexFormat(VertexConversionType conversionTypeIn,DXGI_FORMAT nativeFormatIn,VertexCopyFunction copyFunctionIn)207 constexpr VertexFormat::VertexFormat(VertexConversionType conversionTypeIn,
208 DXGI_FORMAT nativeFormatIn,
209 VertexCopyFunction copyFunctionIn)
210 : conversionType(conversionTypeIn), nativeFormat(nativeFormatIn), copyFunction(copyFunctionIn)
211 {
212 }
213
GetVertexFormatInfo_FL_9_3(gl::VertexFormatType vertexFormatType)214 const VertexFormat *GetVertexFormatInfo_FL_9_3(gl::VertexFormatType vertexFormatType)
215 {
216 // D3D11 Feature Level 9_3 doesn't support as many formats for vertex buffer resource as Feature
217 // Level 10_0+.
218 // http://msdn.microsoft.com/en-us/library/windows/desktop/ff471324(v=vs.85).aspx
219
220 switch (vertexFormatType)
221 {
222 // GL_BYTE -- unnormalized
223 case gl::VERTEX_FORMAT_SBYTE1:
224 {
225 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
226 &Copy8SintTo16SintVertexData<1, 2>);
227 return &info;
228 }
229 case gl::VERTEX_FORMAT_SBYTE2:
230 {
231 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
232 &Copy8SintTo16SintVertexData<2, 2>);
233 return &info;
234 }
235 case gl::VERTEX_FORMAT_SBYTE3:
236 {
237 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
238 &Copy8SintTo16SintVertexData<3, 4>);
239 return &info;
240 }
241 case gl::VERTEX_FORMAT_SBYTE4:
242 {
243 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
244 &Copy8SintTo16SintVertexData<4, 4>);
245 return &info;
246 }
247
248 // GL_BYTE -- normalized
249 case gl::VERTEX_FORMAT_SBYTE1_NORM:
250 {
251 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
252 &Copy8SnormTo16SnormVertexData<1, 2>);
253 return &info;
254 }
255 case gl::VERTEX_FORMAT_SBYTE2_NORM:
256 {
257 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
258 &Copy8SnormTo16SnormVertexData<2, 2>);
259 return &info;
260 }
261 case gl::VERTEX_FORMAT_SBYTE3_NORM:
262 {
263 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
264 &Copy8SnormTo16SnormVertexData<3, 4>);
265 return &info;
266 }
267 case gl::VERTEX_FORMAT_SBYTE4_NORM:
268 {
269 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
270 &Copy8SnormTo16SnormVertexData<4, 4>);
271 return &info;
272 }
273
274 // GL_UNSIGNED_BYTE -- un-normalized
275 // NOTE: 3 and 4 component unnormalized GL_UNSIGNED_BYTE should use the default format
276 // table.
277 case gl::VERTEX_FORMAT_UBYTE1:
278 {
279 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
280 &CopyNativeVertexData<GLubyte, 1, 4, 1>);
281 return &info;
282 }
283 case gl::VERTEX_FORMAT_UBYTE2:
284 {
285 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
286 &CopyNativeVertexData<GLubyte, 2, 4, 1>);
287 return &info;
288 }
289
290 // GL_UNSIGNED_BYTE -- normalized
291 // NOTE: 3 and 4 component normalized GL_UNSIGNED_BYTE should use the default format table.
292
293 // GL_UNSIGNED_BYTE -- normalized
294 case gl::VERTEX_FORMAT_UBYTE1_NORM:
295 {
296 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
297 &CopyNativeVertexData<GLubyte, 1, 4, UINT8_MAX>);
298 return &info;
299 }
300 case gl::VERTEX_FORMAT_UBYTE2_NORM:
301 {
302 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
303 &CopyNativeVertexData<GLubyte, 2, 4, UINT8_MAX>);
304 return &info;
305 }
306
307 // GL_SHORT -- un-normalized
308 // NOTE: 2, 3 and 4 component unnormalized GL_SHORT should use the default format table.
309 case gl::VERTEX_FORMAT_SSHORT1:
310 {
311 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16_SINT,
312 &CopyNativeVertexData<GLshort, 1, 2, 0>);
313 return &info;
314 }
315
316 // GL_SHORT -- normalized
317 // NOTE: 2, 3 and 4 component normalized GL_SHORT should use the default format table.
318 case gl::VERTEX_FORMAT_SSHORT1_NORM:
319 {
320 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16_SNORM,
321 &CopyNativeVertexData<GLshort, 1, 2, 0>);
322 return &info;
323 }
324
325 // GL_UNSIGNED_SHORT -- un-normalized
326 case gl::VERTEX_FORMAT_USHORT1:
327 {
328 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
329 &CopyTo32FVertexData<GLushort, 1, 2, false>);
330 return &info;
331 }
332 case gl::VERTEX_FORMAT_USHORT2:
333 {
334 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
335 &CopyTo32FVertexData<GLushort, 2, 2, false>);
336 return &info;
337 }
338 case gl::VERTEX_FORMAT_USHORT3:
339 {
340 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
341 &CopyTo32FVertexData<GLushort, 3, 3, false>);
342 return &info;
343 }
344 case gl::VERTEX_FORMAT_USHORT4:
345 {
346 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
347 &CopyTo32FVertexData<GLushort, 4, 4, false>);
348 return &info;
349 }
350
351 // GL_UNSIGNED_SHORT -- normalized
352 case gl::VERTEX_FORMAT_USHORT1_NORM:
353 {
354 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
355 &CopyTo32FVertexData<GLushort, 1, 2, true>);
356 return &info;
357 }
358 case gl::VERTEX_FORMAT_USHORT2_NORM:
359 {
360 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
361 &CopyTo32FVertexData<GLushort, 2, 2, true>);
362 return &info;
363 }
364 case gl::VERTEX_FORMAT_USHORT3_NORM:
365 {
366 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
367 &CopyTo32FVertexData<GLushort, 3, 3, true>);
368 return &info;
369 }
370 case gl::VERTEX_FORMAT_USHORT4_NORM:
371 {
372 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
373 &CopyTo32FVertexData<GLushort, 4, 4, true>);
374 return &info;
375 }
376
377 // GL_FIXED
378 // TODO: Add test to verify that this works correctly.
379 // NOTE: 2, 3 and 4 component GL_FIXED should use the default format table.
380 case gl::VERTEX_FORMAT_FIXED1:
381 {
382 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
383 &Copy32FixedTo32FVertexData<1, 2>);
384 return &info;
385 }
386
387 // GL_FLOAT
388 // TODO: Add test to verify that this works correctly.
389 // NOTE: 2, 3 and 4 component GL_FLOAT should use the default format table.
390 case gl::VERTEX_FORMAT_FLOAT1:
391 {
392 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
393 &CopyNativeVertexData<GLfloat, 1, 2, 0>);
394 return &info;
395 }
396
397 default:
398 return nullptr;
399 }
400 }
401
GetVertexFormatInfo(gl::VertexFormatType vertexFormatType,D3D_FEATURE_LEVEL featureLevel)402 const VertexFormat &GetVertexFormatInfo(gl::VertexFormatType vertexFormatType, D3D_FEATURE_LEVEL featureLevel)
403 {
404 if (featureLevel == D3D_FEATURE_LEVEL_9_3)
405 {
406 const VertexFormat *result = GetVertexFormatInfo_FL_9_3(vertexFormatType);
407 if (result)
408 {
409 return *result;
410 }
411 }
412
413 switch (vertexFormatType)
414 {
415 //
416 // Float formats
417 //
418
419 // GL_BYTE -- un-normalized
420 case gl::VERTEX_FORMAT_SBYTE1:
421 {
422 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_SINT,
423 &CopyNativeVertexData<GLbyte, 1, 1, 0>);
424 return info;
425 }
426 case gl::VERTEX_FORMAT_SBYTE2:
427 {
428 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_SINT,
429 &CopyNativeVertexData<GLbyte, 2, 2, 0>);
430 return info;
431 }
432 case gl::VERTEX_FORMAT_SBYTE3:
433 {
434 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_SINT,
435 &CopyNativeVertexData<GLbyte, 3, 4, 1>);
436 return info;
437 }
438 case gl::VERTEX_FORMAT_SBYTE4:
439 {
440 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_SINT,
441 &CopyNativeVertexData<GLbyte, 4, 4, 0>);
442 return info;
443 }
444
445 // GL_BYTE -- normalized
446 case gl::VERTEX_FORMAT_SBYTE1_NORM:
447 {
448 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SNORM,
449 &CopyNativeVertexData<GLbyte, 1, 1, 0>);
450 return info;
451 }
452 case gl::VERTEX_FORMAT_SBYTE2_NORM:
453 {
454 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SNORM,
455 &CopyNativeVertexData<GLbyte, 2, 2, 0>);
456 return info;
457 }
458 case gl::VERTEX_FORMAT_SBYTE3_NORM:
459 {
460 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SNORM,
461 &CopyNativeVertexData<GLbyte, 3, 4, INT8_MAX>);
462 return info;
463 }
464 case gl::VERTEX_FORMAT_SBYTE4_NORM:
465 {
466 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SNORM,
467 &CopyNativeVertexData<GLbyte, 4, 4, 0>);
468 return info;
469 }
470
471 // GL_UNSIGNED_BYTE -- un-normalized
472 case gl::VERTEX_FORMAT_UBYTE1:
473 {
474 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_UINT,
475 &CopyNativeVertexData<GLubyte, 1, 1, 0>);
476 return info;
477 }
478 case gl::VERTEX_FORMAT_UBYTE2:
479 {
480 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_UINT,
481 &CopyNativeVertexData<GLubyte, 2, 2, 0>);
482 return info;
483 }
484 case gl::VERTEX_FORMAT_UBYTE3:
485 {
486 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT,
487 &CopyNativeVertexData<GLubyte, 3, 4, 1>);
488 return info;
489 }
490 case gl::VERTEX_FORMAT_UBYTE4:
491 {
492 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_UINT,
493 &CopyNativeVertexData<GLubyte, 4, 4, 0>);
494 return info;
495 }
496
497 // GL_UNSIGNED_BYTE -- normalized
498 case gl::VERTEX_FORMAT_UBYTE1_NORM:
499 {
500 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UNORM,
501 &CopyNativeVertexData<GLubyte, 1, 1, 0>);
502 return info;
503 }
504 case gl::VERTEX_FORMAT_UBYTE2_NORM:
505 {
506 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UNORM,
507 &CopyNativeVertexData<GLubyte, 2, 2, 0>);
508 return info;
509 }
510 case gl::VERTEX_FORMAT_UBYTE3_NORM:
511 {
512 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM,
513 &CopyNativeVertexData<GLubyte, 3, 4, UINT8_MAX>);
514 return info;
515 }
516 case gl::VERTEX_FORMAT_UBYTE4_NORM:
517 {
518 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UNORM,
519 &CopyNativeVertexData<GLubyte, 4, 4, 0>);
520 return info;
521 }
522
523 // GL_SHORT -- un-normalized
524 case gl::VERTEX_FORMAT_SSHORT1:
525 {
526 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_SINT,
527 &CopyNativeVertexData<GLshort, 1, 1, 0>);
528 return info;
529 }
530 case gl::VERTEX_FORMAT_SSHORT2:
531 {
532 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_SINT,
533 &CopyNativeVertexData<GLshort, 2, 2, 0>);
534 return info;
535 }
536 case gl::VERTEX_FORMAT_SSHORT3:
537 {
538 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT,
539 &CopyNativeVertexData<GLshort, 3, 4, 1>);
540 return info;
541 }
542 case gl::VERTEX_FORMAT_SSHORT4:
543 {
544 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_SINT,
545 &CopyNativeVertexData<GLshort, 4, 4, 0>);
546 return info;
547 }
548
549 // GL_SHORT -- normalized
550 case gl::VERTEX_FORMAT_SSHORT1_NORM:
551 {
552 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SNORM,
553 &CopyNativeVertexData<GLshort, 1, 1, 0>);
554 return info;
555 }
556 case gl::VERTEX_FORMAT_SSHORT2_NORM:
557 {
558 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SNORM,
559 &CopyNativeVertexData<GLshort, 2, 2, 0>);
560 return info;
561 }
562 case gl::VERTEX_FORMAT_SSHORT3_NORM:
563 {
564 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM,
565 &CopyNativeVertexData<GLshort, 3, 4, INT16_MAX>);
566 return info;
567 }
568 case gl::VERTEX_FORMAT_SSHORT4_NORM:
569 {
570 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SNORM,
571 &CopyNativeVertexData<GLshort, 4, 4, 0>);
572 return info;
573 }
574
575 // GL_UNSIGNED_SHORT -- un-normalized
576 case gl::VERTEX_FORMAT_USHORT1:
577 {
578 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_UINT,
579 &CopyNativeVertexData<GLushort, 1, 1, 0>);
580 return info;
581 }
582 case gl::VERTEX_FORMAT_USHORT2:
583 {
584 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_UINT,
585 &CopyNativeVertexData<GLushort, 2, 2, 0>);
586 return info;
587 }
588 case gl::VERTEX_FORMAT_USHORT3:
589 {
590 static constexpr VertexFormat info(VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_UINT,
591 &CopyNativeVertexData<GLushort, 3, 4, 1>);
592 return info;
593 }
594 case gl::VERTEX_FORMAT_USHORT4:
595 {
596 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_UINT,
597 &CopyNativeVertexData<GLushort, 4, 4, 0>);
598 return info;
599 }
600
601 // GL_UNSIGNED_SHORT -- normalized
602 case gl::VERTEX_FORMAT_USHORT1_NORM:
603 {
604 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UNORM,
605 &CopyNativeVertexData<GLushort, 1, 1, 0>);
606 return info;
607 }
608 case gl::VERTEX_FORMAT_USHORT2_NORM:
609 {
610 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UNORM,
611 &CopyNativeVertexData<GLushort, 2, 2, 0>);
612 return info;
613 }
614 case gl::VERTEX_FORMAT_USHORT3_NORM:
615 {
616 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UNORM,
617 &CopyNativeVertexData<GLushort, 3, 4, UINT16_MAX>);
618 return info;
619 }
620 case gl::VERTEX_FORMAT_USHORT4_NORM:
621 {
622 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UNORM,
623 &CopyNativeVertexData<GLushort, 4, 4, 0>);
624 return info;
625 }
626
627 // GL_INT -- un-normalized
628 case gl::VERTEX_FORMAT_SINT1:
629 {
630 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_SINT,
631 &CopyNativeVertexData<GLint, 1, 1, 0>);
632 return info;
633 }
634 case gl::VERTEX_FORMAT_SINT2:
635 {
636 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_SINT,
637 &CopyNativeVertexData<GLint, 2, 2, 0>);
638 return info;
639 }
640 case gl::VERTEX_FORMAT_SINT3:
641 {
642 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_SINT,
643 &CopyNativeVertexData<GLint, 3, 3, 0>);
644 return info;
645 }
646 case gl::VERTEX_FORMAT_SINT4:
647 {
648 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_SINT,
649 &CopyNativeVertexData<GLint, 4, 4, 0>);
650 return info;
651 }
652
653 // GL_INT -- normalized
654 case gl::VERTEX_FORMAT_SINT1_NORM:
655 {
656 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
657 &CopyTo32FVertexData<GLint, 1, 1, true>);
658 return info;
659 }
660 case gl::VERTEX_FORMAT_SINT2_NORM:
661 {
662 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
663 &CopyTo32FVertexData<GLint, 2, 2, true>);
664 return info;
665 }
666 case gl::VERTEX_FORMAT_SINT3_NORM:
667 {
668 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
669 &CopyTo32FVertexData<GLint, 3, 3, true>);
670 return info;
671 }
672 case gl::VERTEX_FORMAT_SINT4_NORM:
673 {
674 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
675 &CopyTo32FVertexData<GLint, 4, 4, true>);
676 return info;
677 }
678
679 // GL_UNSIGNED_INT -- un-normalized
680 case gl::VERTEX_FORMAT_UINT1:
681 {
682 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_UINT,
683 &CopyNativeVertexData<GLuint, 1, 1, 0>);
684 return info;
685 }
686 case gl::VERTEX_FORMAT_UINT2:
687 {
688 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_UINT,
689 &CopyNativeVertexData<GLuint, 2, 2, 0>);
690 return info;
691 }
692 case gl::VERTEX_FORMAT_UINT3:
693 {
694 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_UINT,
695 &CopyNativeVertexData<GLuint, 3, 3, 0>);
696 return info;
697 }
698 case gl::VERTEX_FORMAT_UINT4:
699 {
700 static constexpr VertexFormat info(VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_UINT,
701 &CopyNativeVertexData<GLuint, 4, 4, 0>);
702 return info;
703 }
704
705 // GL_UNSIGNED_INT -- normalized
706 case gl::VERTEX_FORMAT_UINT1_NORM:
707 {
708 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
709 &CopyTo32FVertexData<GLuint, 1, 1, true>);
710 return info;
711 }
712 case gl::VERTEX_FORMAT_UINT2_NORM:
713 {
714 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
715 &CopyTo32FVertexData<GLuint, 2, 2, true>);
716 return info;
717 }
718 case gl::VERTEX_FORMAT_UINT3_NORM:
719 {
720 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
721 &CopyTo32FVertexData<GLuint, 3, 3, true>);
722 return info;
723 }
724 case gl::VERTEX_FORMAT_UINT4_NORM:
725 {
726 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
727 &CopyTo32FVertexData<GLuint, 4, 4, true>);
728 return info;
729 }
730
731 // GL_FIXED
732 case gl::VERTEX_FORMAT_FIXED1:
733 {
734 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
735 &Copy32FixedTo32FVertexData<1, 1>);
736 return info;
737 }
738 case gl::VERTEX_FORMAT_FIXED2:
739 {
740 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
741 &Copy32FixedTo32FVertexData<2, 2>);
742 return info;
743 }
744 case gl::VERTEX_FORMAT_FIXED3:
745 {
746 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
747 &Copy32FixedTo32FVertexData<3, 3>);
748 return info;
749 }
750 case gl::VERTEX_FORMAT_FIXED4:
751 {
752 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
753 &Copy32FixedTo32FVertexData<4, 4>);
754 return info;
755 }
756
757 // GL_HALF_FLOAT
758 case gl::VERTEX_FORMAT_HALF1:
759 {
760 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_FLOAT,
761 &CopyNativeVertexData<GLhalf, 1, 1, 0>);
762 return info;
763 }
764 case gl::VERTEX_FORMAT_HALF2:
765 {
766 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_FLOAT,
767 &CopyNativeVertexData<GLhalf, 2, 2, 0>);
768 return info;
769 }
770 case gl::VERTEX_FORMAT_HALF3:
771 {
772 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_FLOAT,
773 &CopyNativeVertexData<GLhalf, 3, 4, gl::Float16One>);
774 return info;
775 }
776 case gl::VERTEX_FORMAT_HALF4:
777 {
778 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_FLOAT,
779 &CopyNativeVertexData<GLhalf, 4, 4, 0>);
780 return info;
781 }
782
783 // GL_FLOAT
784 case gl::VERTEX_FORMAT_FLOAT1:
785 {
786 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_FLOAT,
787 &CopyNativeVertexData<GLfloat, 1, 1, 0>);
788 return info;
789 }
790 case gl::VERTEX_FORMAT_FLOAT2:
791 {
792 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_FLOAT,
793 &CopyNativeVertexData<GLfloat, 2, 2, 0>);
794 return info;
795 }
796 case gl::VERTEX_FORMAT_FLOAT3:
797 {
798 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_FLOAT,
799 &CopyNativeVertexData<GLfloat, 3, 3, 0>);
800 return info;
801 }
802 case gl::VERTEX_FORMAT_FLOAT4:
803 {
804 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_FLOAT,
805 &CopyNativeVertexData<GLfloat, 4, 4, 0>);
806 return info;
807 }
808
809 // GL_INT_2_10_10_10_REV
810 case gl::VERTEX_FORMAT_SINT210:
811 {
812 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
813 &CopyXYZ10W2ToXYZW32FVertexData<true, false, true>);
814 return info;
815 }
816 case gl::VERTEX_FORMAT_SINT210_NORM:
817 {
818 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
819 &CopyXYZ10W2ToXYZW32FVertexData<true, true, true>);
820 return info;
821 }
822
823 // GL_UNSIGNED_INT_2_10_10_10_REV
824 case gl::VERTEX_FORMAT_UINT210:
825 {
826 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
827 &CopyXYZ10W2ToXYZW32FVertexData<false, false, true>);
828 return info;
829 }
830 case gl::VERTEX_FORMAT_UINT210_NORM:
831 {
832 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UNORM,
833 &CopyNativeVertexData<GLuint, 1, 1, 0>);
834 return info;
835 }
836
837 //
838 // Integer Formats
839 //
840
841 // GL_BYTE
842 case gl::VERTEX_FORMAT_SBYTE1_INT:
843 {
844 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SINT,
845 &CopyNativeVertexData<GLbyte, 1, 1, 0>);
846 return info;
847 }
848 case gl::VERTEX_FORMAT_SBYTE2_INT:
849 {
850 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SINT,
851 &CopyNativeVertexData<GLbyte, 2, 2, 0>);
852 return info;
853 }
854 case gl::VERTEX_FORMAT_SBYTE3_INT:
855 {
856 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SINT,
857 &CopyNativeVertexData<GLbyte, 3, 4, 1>);
858 return info;
859 }
860 case gl::VERTEX_FORMAT_SBYTE4_INT:
861 {
862 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SINT,
863 &CopyNativeVertexData<GLbyte, 4, 4, 0>);
864 return info;
865 }
866
867 // GL_UNSIGNED_BYTE
868 case gl::VERTEX_FORMAT_UBYTE1_INT:
869 {
870 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UINT,
871 &CopyNativeVertexData<GLubyte, 1, 1, 0>);
872 return info;
873 }
874 case gl::VERTEX_FORMAT_UBYTE2_INT:
875 {
876 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UINT,
877 &CopyNativeVertexData<GLubyte, 2, 2, 0>);
878 return info;
879 }
880 case gl::VERTEX_FORMAT_UBYTE3_INT:
881 {
882 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UINT,
883 &CopyNativeVertexData<GLubyte, 3, 4, 1>);
884 return info;
885 }
886 case gl::VERTEX_FORMAT_UBYTE4_INT:
887 {
888 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UINT,
889 &CopyNativeVertexData<GLubyte, 4, 4, 0>);
890 return info;
891 }
892
893 // GL_SHORT
894 case gl::VERTEX_FORMAT_SSHORT1_INT:
895 {
896 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SINT,
897 &CopyNativeVertexData<GLshort, 1, 1, 0>);
898 return info;
899 }
900 case gl::VERTEX_FORMAT_SSHORT2_INT:
901 {
902 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SINT,
903 &CopyNativeVertexData<GLshort, 2, 2, 0>);
904 return info;
905 }
906 case gl::VERTEX_FORMAT_SSHORT3_INT:
907 {
908 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
909 &CopyNativeVertexData<GLshort, 3, 4, 1>);
910 return info;
911 }
912 case gl::VERTEX_FORMAT_SSHORT4_INT:
913 {
914 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SINT,
915 &CopyNativeVertexData<GLshort, 4, 4, 0>);
916 return info;
917 }
918
919 // GL_UNSIGNED_SHORT
920 case gl::VERTEX_FORMAT_USHORT1_INT:
921 {
922 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UINT,
923 &CopyNativeVertexData<GLushort, 1, 1, 0>);
924 return info;
925 }
926 case gl::VERTEX_FORMAT_USHORT2_INT:
927 {
928 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UINT,
929 &CopyNativeVertexData<GLushort, 2, 2, 0>);
930 return info;
931 }
932 case gl::VERTEX_FORMAT_USHORT3_INT:
933 {
934 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UINT,
935 &CopyNativeVertexData<GLushort, 3, 4, 1>);
936 return info;
937 }
938 case gl::VERTEX_FORMAT_USHORT4_INT:
939 {
940 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UINT,
941 &CopyNativeVertexData<GLushort, 4, 4, 0>);
942 return info;
943 }
944
945 // GL_INT
946 case gl::VERTEX_FORMAT_SINT1_INT:
947 {
948 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT,
949 &CopyNativeVertexData<GLint, 1, 1, 0>);
950 return info;
951 }
952 case gl::VERTEX_FORMAT_SINT2_INT:
953 {
954 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT,
955 &CopyNativeVertexData<GLint, 2, 2, 0>);
956 return info;
957 }
958 case gl::VERTEX_FORMAT_SINT3_INT:
959 {
960 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT,
961 &CopyNativeVertexData<GLint, 3, 3, 0>);
962 return info;
963 }
964 case gl::VERTEX_FORMAT_SINT4_INT:
965 {
966 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT,
967 &CopyNativeVertexData<GLint, 4, 4, 0>);
968 return info;
969 }
970
971 // GL_UNSIGNED_INT
972 case gl::VERTEX_FORMAT_UINT1_INT:
973 {
974 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT,
975 &CopyNativeVertexData<GLuint, 1, 1, 0>);
976 return info;
977 }
978 case gl::VERTEX_FORMAT_UINT2_INT:
979 {
980 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT,
981 &CopyNativeVertexData<GLuint, 2, 2, 0>);
982 return info;
983 }
984 case gl::VERTEX_FORMAT_UINT3_INT:
985 {
986 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT,
987 &CopyNativeVertexData<GLuint, 3, 3, 0>);
988 return info;
989 }
990 case gl::VERTEX_FORMAT_UINT4_INT:
991 {
992 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT,
993 &CopyNativeVertexData<GLuint, 4, 4, 0>);
994 return info;
995 }
996
997 // GL_INT_2_10_10_10_REV
998 case gl::VERTEX_FORMAT_SINT210_INT:
999 {
1000 static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
1001 &CopyXYZ10W2ToXYZW32FVertexData<true, true, false>);
1002 return info;
1003 }
1004
1005 // GL_UNSIGNED_INT_2_10_10_10_REV
1006 case gl::VERTEX_FORMAT_UINT210_INT:
1007 {
1008 static constexpr VertexFormat info(VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UINT,
1009 &CopyNativeVertexData<GLuint, 1, 1, 0>);
1010 return info;
1011 }
1012
1013 default:
1014 {
1015 static constexpr VertexFormat info;
1016 return info;
1017 }
1018 }
1019 }
1020
1021 } // namespace d3d11
1022
1023 } // namespace rx
1024