1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_vk_format_table.py using data from vk_format_map.json
3 //
4 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // vk_format_table_autogen.cpp:
9 // Queries for full Vulkan format information based on GL format.
10
11 #include "libANGLE/renderer/vulkan/vk_format_utils.h"
12
13 #include "image_util/copyimage.h"
14 #include "image_util/generatemip.h"
15 #include "image_util/loadimage.h"
16
17 using namespace angle;
18
19 namespace rx
20 {
21
22 namespace vk
23 {
24
initialize(RendererVk * renderer,const angle::Format & angleFormat)25 void Format::initialize(RendererVk *renderer, const angle::Format &angleFormat)
26 {
27 switch (angleFormat.id)
28 {
29 case angle::FormatID::A16_FLOAT:
30 internalFormat = GL_ALPHA16F_EXT;
31 actualImageFormatID = angle::FormatID::R16_FLOAT;
32 vkImageFormat = VK_FORMAT_R16_SFLOAT;
33 imageInitializerFunction = nullptr;
34
35 break;
36
37 case angle::FormatID::A1R5G5B5_UNORM:
38 internalFormat = GL_A1RGB5_ANGLEX;
39 actualImageFormatID = angle::FormatID::A1R5G5B5_UNORM;
40 vkImageFormat = VK_FORMAT_A1R5G5B5_UNORM_PACK16;
41 imageInitializerFunction = nullptr;
42 actualBufferFormatID = angle::FormatID::A1R5G5B5_UNORM;
43 vkBufferFormat = VK_FORMAT_A1R5G5B5_UNORM_PACK16;
44 vkBufferFormatIsPacked = true;
45 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
46 vertexLoadRequiresConversion = false;
47 break;
48
49 case angle::FormatID::A2R10G10B10_SINT_VERTEX:
50 internalFormat = GL_INT_10_10_10_2_OES;
51 actualImageFormatID = angle::FormatID::NONE;
52 vkImageFormat = VK_FORMAT_UNDEFINED;
53 imageInitializerFunction = nullptr;
54 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
55 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
56 vkBufferFormatIsPacked = false;
57 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<true, false>;
58 vertexLoadRequiresConversion = true;
59 break;
60
61 case angle::FormatID::A2R10G10B10_SNORM_VERTEX:
62 internalFormat = GL_A2_RGB10_SNORM_ANGLEX;
63 actualImageFormatID = angle::FormatID::NONE;
64 vkImageFormat = VK_FORMAT_UNDEFINED;
65 imageInitializerFunction = nullptr;
66 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
67 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
68 vkBufferFormatIsPacked = false;
69 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<true, true>;
70 vertexLoadRequiresConversion = true;
71 break;
72
73 case angle::FormatID::A2R10G10B10_SSCALED_VERTEX:
74 internalFormat = GL_A2_RGB10_SSCALED_ANGLEX;
75 actualImageFormatID = angle::FormatID::NONE;
76 vkImageFormat = VK_FORMAT_UNDEFINED;
77 imageInitializerFunction = nullptr;
78 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
79 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
80 vkBufferFormatIsPacked = false;
81 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<true, false>;
82 vertexLoadRequiresConversion = true;
83 break;
84
85 case angle::FormatID::A2R10G10B10_UINT_VERTEX:
86 internalFormat = GL_UNSIGNED_INT_10_10_10_2_OES;
87 actualImageFormatID = angle::FormatID::NONE;
88 vkImageFormat = VK_FORMAT_UNDEFINED;
89 imageInitializerFunction = nullptr;
90 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
91 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
92 vkBufferFormatIsPacked = false;
93 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<false, false>;
94 vertexLoadRequiresConversion = true;
95 break;
96
97 case angle::FormatID::A2R10G10B10_UNORM_VERTEX:
98 internalFormat = GL_A2_RGB10_UNORM_ANGLEX;
99 actualImageFormatID = angle::FormatID::NONE;
100 vkImageFormat = VK_FORMAT_UNDEFINED;
101 imageInitializerFunction = nullptr;
102 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
103 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
104 vkBufferFormatIsPacked = false;
105 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<false, true>;
106 vertexLoadRequiresConversion = true;
107 break;
108
109 case angle::FormatID::A2R10G10B10_USCALED_VERTEX:
110 internalFormat = GL_A2_RGB10_USCALED_ANGLEX;
111 actualImageFormatID = angle::FormatID::NONE;
112 vkImageFormat = VK_FORMAT_UNDEFINED;
113 imageInitializerFunction = nullptr;
114 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
115 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
116 vkBufferFormatIsPacked = false;
117 vertexLoadFunction = CopyW2XYZ10ToXYZW32FVertexData<false, false>;
118 vertexLoadRequiresConversion = true;
119 break;
120
121 case angle::FormatID::A32_FLOAT:
122 internalFormat = GL_ALPHA32F_EXT;
123 actualImageFormatID = angle::FormatID::R32_FLOAT;
124 vkImageFormat = VK_FORMAT_R32_SFLOAT;
125 imageInitializerFunction = nullptr;
126
127 break;
128
129 case angle::FormatID::A8_UNORM:
130 internalFormat = GL_ALPHA8_EXT;
131 actualImageFormatID = angle::FormatID::R8_UNORM;
132 vkImageFormat = VK_FORMAT_R8_UNORM;
133 imageInitializerFunction = nullptr;
134
135 break;
136
137 case angle::FormatID::ASTC_10x10_SRGB_BLOCK:
138 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;
139 actualImageFormatID = angle::FormatID::ASTC_10x10_SRGB_BLOCK;
140 vkImageFormat = VK_FORMAT_ASTC_10x10_SRGB_BLOCK;
141 imageInitializerFunction = nullptr;
142 actualBufferFormatID = angle::FormatID::ASTC_10x10_SRGB_BLOCK;
143 vkBufferFormat = VK_FORMAT_ASTC_10x10_SRGB_BLOCK;
144 vkBufferFormatIsPacked = false;
145 vertexLoadFunction = nullptr;
146 vertexLoadRequiresConversion = false;
147 break;
148
149 case angle::FormatID::ASTC_10x10_UNORM_BLOCK:
150 internalFormat = GL_COMPRESSED_RGBA_ASTC_10x10_KHR;
151 actualImageFormatID = angle::FormatID::ASTC_10x10_UNORM_BLOCK;
152 vkImageFormat = VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
153 imageInitializerFunction = nullptr;
154 actualBufferFormatID = angle::FormatID::ASTC_10x10_UNORM_BLOCK;
155 vkBufferFormat = VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
156 vkBufferFormatIsPacked = false;
157 vertexLoadFunction = nullptr;
158 vertexLoadRequiresConversion = false;
159 break;
160
161 case angle::FormatID::ASTC_10x5_SRGB_BLOCK:
162 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;
163 actualImageFormatID = angle::FormatID::ASTC_10x5_SRGB_BLOCK;
164 vkImageFormat = VK_FORMAT_ASTC_10x5_SRGB_BLOCK;
165 imageInitializerFunction = nullptr;
166 actualBufferFormatID = angle::FormatID::ASTC_10x5_SRGB_BLOCK;
167 vkBufferFormat = VK_FORMAT_ASTC_10x5_SRGB_BLOCK;
168 vkBufferFormatIsPacked = false;
169 vertexLoadFunction = nullptr;
170 vertexLoadRequiresConversion = false;
171 break;
172
173 case angle::FormatID::ASTC_10x5_UNORM_BLOCK:
174 internalFormat = GL_COMPRESSED_RGBA_ASTC_10x5_KHR;
175 actualImageFormatID = angle::FormatID::ASTC_10x5_UNORM_BLOCK;
176 vkImageFormat = VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
177 imageInitializerFunction = nullptr;
178 actualBufferFormatID = angle::FormatID::ASTC_10x5_UNORM_BLOCK;
179 vkBufferFormat = VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
180 vkBufferFormatIsPacked = false;
181 vertexLoadFunction = nullptr;
182 vertexLoadRequiresConversion = false;
183 break;
184
185 case angle::FormatID::ASTC_10x6_SRGB_BLOCK:
186 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;
187 actualImageFormatID = angle::FormatID::ASTC_10x6_SRGB_BLOCK;
188 vkImageFormat = VK_FORMAT_ASTC_10x6_SRGB_BLOCK;
189 imageInitializerFunction = nullptr;
190 actualBufferFormatID = angle::FormatID::ASTC_10x6_SRGB_BLOCK;
191 vkBufferFormat = VK_FORMAT_ASTC_10x6_SRGB_BLOCK;
192 vkBufferFormatIsPacked = false;
193 vertexLoadFunction = nullptr;
194 vertexLoadRequiresConversion = false;
195 break;
196
197 case angle::FormatID::ASTC_10x6_UNORM_BLOCK:
198 internalFormat = GL_COMPRESSED_RGBA_ASTC_10x6_KHR;
199 actualImageFormatID = angle::FormatID::ASTC_10x6_UNORM_BLOCK;
200 vkImageFormat = VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
201 imageInitializerFunction = nullptr;
202 actualBufferFormatID = angle::FormatID::ASTC_10x6_UNORM_BLOCK;
203 vkBufferFormat = VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
204 vkBufferFormatIsPacked = false;
205 vertexLoadFunction = nullptr;
206 vertexLoadRequiresConversion = false;
207 break;
208
209 case angle::FormatID::ASTC_10x8_SRGB_BLOCK:
210 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;
211 actualImageFormatID = angle::FormatID::ASTC_10x8_SRGB_BLOCK;
212 vkImageFormat = VK_FORMAT_ASTC_10x8_SRGB_BLOCK;
213 imageInitializerFunction = nullptr;
214 actualBufferFormatID = angle::FormatID::ASTC_10x8_SRGB_BLOCK;
215 vkBufferFormat = VK_FORMAT_ASTC_10x8_SRGB_BLOCK;
216 vkBufferFormatIsPacked = false;
217 vertexLoadFunction = nullptr;
218 vertexLoadRequiresConversion = false;
219 break;
220
221 case angle::FormatID::ASTC_10x8_UNORM_BLOCK:
222 internalFormat = GL_COMPRESSED_RGBA_ASTC_10x8_KHR;
223 actualImageFormatID = angle::FormatID::ASTC_10x8_UNORM_BLOCK;
224 vkImageFormat = VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
225 imageInitializerFunction = nullptr;
226 actualBufferFormatID = angle::FormatID::ASTC_10x8_UNORM_BLOCK;
227 vkBufferFormat = VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
228 vkBufferFormatIsPacked = false;
229 vertexLoadFunction = nullptr;
230 vertexLoadRequiresConversion = false;
231 break;
232
233 case angle::FormatID::ASTC_12x10_SRGB_BLOCK:
234 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;
235 actualImageFormatID = angle::FormatID::ASTC_12x10_SRGB_BLOCK;
236 vkImageFormat = VK_FORMAT_ASTC_12x10_SRGB_BLOCK;
237 imageInitializerFunction = nullptr;
238 actualBufferFormatID = angle::FormatID::ASTC_12x10_SRGB_BLOCK;
239 vkBufferFormat = VK_FORMAT_ASTC_12x10_SRGB_BLOCK;
240 vkBufferFormatIsPacked = false;
241 vertexLoadFunction = nullptr;
242 vertexLoadRequiresConversion = false;
243 break;
244
245 case angle::FormatID::ASTC_12x10_UNORM_BLOCK:
246 internalFormat = GL_COMPRESSED_RGBA_ASTC_12x10_KHR;
247 actualImageFormatID = angle::FormatID::ASTC_12x10_UNORM_BLOCK;
248 vkImageFormat = VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
249 imageInitializerFunction = nullptr;
250 actualBufferFormatID = angle::FormatID::ASTC_12x10_UNORM_BLOCK;
251 vkBufferFormat = VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
252 vkBufferFormatIsPacked = false;
253 vertexLoadFunction = nullptr;
254 vertexLoadRequiresConversion = false;
255 break;
256
257 case angle::FormatID::ASTC_12x12_SRGB_BLOCK:
258 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;
259 actualImageFormatID = angle::FormatID::ASTC_12x12_SRGB_BLOCK;
260 vkImageFormat = VK_FORMAT_ASTC_12x12_SRGB_BLOCK;
261 imageInitializerFunction = nullptr;
262 actualBufferFormatID = angle::FormatID::ASTC_12x12_SRGB_BLOCK;
263 vkBufferFormat = VK_FORMAT_ASTC_12x12_SRGB_BLOCK;
264 vkBufferFormatIsPacked = false;
265 vertexLoadFunction = nullptr;
266 vertexLoadRequiresConversion = false;
267 break;
268
269 case angle::FormatID::ASTC_12x12_UNORM_BLOCK:
270 internalFormat = GL_COMPRESSED_RGBA_ASTC_12x12_KHR;
271 actualImageFormatID = angle::FormatID::ASTC_12x12_UNORM_BLOCK;
272 vkImageFormat = VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
273 imageInitializerFunction = nullptr;
274 actualBufferFormatID = angle::FormatID::ASTC_12x12_UNORM_BLOCK;
275 vkBufferFormat = VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
276 vkBufferFormatIsPacked = false;
277 vertexLoadFunction = nullptr;
278 vertexLoadRequiresConversion = false;
279 break;
280
281 case angle::FormatID::ASTC_3x3x3_UNORM_BLOCK:
282 // This format is not implemented in Vulkan.
283 break;
284
285 case angle::FormatID::ASTC_3x3x3_UNORM_SRGB_BLOCK:
286 // This format is not implemented in Vulkan.
287 break;
288
289 case angle::FormatID::ASTC_4x3x3_UNORM_BLOCK:
290 // This format is not implemented in Vulkan.
291 break;
292
293 case angle::FormatID::ASTC_4x3x3_UNORM_SRGB_BLOCK:
294 // This format is not implemented in Vulkan.
295 break;
296
297 case angle::FormatID::ASTC_4x4_SRGB_BLOCK:
298 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;
299 actualImageFormatID = angle::FormatID::ASTC_4x4_SRGB_BLOCK;
300 vkImageFormat = VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
301 imageInitializerFunction = nullptr;
302 actualBufferFormatID = angle::FormatID::ASTC_4x4_SRGB_BLOCK;
303 vkBufferFormat = VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
304 vkBufferFormatIsPacked = false;
305 vertexLoadFunction = nullptr;
306 vertexLoadRequiresConversion = false;
307 break;
308
309 case angle::FormatID::ASTC_4x4_UNORM_BLOCK:
310 internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR;
311 actualImageFormatID = angle::FormatID::ASTC_4x4_UNORM_BLOCK;
312 vkImageFormat = VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
313 imageInitializerFunction = nullptr;
314 actualBufferFormatID = angle::FormatID::ASTC_4x4_UNORM_BLOCK;
315 vkBufferFormat = VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
316 vkBufferFormatIsPacked = false;
317 vertexLoadFunction = nullptr;
318 vertexLoadRequiresConversion = false;
319 break;
320
321 case angle::FormatID::ASTC_4x4x3_UNORM_BLOCK:
322 // This format is not implemented in Vulkan.
323 break;
324
325 case angle::FormatID::ASTC_4x4x3_UNORM_SRGB_BLOCK:
326 // This format is not implemented in Vulkan.
327 break;
328
329 case angle::FormatID::ASTC_4x4x4_UNORM_BLOCK:
330 // This format is not implemented in Vulkan.
331 break;
332
333 case angle::FormatID::ASTC_4x4x4_UNORM_SRGB_BLOCK:
334 // This format is not implemented in Vulkan.
335 break;
336
337 case angle::FormatID::ASTC_5x4_SRGB_BLOCK:
338 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;
339 actualImageFormatID = angle::FormatID::ASTC_5x4_SRGB_BLOCK;
340 vkImageFormat = VK_FORMAT_ASTC_5x4_SRGB_BLOCK;
341 imageInitializerFunction = nullptr;
342 actualBufferFormatID = angle::FormatID::ASTC_5x4_SRGB_BLOCK;
343 vkBufferFormat = VK_FORMAT_ASTC_5x4_SRGB_BLOCK;
344 vkBufferFormatIsPacked = false;
345 vertexLoadFunction = nullptr;
346 vertexLoadRequiresConversion = false;
347 break;
348
349 case angle::FormatID::ASTC_5x4_UNORM_BLOCK:
350 internalFormat = GL_COMPRESSED_RGBA_ASTC_5x4_KHR;
351 actualImageFormatID = angle::FormatID::ASTC_5x4_UNORM_BLOCK;
352 vkImageFormat = VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
353 imageInitializerFunction = nullptr;
354 actualBufferFormatID = angle::FormatID::ASTC_5x4_UNORM_BLOCK;
355 vkBufferFormat = VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
356 vkBufferFormatIsPacked = false;
357 vertexLoadFunction = nullptr;
358 vertexLoadRequiresConversion = false;
359 break;
360
361 case angle::FormatID::ASTC_5x4x4_UNORM_BLOCK:
362 // This format is not implemented in Vulkan.
363 break;
364
365 case angle::FormatID::ASTC_5x4x4_UNORM_SRGB_BLOCK:
366 // This format is not implemented in Vulkan.
367 break;
368
369 case angle::FormatID::ASTC_5x5_SRGB_BLOCK:
370 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;
371 actualImageFormatID = angle::FormatID::ASTC_5x5_SRGB_BLOCK;
372 vkImageFormat = VK_FORMAT_ASTC_5x5_SRGB_BLOCK;
373 imageInitializerFunction = nullptr;
374 actualBufferFormatID = angle::FormatID::ASTC_5x5_SRGB_BLOCK;
375 vkBufferFormat = VK_FORMAT_ASTC_5x5_SRGB_BLOCK;
376 vkBufferFormatIsPacked = false;
377 vertexLoadFunction = nullptr;
378 vertexLoadRequiresConversion = false;
379 break;
380
381 case angle::FormatID::ASTC_5x5_UNORM_BLOCK:
382 internalFormat = GL_COMPRESSED_RGBA_ASTC_5x5_KHR;
383 actualImageFormatID = angle::FormatID::ASTC_5x5_UNORM_BLOCK;
384 vkImageFormat = VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
385 imageInitializerFunction = nullptr;
386 actualBufferFormatID = angle::FormatID::ASTC_5x5_UNORM_BLOCK;
387 vkBufferFormat = VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
388 vkBufferFormatIsPacked = false;
389 vertexLoadFunction = nullptr;
390 vertexLoadRequiresConversion = false;
391 break;
392
393 case angle::FormatID::ASTC_5x5x4_UNORM_BLOCK:
394 // This format is not implemented in Vulkan.
395 break;
396
397 case angle::FormatID::ASTC_5x5x4_UNORM_SRGB_BLOCK:
398 // This format is not implemented in Vulkan.
399 break;
400
401 case angle::FormatID::ASTC_5x5x5_UNORM_BLOCK:
402 // This format is not implemented in Vulkan.
403 break;
404
405 case angle::FormatID::ASTC_5x5x5_UNORM_SRGB_BLOCK:
406 // This format is not implemented in Vulkan.
407 break;
408
409 case angle::FormatID::ASTC_6x5_SRGB_BLOCK:
410 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;
411 actualImageFormatID = angle::FormatID::ASTC_6x5_SRGB_BLOCK;
412 vkImageFormat = VK_FORMAT_ASTC_6x5_SRGB_BLOCK;
413 imageInitializerFunction = nullptr;
414 actualBufferFormatID = angle::FormatID::ASTC_6x5_SRGB_BLOCK;
415 vkBufferFormat = VK_FORMAT_ASTC_6x5_SRGB_BLOCK;
416 vkBufferFormatIsPacked = false;
417 vertexLoadFunction = nullptr;
418 vertexLoadRequiresConversion = false;
419 break;
420
421 case angle::FormatID::ASTC_6x5_UNORM_BLOCK:
422 internalFormat = GL_COMPRESSED_RGBA_ASTC_6x5_KHR;
423 actualImageFormatID = angle::FormatID::ASTC_6x5_UNORM_BLOCK;
424 vkImageFormat = VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
425 imageInitializerFunction = nullptr;
426 actualBufferFormatID = angle::FormatID::ASTC_6x5_UNORM_BLOCK;
427 vkBufferFormat = VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
428 vkBufferFormatIsPacked = false;
429 vertexLoadFunction = nullptr;
430 vertexLoadRequiresConversion = false;
431 break;
432
433 case angle::FormatID::ASTC_6x5x5_UNORM_BLOCK:
434 // This format is not implemented in Vulkan.
435 break;
436
437 case angle::FormatID::ASTC_6x5x5_UNORM_SRGB_BLOCK:
438 // This format is not implemented in Vulkan.
439 break;
440
441 case angle::FormatID::ASTC_6x6_SRGB_BLOCK:
442 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;
443 actualImageFormatID = angle::FormatID::ASTC_6x6_SRGB_BLOCK;
444 vkImageFormat = VK_FORMAT_ASTC_6x6_SRGB_BLOCK;
445 imageInitializerFunction = nullptr;
446 actualBufferFormatID = angle::FormatID::ASTC_6x6_SRGB_BLOCK;
447 vkBufferFormat = VK_FORMAT_ASTC_6x6_SRGB_BLOCK;
448 vkBufferFormatIsPacked = false;
449 vertexLoadFunction = nullptr;
450 vertexLoadRequiresConversion = false;
451 break;
452
453 case angle::FormatID::ASTC_6x6_UNORM_BLOCK:
454 internalFormat = GL_COMPRESSED_RGBA_ASTC_6x6_KHR;
455 actualImageFormatID = angle::FormatID::ASTC_6x6_UNORM_BLOCK;
456 vkImageFormat = VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
457 imageInitializerFunction = nullptr;
458 actualBufferFormatID = angle::FormatID::ASTC_6x6_UNORM_BLOCK;
459 vkBufferFormat = VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
460 vkBufferFormatIsPacked = false;
461 vertexLoadFunction = nullptr;
462 vertexLoadRequiresConversion = false;
463 break;
464
465 case angle::FormatID::ASTC_6x6x5_UNORM_BLOCK:
466 // This format is not implemented in Vulkan.
467 break;
468
469 case angle::FormatID::ASTC_6x6x5_UNORM_SRGB_BLOCK:
470 // This format is not implemented in Vulkan.
471 break;
472
473 case angle::FormatID::ASTC_6x6x6_UNORM_BLOCK:
474 // This format is not implemented in Vulkan.
475 break;
476
477 case angle::FormatID::ASTC_6x6x6_UNORM_SRGB_BLOCK:
478 // This format is not implemented in Vulkan.
479 break;
480
481 case angle::FormatID::ASTC_8x5_SRGB_BLOCK:
482 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;
483 actualImageFormatID = angle::FormatID::ASTC_8x5_SRGB_BLOCK;
484 vkImageFormat = VK_FORMAT_ASTC_8x5_SRGB_BLOCK;
485 imageInitializerFunction = nullptr;
486 actualBufferFormatID = angle::FormatID::ASTC_8x5_SRGB_BLOCK;
487 vkBufferFormat = VK_FORMAT_ASTC_8x5_SRGB_BLOCK;
488 vkBufferFormatIsPacked = false;
489 vertexLoadFunction = nullptr;
490 vertexLoadRequiresConversion = false;
491 break;
492
493 case angle::FormatID::ASTC_8x5_UNORM_BLOCK:
494 internalFormat = GL_COMPRESSED_RGBA_ASTC_8x5_KHR;
495 actualImageFormatID = angle::FormatID::ASTC_8x5_UNORM_BLOCK;
496 vkImageFormat = VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
497 imageInitializerFunction = nullptr;
498 actualBufferFormatID = angle::FormatID::ASTC_8x5_UNORM_BLOCK;
499 vkBufferFormat = VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
500 vkBufferFormatIsPacked = false;
501 vertexLoadFunction = nullptr;
502 vertexLoadRequiresConversion = false;
503 break;
504
505 case angle::FormatID::ASTC_8x6_SRGB_BLOCK:
506 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;
507 actualImageFormatID = angle::FormatID::ASTC_8x6_SRGB_BLOCK;
508 vkImageFormat = VK_FORMAT_ASTC_8x6_SRGB_BLOCK;
509 imageInitializerFunction = nullptr;
510 actualBufferFormatID = angle::FormatID::ASTC_8x6_SRGB_BLOCK;
511 vkBufferFormat = VK_FORMAT_ASTC_8x6_SRGB_BLOCK;
512 vkBufferFormatIsPacked = false;
513 vertexLoadFunction = nullptr;
514 vertexLoadRequiresConversion = false;
515 break;
516
517 case angle::FormatID::ASTC_8x6_UNORM_BLOCK:
518 internalFormat = GL_COMPRESSED_RGBA_ASTC_8x6_KHR;
519 actualImageFormatID = angle::FormatID::ASTC_8x6_UNORM_BLOCK;
520 vkImageFormat = VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
521 imageInitializerFunction = nullptr;
522 actualBufferFormatID = angle::FormatID::ASTC_8x6_UNORM_BLOCK;
523 vkBufferFormat = VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
524 vkBufferFormatIsPacked = false;
525 vertexLoadFunction = nullptr;
526 vertexLoadRequiresConversion = false;
527 break;
528
529 case angle::FormatID::ASTC_8x8_SRGB_BLOCK:
530 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;
531 actualImageFormatID = angle::FormatID::ASTC_8x8_SRGB_BLOCK;
532 vkImageFormat = VK_FORMAT_ASTC_8x8_SRGB_BLOCK;
533 imageInitializerFunction = nullptr;
534 actualBufferFormatID = angle::FormatID::ASTC_8x8_SRGB_BLOCK;
535 vkBufferFormat = VK_FORMAT_ASTC_8x8_SRGB_BLOCK;
536 vkBufferFormatIsPacked = false;
537 vertexLoadFunction = nullptr;
538 vertexLoadRequiresConversion = false;
539 break;
540
541 case angle::FormatID::ASTC_8x8_UNORM_BLOCK:
542 internalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR;
543 actualImageFormatID = angle::FormatID::ASTC_8x8_UNORM_BLOCK;
544 vkImageFormat = VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
545 imageInitializerFunction = nullptr;
546 actualBufferFormatID = angle::FormatID::ASTC_8x8_UNORM_BLOCK;
547 vkBufferFormat = VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
548 vkBufferFormatIsPacked = false;
549 vertexLoadFunction = nullptr;
550 vertexLoadRequiresConversion = false;
551 break;
552
553 case angle::FormatID::B4G4R4A4_UNORM:
554 internalFormat = GL_BGRA4_ANGLEX;
555 actualImageFormatID = angle::FormatID::B4G4R4A4_UNORM;
556 vkImageFormat = VK_FORMAT_B4G4R4A4_UNORM_PACK16;
557 imageInitializerFunction = nullptr;
558 actualBufferFormatID = angle::FormatID::B4G4R4A4_UNORM;
559 vkBufferFormat = VK_FORMAT_B4G4R4A4_UNORM_PACK16;
560 vkBufferFormatIsPacked = true;
561 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
562 vertexLoadRequiresConversion = false;
563 break;
564
565 case angle::FormatID::B5G5R5A1_UNORM:
566 internalFormat = GL_BGR5_A1_ANGLEX;
567 actualImageFormatID = angle::FormatID::B5G5R5A1_UNORM;
568 vkImageFormat = VK_FORMAT_B5G5R5A1_UNORM_PACK16;
569 imageInitializerFunction = nullptr;
570 actualBufferFormatID = angle::FormatID::B5G5R5A1_UNORM;
571 vkBufferFormat = VK_FORMAT_B5G5R5A1_UNORM_PACK16;
572 vkBufferFormatIsPacked = true;
573 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
574 vertexLoadRequiresConversion = false;
575 break;
576
577 case angle::FormatID::B5G6R5_UNORM:
578 internalFormat = GL_BGR565_ANGLEX;
579 actualImageFormatID = angle::FormatID::B5G6R5_UNORM;
580 vkImageFormat = VK_FORMAT_B5G6R5_UNORM_PACK16;
581 imageInitializerFunction = nullptr;
582 actualBufferFormatID = angle::FormatID::B5G6R5_UNORM;
583 vkBufferFormat = VK_FORMAT_B5G6R5_UNORM_PACK16;
584 vkBufferFormatIsPacked = true;
585 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
586 vertexLoadRequiresConversion = false;
587 break;
588
589 case angle::FormatID::B8G8R8A8_TYPELESS:
590 // This format is not implemented in Vulkan.
591 break;
592
593 case angle::FormatID::B8G8R8A8_TYPELESS_SRGB:
594 // This format is not implemented in Vulkan.
595 break;
596
597 case angle::FormatID::B8G8R8A8_UNORM:
598 internalFormat = GL_BGRA8_EXT;
599 actualImageFormatID = angle::FormatID::B8G8R8A8_UNORM;
600 vkImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
601 imageInitializerFunction = nullptr;
602 actualBufferFormatID = angle::FormatID::B8G8R8A8_UNORM;
603 vkBufferFormat = VK_FORMAT_B8G8R8A8_UNORM;
604 vkBufferFormatIsPacked = false;
605 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
606 vertexLoadRequiresConversion = false;
607 break;
608
609 case angle::FormatID::B8G8R8A8_UNORM_SRGB:
610 internalFormat = GL_BGRA8_SRGB_ANGLEX;
611 actualImageFormatID = angle::FormatID::B8G8R8A8_UNORM_SRGB;
612 vkImageFormat = VK_FORMAT_B8G8R8A8_SRGB;
613 imageInitializerFunction = nullptr;
614 actualBufferFormatID = angle::FormatID::B8G8R8A8_UNORM_SRGB;
615 vkBufferFormat = VK_FORMAT_B8G8R8A8_SRGB;
616 vkBufferFormatIsPacked = false;
617 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
618 vertexLoadRequiresConversion = false;
619 break;
620
621 case angle::FormatID::B8G8R8X8_UNORM:
622 internalFormat = GL_BGRX8_ANGLEX;
623 actualImageFormatID = angle::FormatID::B8G8R8A8_UNORM;
624 vkImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
625 imageInitializerFunction = nullptr;
626 actualBufferFormatID = angle::FormatID::NONE;
627 vkBufferFormat = VK_FORMAT_UNDEFINED;
628 vkBufferFormatIsPacked = false;
629 vertexLoadFunction = nullptr;
630 vertexLoadRequiresConversion = true;
631 break;
632
633 case angle::FormatID::BC1_RGBA_UNORM_BLOCK:
634 internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
635 actualImageFormatID = angle::FormatID::BC1_RGBA_UNORM_BLOCK;
636 vkImageFormat = VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
637 imageInitializerFunction = nullptr;
638 actualBufferFormatID = angle::FormatID::BC1_RGBA_UNORM_BLOCK;
639 vkBufferFormat = VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
640 vkBufferFormatIsPacked = false;
641 vertexLoadFunction = nullptr;
642 vertexLoadRequiresConversion = false;
643 break;
644
645 case angle::FormatID::BC1_RGBA_UNORM_SRGB_BLOCK:
646 internalFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
647 actualImageFormatID = angle::FormatID::BC1_RGBA_UNORM_SRGB_BLOCK;
648 vkImageFormat = VK_FORMAT_BC1_RGBA_SRGB_BLOCK;
649 imageInitializerFunction = nullptr;
650 actualBufferFormatID = angle::FormatID::BC1_RGBA_UNORM_SRGB_BLOCK;
651 vkBufferFormat = VK_FORMAT_BC1_RGBA_SRGB_BLOCK;
652 vkBufferFormatIsPacked = false;
653 vertexLoadFunction = nullptr;
654 vertexLoadRequiresConversion = false;
655 break;
656
657 case angle::FormatID::BC1_RGB_UNORM_BLOCK:
658 internalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
659 actualImageFormatID = angle::FormatID::BC1_RGB_UNORM_BLOCK;
660 vkImageFormat = VK_FORMAT_BC1_RGB_UNORM_BLOCK;
661 imageInitializerFunction = nullptr;
662 actualBufferFormatID = angle::FormatID::BC1_RGB_UNORM_BLOCK;
663 vkBufferFormat = VK_FORMAT_BC1_RGB_UNORM_BLOCK;
664 vkBufferFormatIsPacked = false;
665 vertexLoadFunction = nullptr;
666 vertexLoadRequiresConversion = false;
667 break;
668
669 case angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK:
670 internalFormat = GL_COMPRESSED_SRGB_S3TC_DXT1_EXT;
671 actualImageFormatID = angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK;
672 vkImageFormat = VK_FORMAT_BC1_RGB_SRGB_BLOCK;
673 imageInitializerFunction = nullptr;
674 actualBufferFormatID = angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK;
675 vkBufferFormat = VK_FORMAT_BC1_RGB_SRGB_BLOCK;
676 vkBufferFormatIsPacked = false;
677 vertexLoadFunction = nullptr;
678 vertexLoadRequiresConversion = false;
679 break;
680
681 case angle::FormatID::BC2_RGBA_UNORM_BLOCK:
682 internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
683 actualImageFormatID = angle::FormatID::BC2_RGBA_UNORM_BLOCK;
684 vkImageFormat = VK_FORMAT_BC2_UNORM_BLOCK;
685 imageInitializerFunction = nullptr;
686 actualBufferFormatID = angle::FormatID::BC2_RGBA_UNORM_BLOCK;
687 vkBufferFormat = VK_FORMAT_BC2_UNORM_BLOCK;
688 vkBufferFormatIsPacked = false;
689 vertexLoadFunction = nullptr;
690 vertexLoadRequiresConversion = false;
691 break;
692
693 case angle::FormatID::BC2_RGBA_UNORM_SRGB_BLOCK:
694 internalFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
695 actualImageFormatID = angle::FormatID::BC2_RGBA_UNORM_SRGB_BLOCK;
696 vkImageFormat = VK_FORMAT_BC2_SRGB_BLOCK;
697 imageInitializerFunction = nullptr;
698 actualBufferFormatID = angle::FormatID::BC2_RGBA_UNORM_SRGB_BLOCK;
699 vkBufferFormat = VK_FORMAT_BC2_SRGB_BLOCK;
700 vkBufferFormatIsPacked = false;
701 vertexLoadFunction = nullptr;
702 vertexLoadRequiresConversion = false;
703 break;
704
705 case angle::FormatID::BC3_RGBA_UNORM_BLOCK:
706 internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
707 actualImageFormatID = angle::FormatID::BC3_RGBA_UNORM_BLOCK;
708 vkImageFormat = VK_FORMAT_BC3_UNORM_BLOCK;
709 imageInitializerFunction = nullptr;
710 actualBufferFormatID = angle::FormatID::BC3_RGBA_UNORM_BLOCK;
711 vkBufferFormat = VK_FORMAT_BC3_UNORM_BLOCK;
712 vkBufferFormatIsPacked = false;
713 vertexLoadFunction = nullptr;
714 vertexLoadRequiresConversion = false;
715 break;
716
717 case angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK:
718 internalFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
719 actualImageFormatID = angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK;
720 vkImageFormat = VK_FORMAT_BC3_SRGB_BLOCK;
721 imageInitializerFunction = nullptr;
722 actualBufferFormatID = angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK;
723 vkBufferFormat = VK_FORMAT_BC3_SRGB_BLOCK;
724 vkBufferFormatIsPacked = false;
725 vertexLoadFunction = nullptr;
726 vertexLoadRequiresConversion = false;
727 break;
728
729 case angle::FormatID::BC4_RED_SNORM_BLOCK:
730 internalFormat = GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
731 actualImageFormatID = angle::FormatID::BC4_RED_SNORM_BLOCK;
732 vkImageFormat = VK_FORMAT_BC4_SNORM_BLOCK;
733 imageInitializerFunction = nullptr;
734 actualBufferFormatID = angle::FormatID::BC4_RED_SNORM_BLOCK;
735 vkBufferFormat = VK_FORMAT_BC4_SNORM_BLOCK;
736 vkBufferFormatIsPacked = false;
737 vertexLoadFunction = nullptr;
738 vertexLoadRequiresConversion = false;
739 break;
740
741 case angle::FormatID::BC4_RED_UNORM_BLOCK:
742 internalFormat = GL_COMPRESSED_RED_RGTC1_EXT;
743 actualImageFormatID = angle::FormatID::BC4_RED_UNORM_BLOCK;
744 vkImageFormat = VK_FORMAT_BC4_UNORM_BLOCK;
745 imageInitializerFunction = nullptr;
746 actualBufferFormatID = angle::FormatID::BC4_RED_UNORM_BLOCK;
747 vkBufferFormat = VK_FORMAT_BC4_UNORM_BLOCK;
748 vkBufferFormatIsPacked = false;
749 vertexLoadFunction = nullptr;
750 vertexLoadRequiresConversion = false;
751 break;
752
753 case angle::FormatID::BC5_RG_SNORM_BLOCK:
754 internalFormat = GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
755 actualImageFormatID = angle::FormatID::BC5_RG_SNORM_BLOCK;
756 vkImageFormat = VK_FORMAT_BC5_SNORM_BLOCK;
757 imageInitializerFunction = nullptr;
758 actualBufferFormatID = angle::FormatID::BC5_RG_SNORM_BLOCK;
759 vkBufferFormat = VK_FORMAT_BC5_SNORM_BLOCK;
760 vkBufferFormatIsPacked = false;
761 vertexLoadFunction = nullptr;
762 vertexLoadRequiresConversion = false;
763 break;
764
765 case angle::FormatID::BC5_RG_UNORM_BLOCK:
766 internalFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
767 actualImageFormatID = angle::FormatID::BC5_RG_UNORM_BLOCK;
768 vkImageFormat = VK_FORMAT_BC5_UNORM_BLOCK;
769 imageInitializerFunction = nullptr;
770 actualBufferFormatID = angle::FormatID::BC5_RG_UNORM_BLOCK;
771 vkBufferFormat = VK_FORMAT_BC5_UNORM_BLOCK;
772 vkBufferFormatIsPacked = false;
773 vertexLoadFunction = nullptr;
774 vertexLoadRequiresConversion = false;
775 break;
776
777 case angle::FormatID::BPTC_RGBA_UNORM_BLOCK:
778 internalFormat = GL_COMPRESSED_RGBA_BPTC_UNORM_EXT;
779 actualImageFormatID = angle::FormatID::BPTC_RGBA_UNORM_BLOCK;
780 vkImageFormat = VK_FORMAT_BC7_UNORM_BLOCK;
781 imageInitializerFunction = nullptr;
782 actualBufferFormatID = angle::FormatID::BPTC_RGBA_UNORM_BLOCK;
783 vkBufferFormat = VK_FORMAT_BC7_UNORM_BLOCK;
784 vkBufferFormatIsPacked = false;
785 vertexLoadFunction = nullptr;
786 vertexLoadRequiresConversion = false;
787 break;
788
789 case angle::FormatID::BPTC_RGB_SIGNED_FLOAT_BLOCK:
790 internalFormat = GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;
791 actualImageFormatID = angle::FormatID::BPTC_RGB_SIGNED_FLOAT_BLOCK;
792 vkImageFormat = VK_FORMAT_BC6H_SFLOAT_BLOCK;
793 imageInitializerFunction = nullptr;
794 actualBufferFormatID = angle::FormatID::BPTC_RGB_SIGNED_FLOAT_BLOCK;
795 vkBufferFormat = VK_FORMAT_BC6H_SFLOAT_BLOCK;
796 vkBufferFormatIsPacked = false;
797 vertexLoadFunction = nullptr;
798 vertexLoadRequiresConversion = false;
799 break;
800
801 case angle::FormatID::BPTC_RGB_UNSIGNED_FLOAT_BLOCK:
802 internalFormat = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;
803 actualImageFormatID = angle::FormatID::BPTC_RGB_UNSIGNED_FLOAT_BLOCK;
804 vkImageFormat = VK_FORMAT_BC6H_UFLOAT_BLOCK;
805 imageInitializerFunction = nullptr;
806 actualBufferFormatID = angle::FormatID::BPTC_RGB_UNSIGNED_FLOAT_BLOCK;
807 vkBufferFormat = VK_FORMAT_BC6H_UFLOAT_BLOCK;
808 vkBufferFormatIsPacked = false;
809 vertexLoadFunction = nullptr;
810 vertexLoadRequiresConversion = false;
811 break;
812
813 case angle::FormatID::BPTC_SRGB_ALPHA_UNORM_BLOCK:
814 internalFormat = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT;
815 actualImageFormatID = angle::FormatID::BPTC_SRGB_ALPHA_UNORM_BLOCK;
816 vkImageFormat = VK_FORMAT_BC7_SRGB_BLOCK;
817 imageInitializerFunction = nullptr;
818 actualBufferFormatID = angle::FormatID::BPTC_SRGB_ALPHA_UNORM_BLOCK;
819 vkBufferFormat = VK_FORMAT_BC7_SRGB_BLOCK;
820 vkBufferFormatIsPacked = false;
821 vertexLoadFunction = nullptr;
822 vertexLoadRequiresConversion = false;
823 break;
824
825 case angle::FormatID::D16_UNORM:
826 internalFormat = GL_DEPTH_COMPONENT16;
827 actualImageFormatID = angle::FormatID::D16_UNORM;
828 vkImageFormat = VK_FORMAT_D16_UNORM;
829 imageInitializerFunction = nullptr;
830 actualBufferFormatID = angle::FormatID::D16_UNORM;
831 vkBufferFormat = VK_FORMAT_D16_UNORM;
832 vkBufferFormatIsPacked = false;
833 vertexLoadFunction = nullptr;
834 vertexLoadRequiresConversion = false;
835 break;
836
837 case angle::FormatID::D24_UNORM_S8_UINT:
838 internalFormat = GL_DEPTH24_STENCIL8;
839 {
840 static constexpr ImageFormatInitInfo kInfo[] = {
841 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr},
842 {angle::FormatID::D32_FLOAT_S8X24_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, nullptr},
843 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr}};
844 initImageFallback(renderer, kInfo, ArraySize(kInfo));
845 }
846 actualBufferFormatID = angle::FormatID::D24_UNORM_S8_UINT;
847 vkBufferFormat = VK_FORMAT_D24_UNORM_S8_UINT;
848 vkBufferFormatIsPacked = false;
849 vertexLoadFunction = nullptr;
850 vertexLoadRequiresConversion = false;
851 break;
852
853 case angle::FormatID::D24_UNORM_X8_UINT:
854 internalFormat = GL_DEPTH_COMPONENT24;
855 {
856 static constexpr ImageFormatInitInfo kInfo[] = {
857 {angle::FormatID::D24_UNORM_X8_UINT, VK_FORMAT_X8_D24_UNORM_PACK32, nullptr},
858 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr},
859 {angle::FormatID::D32_FLOAT_S8X24_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, nullptr}};
860 initImageFallback(renderer, kInfo, ArraySize(kInfo));
861 }
862 actualBufferFormatID = angle::FormatID::D24_UNORM_X8_UINT;
863 vkBufferFormat = VK_FORMAT_X8_D24_UNORM_PACK32;
864 vkBufferFormatIsPacked = true;
865 vertexLoadFunction = CopyNativeVertexData<GLuint, 1, 1, 0>;
866 vertexLoadRequiresConversion = false;
867 break;
868
869 case angle::FormatID::D32_FLOAT:
870 internalFormat = GL_DEPTH_COMPONENT32F;
871 actualImageFormatID = angle::FormatID::D32_FLOAT;
872 vkImageFormat = VK_FORMAT_D32_SFLOAT;
873 imageInitializerFunction = nullptr;
874 actualBufferFormatID = angle::FormatID::D32_FLOAT;
875 vkBufferFormat = VK_FORMAT_D32_SFLOAT;
876 vkBufferFormatIsPacked = false;
877 vertexLoadFunction = CopyNativeVertexData<GLfloat, 1, 1, 0>;
878 vertexLoadRequiresConversion = false;
879 break;
880
881 case angle::FormatID::D32_FLOAT_S8X24_UINT:
882 internalFormat = GL_DEPTH32F_STENCIL8;
883 {
884 static constexpr ImageFormatInitInfo kInfo[] = {
885 {angle::FormatID::D32_FLOAT_S8X24_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, nullptr},
886 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr},
887 {angle::FormatID::D32_FLOAT_S8X24_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, nullptr}};
888 initImageFallback(renderer, kInfo, ArraySize(kInfo));
889 }
890 actualBufferFormatID = angle::FormatID::D32_FLOAT_S8X24_UINT;
891 vkBufferFormat = VK_FORMAT_D32_SFLOAT_S8_UINT;
892 vkBufferFormatIsPacked = false;
893 vertexLoadFunction = CopyNativeVertexData<GLfloat, 3, 3, 0>;
894 vertexLoadRequiresConversion = false;
895 break;
896
897 case angle::FormatID::D32_UNORM:
898 internalFormat = GL_DEPTH_COMPONENT32_OES;
899 {
900 static constexpr ImageFormatInitInfo kInfo[] = {
901 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr},
902 {angle::FormatID::D32_FLOAT, VK_FORMAT_D32_SFLOAT, nullptr}};
903 initImageFallback(renderer, kInfo, ArraySize(kInfo));
904 }
905 actualBufferFormatID = angle::FormatID::NONE;
906 vkBufferFormat = VK_FORMAT_UNDEFINED;
907 vkBufferFormatIsPacked = false;
908 vertexLoadFunction = nullptr;
909 vertexLoadRequiresConversion = true;
910 break;
911
912 case angle::FormatID::EAC_R11G11_SNORM_BLOCK:
913 internalFormat = GL_COMPRESSED_SIGNED_RG11_EAC;
914 {
915 static constexpr ImageFormatInitInfo kInfo[] = {
916 {angle::FormatID::EAC_R11G11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
917 nullptr},
918 {angle::FormatID::R16G16_SNORM, VK_FORMAT_R16G16_SNORM, nullptr},
919 {angle::FormatID::R16G16_FLOAT, VK_FORMAT_R16G16_SFLOAT, nullptr}};
920 initImageFallback(renderer, kInfo, ArraySize(kInfo));
921 }
922 actualBufferFormatID = angle::FormatID::EAC_R11G11_SNORM_BLOCK;
923 vkBufferFormat = VK_FORMAT_EAC_R11G11_SNORM_BLOCK;
924 vkBufferFormatIsPacked = false;
925 vertexLoadFunction = nullptr;
926 vertexLoadRequiresConversion = false;
927 break;
928
929 case angle::FormatID::EAC_R11G11_UNORM_BLOCK:
930 internalFormat = GL_COMPRESSED_RG11_EAC;
931 {
932 static constexpr ImageFormatInitInfo kInfo[] = {
933 {angle::FormatID::EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
934 nullptr},
935 {angle::FormatID::R16G16_UNORM, VK_FORMAT_R16G16_UNORM, nullptr},
936 {angle::FormatID::R16G16_FLOAT, VK_FORMAT_R16G16_SFLOAT, nullptr}};
937 initImageFallback(renderer, kInfo, ArraySize(kInfo));
938 }
939 actualBufferFormatID = angle::FormatID::EAC_R11G11_UNORM_BLOCK;
940 vkBufferFormat = VK_FORMAT_EAC_R11G11_UNORM_BLOCK;
941 vkBufferFormatIsPacked = false;
942 vertexLoadFunction = nullptr;
943 vertexLoadRequiresConversion = false;
944 break;
945
946 case angle::FormatID::EAC_R11_SNORM_BLOCK:
947 internalFormat = GL_COMPRESSED_SIGNED_R11_EAC;
948 {
949 static constexpr ImageFormatInitInfo kInfo[] = {
950 {angle::FormatID::EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, nullptr},
951 {angle::FormatID::R16_SNORM, VK_FORMAT_R16_SNORM, nullptr},
952 {angle::FormatID::R16_FLOAT, VK_FORMAT_R16_SFLOAT, nullptr}};
953 initImageFallback(renderer, kInfo, ArraySize(kInfo));
954 }
955 actualBufferFormatID = angle::FormatID::EAC_R11_SNORM_BLOCK;
956 vkBufferFormat = VK_FORMAT_EAC_R11_SNORM_BLOCK;
957 vkBufferFormatIsPacked = false;
958 vertexLoadFunction = nullptr;
959 vertexLoadRequiresConversion = false;
960 break;
961
962 case angle::FormatID::EAC_R11_UNORM_BLOCK:
963 internalFormat = GL_COMPRESSED_R11_EAC;
964 {
965 static constexpr ImageFormatInitInfo kInfo[] = {
966 {angle::FormatID::EAC_R11_UNORM_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, nullptr},
967 {angle::FormatID::R16_UNORM, VK_FORMAT_R16_UNORM, nullptr},
968 {angle::FormatID::R16_FLOAT, VK_FORMAT_R16_SFLOAT, nullptr}};
969 initImageFallback(renderer, kInfo, ArraySize(kInfo));
970 }
971 actualBufferFormatID = angle::FormatID::EAC_R11_UNORM_BLOCK;
972 vkBufferFormat = VK_FORMAT_EAC_R11_UNORM_BLOCK;
973 vkBufferFormatIsPacked = false;
974 vertexLoadFunction = nullptr;
975 vertexLoadRequiresConversion = false;
976 break;
977
978 case angle::FormatID::ETC1_LOSSY_DECODE_R8G8B8_UNORM_BLOCK:
979 // This format is not implemented in Vulkan.
980 break;
981
982 case angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK:
983 internalFormat = GL_ETC1_RGB8_OES;
984 {
985 static constexpr ImageFormatInitInfo kInfo[] = {
986 {angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
987 nullptr},
988 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM,
989 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>}};
990 initImageFallback(renderer, kInfo, ArraySize(kInfo));
991 }
992 actualBufferFormatID = angle::FormatID::NONE;
993 vkBufferFormat = VK_FORMAT_UNDEFINED;
994 vkBufferFormatIsPacked = false;
995 vertexLoadFunction = nullptr;
996 vertexLoadRequiresConversion = true;
997 break;
998
999 case angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK:
1000 internalFormat = GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;
1001 {
1002 static constexpr ImageFormatInitInfo kInfo[] = {
1003 {angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
1004 nullptr},
1005 {angle::FormatID::R8G8B8A8_UNORM_SRGB, VK_FORMAT_R8G8B8A8_SRGB, nullptr}};
1006 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1007 }
1008 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK;
1009 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK;
1010 vkBufferFormatIsPacked = false;
1011 vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>;
1012 vertexLoadRequiresConversion = false;
1013 break;
1014
1015 case angle::FormatID::ETC2_R8G8B8A1_UNORM_BLOCK:
1016 internalFormat = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;
1017 {
1018 static constexpr ImageFormatInitInfo kInfo[] = {
1019 {angle::FormatID::ETC2_R8G8B8A1_UNORM_BLOCK,
1020 VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
1021 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>},
1022 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM,
1023 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>}};
1024 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1025 }
1026 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8A1_UNORM_BLOCK;
1027 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK;
1028 vkBufferFormatIsPacked = false;
1029 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
1030 vertexLoadRequiresConversion = false;
1031 break;
1032
1033 case angle::FormatID::ETC2_R8G8B8A8_SRGB_BLOCK:
1034 internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;
1035 {
1036 static constexpr ImageFormatInitInfo kInfo[] = {
1037 {angle::FormatID::ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
1038 nullptr},
1039 {angle::FormatID::R8G8B8A8_UNORM_SRGB, VK_FORMAT_R8G8B8A8_SRGB, nullptr}};
1040 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1041 }
1042 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8A8_SRGB_BLOCK;
1043 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK;
1044 vkBufferFormatIsPacked = false;
1045 vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>;
1046 vertexLoadRequiresConversion = false;
1047 break;
1048
1049 case angle::FormatID::ETC2_R8G8B8A8_UNORM_BLOCK:
1050 internalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC;
1051 {
1052 static constexpr ImageFormatInitInfo kInfo[] = {
1053 {angle::FormatID::ETC2_R8G8B8A8_UNORM_BLOCK,
1054 VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, nullptr},
1055 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, nullptr}};
1056 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1057 }
1058 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8A8_UNORM_BLOCK;
1059 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK;
1060 vkBufferFormatIsPacked = false;
1061 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
1062 vertexLoadRequiresConversion = false;
1063 break;
1064
1065 case angle::FormatID::ETC2_R8G8B8_SRGB_BLOCK:
1066 internalFormat = GL_COMPRESSED_SRGB8_ETC2;
1067 {
1068 static constexpr ImageFormatInitInfo kInfo[] = {
1069 {angle::FormatID::ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
1070 nullptr},
1071 {angle::FormatID::R8G8B8A8_UNORM_SRGB, VK_FORMAT_R8G8B8A8_SRGB,
1072 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>}};
1073 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1074 }
1075 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8_SRGB_BLOCK;
1076 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK;
1077 vkBufferFormatIsPacked = false;
1078 vertexLoadFunction = CopyNativeVertexData<GLbyte, 3, 3, 0>;
1079 vertexLoadRequiresConversion = false;
1080 break;
1081
1082 case angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK:
1083 internalFormat = GL_COMPRESSED_RGB8_ETC2;
1084 {
1085 static constexpr ImageFormatInitInfo kInfo[] = {
1086 {angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
1087 nullptr},
1088 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM,
1089 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>}};
1090 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1091 }
1092 actualBufferFormatID = angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK;
1093 vkBufferFormat = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;
1094 vkBufferFormatIsPacked = false;
1095 vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>;
1096 vertexLoadRequiresConversion = false;
1097 break;
1098
1099 case angle::FormatID::L16A16_FLOAT:
1100 internalFormat = GL_LUMINANCE_ALPHA16F_EXT;
1101 actualImageFormatID = angle::FormatID::R16G16_FLOAT;
1102 vkImageFormat = VK_FORMAT_R16G16_SFLOAT;
1103 imageInitializerFunction = nullptr;
1104
1105 break;
1106
1107 case angle::FormatID::L16_FLOAT:
1108 internalFormat = GL_LUMINANCE16F_EXT;
1109 actualImageFormatID = angle::FormatID::R16_FLOAT;
1110 vkImageFormat = VK_FORMAT_R16_SFLOAT;
1111 imageInitializerFunction = nullptr;
1112
1113 break;
1114
1115 case angle::FormatID::L32A32_FLOAT:
1116 internalFormat = GL_LUMINANCE_ALPHA32F_EXT;
1117 actualImageFormatID = angle::FormatID::R32G32_FLOAT;
1118 vkImageFormat = VK_FORMAT_R32G32_SFLOAT;
1119 imageInitializerFunction = nullptr;
1120
1121 break;
1122
1123 case angle::FormatID::L32_FLOAT:
1124 internalFormat = GL_LUMINANCE32F_EXT;
1125 actualImageFormatID = angle::FormatID::R32_FLOAT;
1126 vkImageFormat = VK_FORMAT_R32_SFLOAT;
1127 imageInitializerFunction = nullptr;
1128
1129 break;
1130
1131 case angle::FormatID::L8A8_UNORM:
1132 internalFormat = GL_LUMINANCE8_ALPHA8_EXT;
1133 actualImageFormatID = angle::FormatID::R8G8_UNORM;
1134 vkImageFormat = VK_FORMAT_R8G8_UNORM;
1135 imageInitializerFunction = nullptr;
1136
1137 break;
1138
1139 case angle::FormatID::L8_UNORM:
1140 internalFormat = GL_LUMINANCE8_EXT;
1141 actualImageFormatID = angle::FormatID::R8_UNORM;
1142 vkImageFormat = VK_FORMAT_R8_UNORM;
1143 imageInitializerFunction = nullptr;
1144
1145 break;
1146
1147 case angle::FormatID::NONE:
1148 // This format is not implemented in Vulkan.
1149 break;
1150
1151 case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK:
1152 // This format is not implemented in Vulkan.
1153 break;
1154
1155 case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK:
1156 // This format is not implemented in Vulkan.
1157 break;
1158
1159 case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK:
1160 // This format is not implemented in Vulkan.
1161 break;
1162
1163 case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK:
1164 // This format is not implemented in Vulkan.
1165 break;
1166
1167 case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK:
1168 // This format is not implemented in Vulkan.
1169 break;
1170
1171 case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK:
1172 // This format is not implemented in Vulkan.
1173 break;
1174
1175 case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK:
1176 // This format is not implemented in Vulkan.
1177 break;
1178
1179 case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK:
1180 // This format is not implemented in Vulkan.
1181 break;
1182
1183 case angle::FormatID::R10G10B10A2_SINT:
1184 internalFormat = GL_RGB10_A2_SINT_ANGLEX;
1185 actualImageFormatID = angle::FormatID::R10G10B10A2_SINT;
1186 vkImageFormat = VK_FORMAT_A2B10G10R10_SINT_PACK32;
1187 imageInitializerFunction = nullptr;
1188 {
1189 static constexpr BufferFormatInitInfo kInfo[] = {
1190 {angle::FormatID::R10G10B10A2_SINT, VK_FORMAT_A2B10G10R10_SINT_PACK32, true,
1191 CopyNativeVertexData<GLuint, 1, 1, 0>, false},
1192 {angle::FormatID::R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SINT, false,
1193 CopyXYZ10W2ToXYZW32FVertexData<true, false, false>, true}};
1194 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1195 }
1196 break;
1197
1198 case angle::FormatID::R10G10B10A2_SNORM:
1199 internalFormat = GL_RGB10_A2_SNORM_ANGLEX;
1200 actualImageFormatID = angle::FormatID::R10G10B10A2_SNORM;
1201 vkImageFormat = VK_FORMAT_A2B10G10R10_SNORM_PACK32;
1202 imageInitializerFunction = nullptr;
1203 {
1204 static constexpr BufferFormatInitInfo kInfo[] = {
1205 {angle::FormatID::R10G10B10A2_SNORM, VK_FORMAT_A2B10G10R10_SNORM_PACK32, true,
1206 CopyNativeVertexData<GLuint, 1, 1, 0>, false},
1207 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1208 CopyXYZ10W2ToXYZW32FVertexData<true, true, true>, true}};
1209 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1210 }
1211 break;
1212
1213 case angle::FormatID::R10G10B10A2_SSCALED:
1214 internalFormat = GL_RGB10_A2_SSCALED_ANGLEX;
1215 actualImageFormatID = angle::FormatID::R10G10B10A2_SSCALED;
1216 vkImageFormat = VK_FORMAT_A2B10G10R10_SSCALED_PACK32;
1217 imageInitializerFunction = nullptr;
1218 {
1219 static constexpr BufferFormatInitInfo kInfo[] = {
1220 {angle::FormatID::R10G10B10A2_SSCALED, VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
1221 true, CopyNativeVertexData<GLuint, 1, 1, 0>, false},
1222 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1223 CopyXYZ10W2ToXYZW32FVertexData<true, false, true>, true}};
1224 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1225 }
1226 break;
1227
1228 case angle::FormatID::R10G10B10A2_UINT:
1229 internalFormat = GL_RGB10_A2UI;
1230 actualImageFormatID = angle::FormatID::R10G10B10A2_UINT;
1231 vkImageFormat = VK_FORMAT_A2B10G10R10_UINT_PACK32;
1232 imageInitializerFunction = nullptr;
1233 {
1234 static constexpr BufferFormatInitInfo kInfo[] = {
1235 {angle::FormatID::R10G10B10A2_UINT, VK_FORMAT_A2B10G10R10_UINT_PACK32, true,
1236 CopyNativeVertexData<GLuint, 1, 1, 0>, false},
1237 {angle::FormatID::R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT, false,
1238 CopyXYZ10W2ToXYZW32FVertexData<false, false, false>, true}};
1239 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1240 }
1241 break;
1242
1243 case angle::FormatID::R10G10B10A2_UNORM:
1244 internalFormat = GL_RGB10_A2;
1245 actualImageFormatID = angle::FormatID::R10G10B10A2_UNORM;
1246 vkImageFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
1247 imageInitializerFunction = nullptr;
1248 actualBufferFormatID = angle::FormatID::R10G10B10A2_UNORM;
1249 vkBufferFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
1250 vkBufferFormatIsPacked = true;
1251 vertexLoadFunction = CopyNativeVertexData<GLuint, 1, 1, 0>;
1252 vertexLoadRequiresConversion = false;
1253 break;
1254
1255 case angle::FormatID::R10G10B10A2_USCALED:
1256 internalFormat = GL_RGB10_A2_USCALED_ANGLEX;
1257 actualImageFormatID = angle::FormatID::R10G10B10A2_USCALED;
1258 vkImageFormat = VK_FORMAT_A2B10G10R10_USCALED_PACK32;
1259 imageInitializerFunction = nullptr;
1260 {
1261 static constexpr BufferFormatInitInfo kInfo[] = {
1262 {angle::FormatID::R10G10B10A2_USCALED, VK_FORMAT_A2B10G10R10_USCALED_PACK32,
1263 true, CopyNativeVertexData<GLuint, 1, 1, 0>, false},
1264 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1265 CopyXYZ10W2ToXYZW32FVertexData<false, false, true>, true}};
1266 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1267 }
1268 break;
1269
1270 case angle::FormatID::R10G10B10X2_UNORM:
1271 internalFormat = GL_RGB10_UNORM_ANGLEX;
1272 actualImageFormatID = angle::FormatID::R10G10B10A2_UNORM;
1273 vkImageFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
1274 imageInitializerFunction = nullptr;
1275 actualBufferFormatID = angle::FormatID::NONE;
1276 vkBufferFormat = VK_FORMAT_UNDEFINED;
1277 vkBufferFormatIsPacked = false;
1278 vertexLoadFunction = nullptr;
1279 vertexLoadRequiresConversion = true;
1280 break;
1281
1282 case angle::FormatID::R11G11B10_FLOAT:
1283 internalFormat = GL_R11F_G11F_B10F;
1284 actualImageFormatID = angle::FormatID::R11G11B10_FLOAT;
1285 vkImageFormat = VK_FORMAT_B10G11R11_UFLOAT_PACK32;
1286 imageInitializerFunction = nullptr;
1287 actualBufferFormatID = angle::FormatID::R11G11B10_FLOAT;
1288 vkBufferFormat = VK_FORMAT_B10G11R11_UFLOAT_PACK32;
1289 vkBufferFormatIsPacked = true;
1290 vertexLoadFunction = CopyNativeVertexData<GLuint, 1, 1, 0>;
1291 vertexLoadRequiresConversion = false;
1292 break;
1293
1294 case angle::FormatID::R16G16B16A16_FLOAT:
1295 internalFormat = GL_RGBA16F;
1296 actualImageFormatID = angle::FormatID::R16G16B16A16_FLOAT;
1297 vkImageFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
1298 imageInitializerFunction = nullptr;
1299 actualBufferFormatID = angle::FormatID::R16G16B16A16_FLOAT;
1300 vkBufferFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
1301 vkBufferFormatIsPacked = false;
1302 vertexLoadFunction = CopyNativeVertexData<GLhalf, 4, 4, 0>;
1303 vertexLoadRequiresConversion = false;
1304 break;
1305
1306 case angle::FormatID::R16G16B16A16_SINT:
1307 internalFormat = GL_RGBA16I;
1308 actualImageFormatID = angle::FormatID::R16G16B16A16_SINT;
1309 vkImageFormat = VK_FORMAT_R16G16B16A16_SINT;
1310 imageInitializerFunction = nullptr;
1311 actualBufferFormatID = angle::FormatID::R16G16B16A16_SINT;
1312 vkBufferFormat = VK_FORMAT_R16G16B16A16_SINT;
1313 vkBufferFormatIsPacked = false;
1314 vertexLoadFunction = CopyNativeVertexData<GLshort, 4, 4, 0>;
1315 vertexLoadRequiresConversion = false;
1316 break;
1317
1318 case angle::FormatID::R16G16B16A16_SNORM:
1319 internalFormat = GL_RGBA16_SNORM_EXT;
1320 actualImageFormatID = angle::FormatID::R16G16B16A16_SNORM;
1321 vkImageFormat = VK_FORMAT_R16G16B16A16_SNORM;
1322 imageInitializerFunction = nullptr;
1323 {
1324 static constexpr BufferFormatInitInfo kInfo[] = {
1325 {angle::FormatID::R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_SNORM, false,
1326 CopyNativeVertexData<GLshort, 4, 4, 0>, false},
1327 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1328 CopyTo32FVertexData<GLshort, 4, 4, true>, true}};
1329 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1330 }
1331 break;
1332
1333 case angle::FormatID::R16G16B16A16_SSCALED:
1334 internalFormat = GL_RGBA16_SSCALED_ANGLEX;
1335 actualImageFormatID = angle::FormatID::R16G16B16A16_SSCALED;
1336 vkImageFormat = VK_FORMAT_R16G16B16A16_SSCALED;
1337 imageInitializerFunction = nullptr;
1338 {
1339 static constexpr BufferFormatInitInfo kInfo[] = {
1340 {angle::FormatID::R16G16B16A16_SSCALED, VK_FORMAT_R16G16B16A16_SSCALED, false,
1341 CopyNativeVertexData<GLshort, 4, 4, 0>, false},
1342 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1343 CopyTo32FVertexData<GLshort, 4, 4, false>, true}};
1344 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1345 }
1346 break;
1347
1348 case angle::FormatID::R16G16B16A16_UINT:
1349 internalFormat = GL_RGBA16UI;
1350 actualImageFormatID = angle::FormatID::R16G16B16A16_UINT;
1351 vkImageFormat = VK_FORMAT_R16G16B16A16_UINT;
1352 imageInitializerFunction = nullptr;
1353 actualBufferFormatID = angle::FormatID::R16G16B16A16_UINT;
1354 vkBufferFormat = VK_FORMAT_R16G16B16A16_UINT;
1355 vkBufferFormatIsPacked = false;
1356 vertexLoadFunction = CopyNativeVertexData<GLushort, 4, 4, 0>;
1357 vertexLoadRequiresConversion = false;
1358 break;
1359
1360 case angle::FormatID::R16G16B16A16_UNORM:
1361 internalFormat = GL_RGBA16_EXT;
1362 actualImageFormatID = angle::FormatID::R16G16B16A16_UNORM;
1363 vkImageFormat = VK_FORMAT_R16G16B16A16_UNORM;
1364 imageInitializerFunction = nullptr;
1365 {
1366 static constexpr BufferFormatInitInfo kInfo[] = {
1367 {angle::FormatID::R16G16B16A16_UNORM, VK_FORMAT_R16G16B16A16_UNORM, false,
1368 CopyNativeVertexData<GLushort, 4, 4, 0>, false},
1369 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1370 CopyTo32FVertexData<GLushort, 4, 4, true>, true}};
1371 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1372 }
1373 break;
1374
1375 case angle::FormatID::R16G16B16A16_USCALED:
1376 internalFormat = GL_RGBA16_USCALED_ANGLEX;
1377 actualImageFormatID = angle::FormatID::R16G16B16A16_USCALED;
1378 vkImageFormat = VK_FORMAT_R16G16B16A16_USCALED;
1379 imageInitializerFunction = nullptr;
1380 {
1381 static constexpr BufferFormatInitInfo kInfo[] = {
1382 {angle::FormatID::R16G16B16A16_USCALED, VK_FORMAT_R16G16B16A16_USCALED, false,
1383 CopyNativeVertexData<GLushort, 4, 4, 0>, false},
1384 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
1385 CopyTo32FVertexData<GLushort, 4, 4, false>, true}};
1386 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1387 }
1388 break;
1389
1390 case angle::FormatID::R16G16B16_FLOAT:
1391 internalFormat = GL_RGB16F;
1392 {
1393 static constexpr ImageFormatInitInfo kInfo[] = {
1394 {angle::FormatID::R16G16B16_FLOAT, VK_FORMAT_R16G16B16_SFLOAT, nullptr},
1395 {angle::FormatID::R16G16B16A16_FLOAT, VK_FORMAT_R16G16B16A16_SFLOAT,
1396 Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>}};
1397 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1398 }
1399 {
1400 static constexpr BufferFormatInitInfo kInfo[] = {
1401 {angle::FormatID::R16G16B16_FLOAT, VK_FORMAT_R16G16B16_SFLOAT, false,
1402 CopyNativeVertexData<GLhalf, 3, 3, 0>, false},
1403 {angle::FormatID::R16G16B16A16_FLOAT, VK_FORMAT_R16G16B16A16_SFLOAT, false,
1404 CopyNativeVertexData<GLhalf, 3, 4, 0>, true}};
1405 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1406 }
1407 break;
1408
1409 case angle::FormatID::R16G16B16_SINT:
1410 internalFormat = GL_RGB16I;
1411 {
1412 static constexpr ImageFormatInitInfo kInfo[] = {
1413 {angle::FormatID::R16G16B16_SINT, VK_FORMAT_R16G16B16_SINT, nullptr},
1414 {angle::FormatID::R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SINT,
1415 Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>}};
1416 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1417 }
1418 {
1419 static constexpr BufferFormatInitInfo kInfo[] = {
1420 {angle::FormatID::R16G16B16_SINT, VK_FORMAT_R16G16B16_SINT, false,
1421 CopyNativeVertexData<GLshort, 3, 3, 0>, false},
1422 {angle::FormatID::R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SINT, false,
1423 CopyNativeVertexData<GLshort, 3, 4, 0>, true}};
1424 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1425 }
1426 break;
1427
1428 case angle::FormatID::R16G16B16_SNORM:
1429 internalFormat = GL_RGB16_SNORM_EXT;
1430 actualImageFormatID = angle::FormatID::R16G16B16_SNORM;
1431 vkImageFormat = VK_FORMAT_R16G16B16_SNORM;
1432 imageInitializerFunction = nullptr;
1433 {
1434 static constexpr BufferFormatInitInfo kInfo[] = {
1435 {angle::FormatID::R16G16B16_SNORM, VK_FORMAT_R16G16B16_SNORM, false,
1436 CopyNativeVertexData<GLshort, 3, 3, 0>, false},
1437 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
1438 CopyTo32FVertexData<GLshort, 3, 3, true>, true}};
1439 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1440 }
1441 break;
1442
1443 case angle::FormatID::R16G16B16_SSCALED:
1444 internalFormat = GL_RGB16_SSCALED_ANGLEX;
1445 actualImageFormatID = angle::FormatID::R16G16B16_SSCALED;
1446 vkImageFormat = VK_FORMAT_R16G16B16_SSCALED;
1447 imageInitializerFunction = nullptr;
1448 {
1449 static constexpr BufferFormatInitInfo kInfo[] = {
1450 {angle::FormatID::R16G16B16_SSCALED, VK_FORMAT_R16G16B16_SSCALED, false,
1451 CopyNativeVertexData<GLshort, 3, 3, 0>, false},
1452 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
1453 CopyTo32FVertexData<GLshort, 3, 3, false>, true}};
1454 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1455 }
1456 break;
1457
1458 case angle::FormatID::R16G16B16_UINT:
1459 internalFormat = GL_RGB16UI;
1460 {
1461 static constexpr ImageFormatInitInfo kInfo[] = {
1462 {angle::FormatID::R16G16B16_UINT, VK_FORMAT_R16G16B16_UINT, nullptr},
1463 {angle::FormatID::R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT,
1464 Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>}};
1465 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1466 }
1467 {
1468 static constexpr BufferFormatInitInfo kInfo[] = {
1469 {angle::FormatID::R16G16B16_UINT, VK_FORMAT_R16G16B16_UINT, false,
1470 CopyNativeVertexData<GLushort, 3, 3, 0>, false},
1471 {angle::FormatID::R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UINT, false,
1472 CopyNativeVertexData<GLushort, 3, 4, 0>, true}};
1473 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1474 }
1475 break;
1476
1477 case angle::FormatID::R16G16B16_UNORM:
1478 internalFormat = GL_RGB16_EXT;
1479 actualImageFormatID = angle::FormatID::R16G16B16_UNORM;
1480 vkImageFormat = VK_FORMAT_R16G16B16_UNORM;
1481 imageInitializerFunction = nullptr;
1482 {
1483 static constexpr BufferFormatInitInfo kInfo[] = {
1484 {angle::FormatID::R16G16B16_UNORM, VK_FORMAT_R16G16B16_UNORM, false,
1485 CopyNativeVertexData<GLushort, 3, 3, 0>, false},
1486 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
1487 CopyTo32FVertexData<GLushort, 3, 3, true>, true}};
1488 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1489 }
1490 break;
1491
1492 case angle::FormatID::R16G16B16_USCALED:
1493 internalFormat = GL_RGB16_USCALED_ANGLEX;
1494 actualImageFormatID = angle::FormatID::R16G16B16_USCALED;
1495 vkImageFormat = VK_FORMAT_R16G16B16_USCALED;
1496 imageInitializerFunction = nullptr;
1497 {
1498 static constexpr BufferFormatInitInfo kInfo[] = {
1499 {angle::FormatID::R16G16B16_USCALED, VK_FORMAT_R16G16B16_USCALED, false,
1500 CopyNativeVertexData<GLushort, 3, 3, 0>, false},
1501 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
1502 CopyTo32FVertexData<GLushort, 3, 3, false>, true}};
1503 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1504 }
1505 break;
1506
1507 case angle::FormatID::R16G16_FLOAT:
1508 internalFormat = GL_RG16F;
1509 actualImageFormatID = angle::FormatID::R16G16_FLOAT;
1510 vkImageFormat = VK_FORMAT_R16G16_SFLOAT;
1511 imageInitializerFunction = nullptr;
1512 actualBufferFormatID = angle::FormatID::R16G16_FLOAT;
1513 vkBufferFormat = VK_FORMAT_R16G16_SFLOAT;
1514 vkBufferFormatIsPacked = false;
1515 vertexLoadFunction = CopyNativeVertexData<GLhalf, 2, 2, 0>;
1516 vertexLoadRequiresConversion = false;
1517 break;
1518
1519 case angle::FormatID::R16G16_SINT:
1520 internalFormat = GL_RG16I;
1521 actualImageFormatID = angle::FormatID::R16G16_SINT;
1522 vkImageFormat = VK_FORMAT_R16G16_SINT;
1523 imageInitializerFunction = nullptr;
1524 actualBufferFormatID = angle::FormatID::R16G16_SINT;
1525 vkBufferFormat = VK_FORMAT_R16G16_SINT;
1526 vkBufferFormatIsPacked = false;
1527 vertexLoadFunction = CopyNativeVertexData<GLshort, 2, 2, 0>;
1528 vertexLoadRequiresConversion = false;
1529 break;
1530
1531 case angle::FormatID::R16G16_SNORM:
1532 internalFormat = GL_RG16_SNORM_EXT;
1533 actualImageFormatID = angle::FormatID::R16G16_SNORM;
1534 vkImageFormat = VK_FORMAT_R16G16_SNORM;
1535 imageInitializerFunction = nullptr;
1536 {
1537 static constexpr BufferFormatInitInfo kInfo[] = {
1538 {angle::FormatID::R16G16_SNORM, VK_FORMAT_R16G16_SNORM, false,
1539 CopyNativeVertexData<GLshort, 2, 2, 0>, false},
1540 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
1541 CopyTo32FVertexData<GLshort, 2, 2, true>, true}};
1542 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1543 }
1544 break;
1545
1546 case angle::FormatID::R16G16_SSCALED:
1547 internalFormat = GL_RG16_SSCALED_ANGLEX;
1548 actualImageFormatID = angle::FormatID::R16G16_SSCALED;
1549 vkImageFormat = VK_FORMAT_R16G16_SSCALED;
1550 imageInitializerFunction = nullptr;
1551 {
1552 static constexpr BufferFormatInitInfo kInfo[] = {
1553 {angle::FormatID::R16G16_SSCALED, VK_FORMAT_R16G16_SSCALED, false,
1554 CopyNativeVertexData<GLshort, 2, 2, 0>, false},
1555 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
1556 CopyTo32FVertexData<GLshort, 2, 2, false>, true}};
1557 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1558 }
1559 break;
1560
1561 case angle::FormatID::R16G16_UINT:
1562 internalFormat = GL_RG16UI;
1563 actualImageFormatID = angle::FormatID::R16G16_UINT;
1564 vkImageFormat = VK_FORMAT_R16G16_UINT;
1565 imageInitializerFunction = nullptr;
1566 actualBufferFormatID = angle::FormatID::R16G16_UINT;
1567 vkBufferFormat = VK_FORMAT_R16G16_UINT;
1568 vkBufferFormatIsPacked = false;
1569 vertexLoadFunction = CopyNativeVertexData<GLushort, 2, 2, 0>;
1570 vertexLoadRequiresConversion = false;
1571 break;
1572
1573 case angle::FormatID::R16G16_UNORM:
1574 internalFormat = GL_RG16_EXT;
1575 actualImageFormatID = angle::FormatID::R16G16_UNORM;
1576 vkImageFormat = VK_FORMAT_R16G16_UNORM;
1577 imageInitializerFunction = nullptr;
1578 {
1579 static constexpr BufferFormatInitInfo kInfo[] = {
1580 {angle::FormatID::R16G16_UNORM, VK_FORMAT_R16G16_UNORM, false,
1581 CopyNativeVertexData<GLushort, 2, 2, 0>, false},
1582 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
1583 CopyTo32FVertexData<GLushort, 2, 2, true>, true}};
1584 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1585 }
1586 break;
1587
1588 case angle::FormatID::R16G16_USCALED:
1589 internalFormat = GL_RG16_USCALED_ANGLEX;
1590 actualImageFormatID = angle::FormatID::R16G16_USCALED;
1591 vkImageFormat = VK_FORMAT_R16G16_USCALED;
1592 imageInitializerFunction = nullptr;
1593 {
1594 static constexpr BufferFormatInitInfo kInfo[] = {
1595 {angle::FormatID::R16G16_USCALED, VK_FORMAT_R16G16_USCALED, false,
1596 CopyNativeVertexData<GLushort, 2, 2, 0>, false},
1597 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
1598 CopyTo32FVertexData<GLushort, 2, 2, false>, true}};
1599 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1600 }
1601 break;
1602
1603 case angle::FormatID::R16_FLOAT:
1604 internalFormat = GL_R16F;
1605 actualImageFormatID = angle::FormatID::R16_FLOAT;
1606 vkImageFormat = VK_FORMAT_R16_SFLOAT;
1607 imageInitializerFunction = nullptr;
1608 actualBufferFormatID = angle::FormatID::R16_FLOAT;
1609 vkBufferFormat = VK_FORMAT_R16_SFLOAT;
1610 vkBufferFormatIsPacked = false;
1611 vertexLoadFunction = CopyNativeVertexData<GLhalf, 1, 1, 0>;
1612 vertexLoadRequiresConversion = false;
1613 break;
1614
1615 case angle::FormatID::R16_SINT:
1616 internalFormat = GL_R16I;
1617 actualImageFormatID = angle::FormatID::R16_SINT;
1618 vkImageFormat = VK_FORMAT_R16_SINT;
1619 imageInitializerFunction = nullptr;
1620 actualBufferFormatID = angle::FormatID::R16_SINT;
1621 vkBufferFormat = VK_FORMAT_R16_SINT;
1622 vkBufferFormatIsPacked = false;
1623 vertexLoadFunction = CopyNativeVertexData<GLshort, 1, 1, 0>;
1624 vertexLoadRequiresConversion = false;
1625 break;
1626
1627 case angle::FormatID::R16_SNORM:
1628 internalFormat = GL_R16_SNORM_EXT;
1629 actualImageFormatID = angle::FormatID::R16_SNORM;
1630 vkImageFormat = VK_FORMAT_R16_SNORM;
1631 imageInitializerFunction = nullptr;
1632 {
1633 static constexpr BufferFormatInitInfo kInfo[] = {
1634 {angle::FormatID::R16_SNORM, VK_FORMAT_R16_SNORM, false,
1635 CopyNativeVertexData<GLshort, 1, 1, 0>, false},
1636 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
1637 CopyTo32FVertexData<GLshort, 1, 1, true>, true}};
1638 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1639 }
1640 break;
1641
1642 case angle::FormatID::R16_SSCALED:
1643 internalFormat = GL_R16_SSCALED_ANGLEX;
1644 actualImageFormatID = angle::FormatID::R16_SSCALED;
1645 vkImageFormat = VK_FORMAT_R16_SSCALED;
1646 imageInitializerFunction = nullptr;
1647 {
1648 static constexpr BufferFormatInitInfo kInfo[] = {
1649 {angle::FormatID::R16_SSCALED, VK_FORMAT_R16_SSCALED, false,
1650 CopyNativeVertexData<GLshort, 1, 1, 0>, false},
1651 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
1652 CopyTo32FVertexData<GLshort, 1, 1, false>, true}};
1653 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1654 }
1655 break;
1656
1657 case angle::FormatID::R16_UINT:
1658 internalFormat = GL_R16UI;
1659 actualImageFormatID = angle::FormatID::R16_UINT;
1660 vkImageFormat = VK_FORMAT_R16_UINT;
1661 imageInitializerFunction = nullptr;
1662 actualBufferFormatID = angle::FormatID::R16_UINT;
1663 vkBufferFormat = VK_FORMAT_R16_UINT;
1664 vkBufferFormatIsPacked = false;
1665 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
1666 vertexLoadRequiresConversion = false;
1667 break;
1668
1669 case angle::FormatID::R16_UNORM:
1670 internalFormat = GL_R16_EXT;
1671 actualImageFormatID = angle::FormatID::R16_UNORM;
1672 vkImageFormat = VK_FORMAT_R16_UNORM;
1673 imageInitializerFunction = nullptr;
1674 {
1675 static constexpr BufferFormatInitInfo kInfo[] = {
1676 {angle::FormatID::R16_UNORM, VK_FORMAT_R16_UNORM, false,
1677 CopyNativeVertexData<GLushort, 1, 1, 0>, false},
1678 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
1679 CopyTo32FVertexData<GLushort, 1, 1, true>, true}};
1680 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1681 }
1682 break;
1683
1684 case angle::FormatID::R16_USCALED:
1685 internalFormat = GL_R16_USCALED_ANGLEX;
1686 actualImageFormatID = angle::FormatID::R16_USCALED;
1687 vkImageFormat = VK_FORMAT_R16_USCALED;
1688 imageInitializerFunction = nullptr;
1689 {
1690 static constexpr BufferFormatInitInfo kInfo[] = {
1691 {angle::FormatID::R16_USCALED, VK_FORMAT_R16_USCALED, false,
1692 CopyNativeVertexData<GLushort, 1, 1, 0>, false},
1693 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
1694 CopyTo32FVertexData<GLushort, 1, 1, false>, true}};
1695 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
1696 }
1697 break;
1698
1699 case angle::FormatID::R32G32B32A32_FIXED:
1700 internalFormat = GL_RGBA32_FIXED_ANGLEX;
1701
1702 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1703 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1704 vkBufferFormatIsPacked = false;
1705 vertexLoadFunction = Copy32FixedTo32FVertexData<4, 4>;
1706 vertexLoadRequiresConversion = true;
1707 break;
1708
1709 case angle::FormatID::R32G32B32A32_FLOAT:
1710 internalFormat = GL_RGBA32F;
1711 actualImageFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1712 vkImageFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1713 imageInitializerFunction = nullptr;
1714 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1715 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1716 vkBufferFormatIsPacked = false;
1717 vertexLoadFunction = CopyNativeVertexData<GLfloat, 4, 4, 0>;
1718 vertexLoadRequiresConversion = false;
1719 break;
1720
1721 case angle::FormatID::R32G32B32A32_SINT:
1722 internalFormat = GL_RGBA32I;
1723 actualImageFormatID = angle::FormatID::R32G32B32A32_SINT;
1724 vkImageFormat = VK_FORMAT_R32G32B32A32_SINT;
1725 imageInitializerFunction = nullptr;
1726 actualBufferFormatID = angle::FormatID::R32G32B32A32_SINT;
1727 vkBufferFormat = VK_FORMAT_R32G32B32A32_SINT;
1728 vkBufferFormatIsPacked = false;
1729 vertexLoadFunction = CopyNativeVertexData<GLint, 4, 4, 0>;
1730 vertexLoadRequiresConversion = false;
1731 break;
1732
1733 case angle::FormatID::R32G32B32A32_SNORM:
1734 internalFormat = GL_RGBA32_SNORM_ANGLEX;
1735
1736 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1737 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1738 vkBufferFormatIsPacked = false;
1739 vertexLoadFunction = CopyTo32FVertexData<GLint, 4, 4, true>;
1740 vertexLoadRequiresConversion = true;
1741 break;
1742
1743 case angle::FormatID::R32G32B32A32_SSCALED:
1744 internalFormat = GL_RGBA32_SSCALED_ANGLEX;
1745
1746 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1747 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1748 vkBufferFormatIsPacked = false;
1749 vertexLoadFunction = CopyTo32FVertexData<GLint, 4, 4, false>;
1750 vertexLoadRequiresConversion = true;
1751 break;
1752
1753 case angle::FormatID::R32G32B32A32_UINT:
1754 internalFormat = GL_RGBA32UI;
1755 actualImageFormatID = angle::FormatID::R32G32B32A32_UINT;
1756 vkImageFormat = VK_FORMAT_R32G32B32A32_UINT;
1757 imageInitializerFunction = nullptr;
1758 actualBufferFormatID = angle::FormatID::R32G32B32A32_UINT;
1759 vkBufferFormat = VK_FORMAT_R32G32B32A32_UINT;
1760 vkBufferFormatIsPacked = false;
1761 vertexLoadFunction = CopyNativeVertexData<GLuint, 4, 4, 0>;
1762 vertexLoadRequiresConversion = false;
1763 break;
1764
1765 case angle::FormatID::R32G32B32A32_UNORM:
1766 internalFormat = GL_RGBA32_UNORM_ANGLEX;
1767
1768 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1769 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1770 vkBufferFormatIsPacked = false;
1771 vertexLoadFunction = CopyTo32FVertexData<GLuint, 4, 4, true>;
1772 vertexLoadRequiresConversion = true;
1773 break;
1774
1775 case angle::FormatID::R32G32B32A32_USCALED:
1776 internalFormat = GL_RGBA32_USCALED_ANGLEX;
1777
1778 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
1779 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
1780 vkBufferFormatIsPacked = false;
1781 vertexLoadFunction = CopyTo32FVertexData<GLuint, 4, 4, false>;
1782 vertexLoadRequiresConversion = true;
1783 break;
1784
1785 case angle::FormatID::R32G32B32_FIXED:
1786 internalFormat = GL_RGB32_FIXED_ANGLEX;
1787
1788 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1789 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1790 vkBufferFormatIsPacked = false;
1791 vertexLoadFunction = Copy32FixedTo32FVertexData<3, 3>;
1792 vertexLoadRequiresConversion = true;
1793 break;
1794
1795 case angle::FormatID::R32G32B32_FLOAT:
1796 internalFormat = GL_RGB32F;
1797 {
1798 static constexpr ImageFormatInitInfo kInfo[] = {
1799 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, nullptr},
1800 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT,
1801 Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000,
1802 gl::Float32One>}};
1803 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1804 }
1805 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1806 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1807 vkBufferFormatIsPacked = false;
1808 vertexLoadFunction = CopyNativeVertexData<GLfloat, 3, 3, 0>;
1809 vertexLoadRequiresConversion = false;
1810 break;
1811
1812 case angle::FormatID::R32G32B32_SINT:
1813 internalFormat = GL_RGB32I;
1814 {
1815 static constexpr ImageFormatInitInfo kInfo[] = {
1816 {angle::FormatID::R32G32B32_SINT, VK_FORMAT_R32G32B32_SINT, nullptr},
1817 {angle::FormatID::R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SINT,
1818 Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000,
1819 0x00000001>}};
1820 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1821 }
1822 actualBufferFormatID = angle::FormatID::R32G32B32_SINT;
1823 vkBufferFormat = VK_FORMAT_R32G32B32_SINT;
1824 vkBufferFormatIsPacked = false;
1825 vertexLoadFunction = CopyNativeVertexData<GLint, 3, 3, 0>;
1826 vertexLoadRequiresConversion = false;
1827 break;
1828
1829 case angle::FormatID::R32G32B32_SNORM:
1830 internalFormat = GL_RGB32_SNORM_ANGLEX;
1831
1832 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1833 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1834 vkBufferFormatIsPacked = false;
1835 vertexLoadFunction = CopyTo32FVertexData<GLint, 3, 3, true>;
1836 vertexLoadRequiresConversion = true;
1837 break;
1838
1839 case angle::FormatID::R32G32B32_SSCALED:
1840 internalFormat = GL_RGB32_SSCALED_ANGLEX;
1841
1842 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1843 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1844 vkBufferFormatIsPacked = false;
1845 vertexLoadFunction = CopyTo32FVertexData<GLint, 3, 3, false>;
1846 vertexLoadRequiresConversion = true;
1847 break;
1848
1849 case angle::FormatID::R32G32B32_UINT:
1850 internalFormat = GL_RGB32UI;
1851 {
1852 static constexpr ImageFormatInitInfo kInfo[] = {
1853 {angle::FormatID::R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT, nullptr},
1854 {angle::FormatID::R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT,
1855 Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000,
1856 0x00000001>}};
1857 initImageFallback(renderer, kInfo, ArraySize(kInfo));
1858 }
1859 actualBufferFormatID = angle::FormatID::R32G32B32_UINT;
1860 vkBufferFormat = VK_FORMAT_R32G32B32_UINT;
1861 vkBufferFormatIsPacked = false;
1862 vertexLoadFunction = CopyNativeVertexData<GLuint, 3, 3, 0>;
1863 vertexLoadRequiresConversion = false;
1864 break;
1865
1866 case angle::FormatID::R32G32B32_UNORM:
1867 internalFormat = GL_RGB32_UNORM_ANGLEX;
1868
1869 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1870 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1871 vkBufferFormatIsPacked = false;
1872 vertexLoadFunction = CopyTo32FVertexData<GLuint, 3, 3, true>;
1873 vertexLoadRequiresConversion = true;
1874 break;
1875
1876 case angle::FormatID::R32G32B32_USCALED:
1877 internalFormat = GL_RGB32_USCALED_ANGLEX;
1878
1879 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
1880 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
1881 vkBufferFormatIsPacked = false;
1882 vertexLoadFunction = CopyTo32FVertexData<GLuint, 3, 3, false>;
1883 vertexLoadRequiresConversion = true;
1884 break;
1885
1886 case angle::FormatID::R32G32_FIXED:
1887 internalFormat = GL_RG32_FIXED_ANGLEX;
1888
1889 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1890 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1891 vkBufferFormatIsPacked = false;
1892 vertexLoadFunction = Copy32FixedTo32FVertexData<2, 2>;
1893 vertexLoadRequiresConversion = true;
1894 break;
1895
1896 case angle::FormatID::R32G32_FLOAT:
1897 internalFormat = GL_RG32F;
1898 actualImageFormatID = angle::FormatID::R32G32_FLOAT;
1899 vkImageFormat = VK_FORMAT_R32G32_SFLOAT;
1900 imageInitializerFunction = nullptr;
1901 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1902 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1903 vkBufferFormatIsPacked = false;
1904 vertexLoadFunction = CopyNativeVertexData<GLfloat, 2, 2, 0>;
1905 vertexLoadRequiresConversion = false;
1906 break;
1907
1908 case angle::FormatID::R32G32_SINT:
1909 internalFormat = GL_RG32I;
1910 actualImageFormatID = angle::FormatID::R32G32_SINT;
1911 vkImageFormat = VK_FORMAT_R32G32_SINT;
1912 imageInitializerFunction = nullptr;
1913 actualBufferFormatID = angle::FormatID::R32G32_SINT;
1914 vkBufferFormat = VK_FORMAT_R32G32_SINT;
1915 vkBufferFormatIsPacked = false;
1916 vertexLoadFunction = CopyNativeVertexData<GLint, 2, 2, 0>;
1917 vertexLoadRequiresConversion = false;
1918 break;
1919
1920 case angle::FormatID::R32G32_SNORM:
1921 internalFormat = GL_RG32_SNORM_ANGLEX;
1922
1923 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1924 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1925 vkBufferFormatIsPacked = false;
1926 vertexLoadFunction = CopyTo32FVertexData<GLint, 2, 2, true>;
1927 vertexLoadRequiresConversion = true;
1928 break;
1929
1930 case angle::FormatID::R32G32_SSCALED:
1931 internalFormat = GL_RG32_SSCALED_ANGLEX;
1932
1933 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1934 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1935 vkBufferFormatIsPacked = false;
1936 vertexLoadFunction = CopyTo32FVertexData<GLint, 2, 2, false>;
1937 vertexLoadRequiresConversion = true;
1938 break;
1939
1940 case angle::FormatID::R32G32_UINT:
1941 internalFormat = GL_RG32UI;
1942 actualImageFormatID = angle::FormatID::R32G32_UINT;
1943 vkImageFormat = VK_FORMAT_R32G32_UINT;
1944 imageInitializerFunction = nullptr;
1945 actualBufferFormatID = angle::FormatID::R32G32_UINT;
1946 vkBufferFormat = VK_FORMAT_R32G32_UINT;
1947 vkBufferFormatIsPacked = false;
1948 vertexLoadFunction = CopyNativeVertexData<GLuint, 2, 2, 0>;
1949 vertexLoadRequiresConversion = false;
1950 break;
1951
1952 case angle::FormatID::R32G32_UNORM:
1953 internalFormat = GL_RG32_UNORM_ANGLEX;
1954
1955 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1956 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1957 vkBufferFormatIsPacked = false;
1958 vertexLoadFunction = CopyTo32FVertexData<GLuint, 2, 2, true>;
1959 vertexLoadRequiresConversion = true;
1960 break;
1961
1962 case angle::FormatID::R32G32_USCALED:
1963 internalFormat = GL_RG32_USCALED_ANGLEX;
1964
1965 actualBufferFormatID = angle::FormatID::R32G32_FLOAT;
1966 vkBufferFormat = VK_FORMAT_R32G32_SFLOAT;
1967 vkBufferFormatIsPacked = false;
1968 vertexLoadFunction = CopyTo32FVertexData<GLuint, 2, 2, false>;
1969 vertexLoadRequiresConversion = true;
1970 break;
1971
1972 case angle::FormatID::R32_FIXED:
1973 internalFormat = GL_R32_FIXED_ANGLEX;
1974
1975 actualBufferFormatID = angle::FormatID::R32_FLOAT;
1976 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
1977 vkBufferFormatIsPacked = false;
1978 vertexLoadFunction = Copy32FixedTo32FVertexData<1, 1>;
1979 vertexLoadRequiresConversion = true;
1980 break;
1981
1982 case angle::FormatID::R32_FLOAT:
1983 internalFormat = GL_R32F;
1984 actualImageFormatID = angle::FormatID::R32_FLOAT;
1985 vkImageFormat = VK_FORMAT_R32_SFLOAT;
1986 imageInitializerFunction = nullptr;
1987 actualBufferFormatID = angle::FormatID::R32_FLOAT;
1988 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
1989 vkBufferFormatIsPacked = false;
1990 vertexLoadFunction = CopyNativeVertexData<GLfloat, 1, 1, 0>;
1991 vertexLoadRequiresConversion = false;
1992 break;
1993
1994 case angle::FormatID::R32_SINT:
1995 internalFormat = GL_R32I;
1996 actualImageFormatID = angle::FormatID::R32_SINT;
1997 vkImageFormat = VK_FORMAT_R32_SINT;
1998 imageInitializerFunction = nullptr;
1999 actualBufferFormatID = angle::FormatID::R32_SINT;
2000 vkBufferFormat = VK_FORMAT_R32_SINT;
2001 vkBufferFormatIsPacked = false;
2002 vertexLoadFunction = CopyNativeVertexData<GLint, 1, 1, 0>;
2003 vertexLoadRequiresConversion = false;
2004 break;
2005
2006 case angle::FormatID::R32_SNORM:
2007 internalFormat = GL_R32_SNORM_ANGLEX;
2008
2009 actualBufferFormatID = angle::FormatID::R32_FLOAT;
2010 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
2011 vkBufferFormatIsPacked = false;
2012 vertexLoadFunction = CopyTo32FVertexData<GLint, 1, 1, true>;
2013 vertexLoadRequiresConversion = true;
2014 break;
2015
2016 case angle::FormatID::R32_SSCALED:
2017 internalFormat = GL_R32_SSCALED_ANGLEX;
2018
2019 actualBufferFormatID = angle::FormatID::R32_FLOAT;
2020 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
2021 vkBufferFormatIsPacked = false;
2022 vertexLoadFunction = CopyTo32FVertexData<GLint, 1, 1, false>;
2023 vertexLoadRequiresConversion = true;
2024 break;
2025
2026 case angle::FormatID::R32_UINT:
2027 internalFormat = GL_R32UI;
2028 actualImageFormatID = angle::FormatID::R32_UINT;
2029 vkImageFormat = VK_FORMAT_R32_UINT;
2030 imageInitializerFunction = nullptr;
2031 actualBufferFormatID = angle::FormatID::R32_UINT;
2032 vkBufferFormat = VK_FORMAT_R32_UINT;
2033 vkBufferFormatIsPacked = false;
2034 vertexLoadFunction = CopyNativeVertexData<GLuint, 1, 1, 0>;
2035 vertexLoadRequiresConversion = false;
2036 break;
2037
2038 case angle::FormatID::R32_UNORM:
2039 internalFormat = GL_R32_UNORM_ANGLEX;
2040
2041 actualBufferFormatID = angle::FormatID::R32_FLOAT;
2042 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
2043 vkBufferFormatIsPacked = false;
2044 vertexLoadFunction = CopyTo32FVertexData<GLuint, 1, 1, true>;
2045 vertexLoadRequiresConversion = true;
2046 break;
2047
2048 case angle::FormatID::R32_USCALED:
2049 internalFormat = GL_R32_USCALED_ANGLEX;
2050
2051 actualBufferFormatID = angle::FormatID::R32_FLOAT;
2052 vkBufferFormat = VK_FORMAT_R32_SFLOAT;
2053 vkBufferFormatIsPacked = false;
2054 vertexLoadFunction = CopyTo32FVertexData<GLuint, 1, 1, false>;
2055 vertexLoadRequiresConversion = true;
2056 break;
2057
2058 case angle::FormatID::R4G4B4A4_UNORM:
2059 internalFormat = GL_RGBA4;
2060 {
2061 static constexpr ImageFormatInitInfo kInfo[] = {
2062 {angle::FormatID::R4G4B4A4_UNORM, VK_FORMAT_R4G4B4A4_UNORM_PACK16, nullptr},
2063 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, nullptr}};
2064 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2065 }
2066 actualBufferFormatID = angle::FormatID::R4G4B4A4_UNORM;
2067 vkBufferFormat = VK_FORMAT_R4G4B4A4_UNORM_PACK16;
2068 vkBufferFormatIsPacked = true;
2069 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
2070 vertexLoadRequiresConversion = false;
2071 break;
2072
2073 case angle::FormatID::R5G5B5A1_UNORM:
2074 internalFormat = GL_RGB5_A1;
2075 {
2076 static constexpr ImageFormatInitInfo kInfo[] = {
2077 {angle::FormatID::R5G5B5A1_UNORM, VK_FORMAT_R5G5B5A1_UNORM_PACK16, nullptr},
2078 {angle::FormatID::A1R5G5B5_UNORM, VK_FORMAT_A1R5G5B5_UNORM_PACK16, nullptr}};
2079 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2080 }
2081 actualBufferFormatID = angle::FormatID::R5G5B5A1_UNORM;
2082 vkBufferFormat = VK_FORMAT_R5G5B5A1_UNORM_PACK16;
2083 vkBufferFormatIsPacked = true;
2084 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
2085 vertexLoadRequiresConversion = false;
2086 break;
2087
2088 case angle::FormatID::R5G6B5_UNORM:
2089 internalFormat = GL_RGB565;
2090 actualImageFormatID = angle::FormatID::R5G6B5_UNORM;
2091 vkImageFormat = VK_FORMAT_R5G6B5_UNORM_PACK16;
2092 imageInitializerFunction = nullptr;
2093 actualBufferFormatID = angle::FormatID::R5G6B5_UNORM;
2094 vkBufferFormat = VK_FORMAT_R5G6B5_UNORM_PACK16;
2095 vkBufferFormatIsPacked = true;
2096 vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>;
2097 vertexLoadRequiresConversion = false;
2098 break;
2099
2100 case angle::FormatID::R8G8B8A8_SINT:
2101 internalFormat = GL_RGBA8I;
2102 actualImageFormatID = angle::FormatID::R8G8B8A8_SINT;
2103 vkImageFormat = VK_FORMAT_R8G8B8A8_SINT;
2104 imageInitializerFunction = nullptr;
2105 actualBufferFormatID = angle::FormatID::R8G8B8A8_SINT;
2106 vkBufferFormat = VK_FORMAT_R8G8B8A8_SINT;
2107 vkBufferFormatIsPacked = false;
2108 vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>;
2109 vertexLoadRequiresConversion = false;
2110 break;
2111
2112 case angle::FormatID::R8G8B8A8_SNORM:
2113 internalFormat = GL_RGBA8_SNORM;
2114 actualImageFormatID = angle::FormatID::R8G8B8A8_SNORM;
2115 vkImageFormat = VK_FORMAT_R8G8B8A8_SNORM;
2116 imageInitializerFunction = nullptr;
2117 {
2118 static constexpr BufferFormatInitInfo kInfo[] = {
2119 {angle::FormatID::R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SNORM, false,
2120 CopyNativeVertexData<GLbyte, 4, 4, 0>, false},
2121 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
2122 CopyTo32FVertexData<GLbyte, 4, 4, true>, true}};
2123 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2124 }
2125 break;
2126
2127 case angle::FormatID::R8G8B8A8_SSCALED:
2128 internalFormat = GL_RGBA8_SSCALED_ANGLEX;
2129 actualImageFormatID = angle::FormatID::R8G8B8A8_SSCALED;
2130 vkImageFormat = VK_FORMAT_R8G8B8A8_SSCALED;
2131 imageInitializerFunction = nullptr;
2132 {
2133 static constexpr BufferFormatInitInfo kInfo[] = {
2134 {angle::FormatID::R8G8B8A8_SSCALED, VK_FORMAT_R8G8B8A8_SSCALED, false,
2135 CopyNativeVertexData<GLbyte, 4, 4, 0>, false},
2136 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
2137 CopyTo32FVertexData<GLbyte, 4, 4, false>, true}};
2138 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2139 }
2140 break;
2141
2142 case angle::FormatID::R8G8B8A8_TYPELESS:
2143 // This format is not implemented in Vulkan.
2144 break;
2145
2146 case angle::FormatID::R8G8B8A8_TYPELESS_SRGB:
2147 // This format is not implemented in Vulkan.
2148 break;
2149
2150 case angle::FormatID::R8G8B8A8_UINT:
2151 internalFormat = GL_RGBA8UI;
2152 actualImageFormatID = angle::FormatID::R8G8B8A8_UINT;
2153 vkImageFormat = VK_FORMAT_R8G8B8A8_UINT;
2154 imageInitializerFunction = nullptr;
2155 actualBufferFormatID = angle::FormatID::R8G8B8A8_UINT;
2156 vkBufferFormat = VK_FORMAT_R8G8B8A8_UINT;
2157 vkBufferFormatIsPacked = false;
2158 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
2159 vertexLoadRequiresConversion = false;
2160 break;
2161
2162 case angle::FormatID::R8G8B8A8_UNORM:
2163 internalFormat = GL_RGBA8;
2164 actualImageFormatID = angle::FormatID::R8G8B8A8_UNORM;
2165 vkImageFormat = VK_FORMAT_R8G8B8A8_UNORM;
2166 imageInitializerFunction = nullptr;
2167 {
2168 static constexpr BufferFormatInitInfo kInfo[] = {
2169 {angle::FormatID::R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, false,
2170 CopyNativeVertexData<GLubyte, 4, 4, 0>, false},
2171 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
2172 CopyTo32FVertexData<GLubyte, 4, 4, true>, true}};
2173 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2174 }
2175 break;
2176
2177 case angle::FormatID::R8G8B8A8_UNORM_SRGB:
2178 internalFormat = GL_SRGB8_ALPHA8;
2179 actualImageFormatID = angle::FormatID::R8G8B8A8_UNORM_SRGB;
2180 vkImageFormat = VK_FORMAT_R8G8B8A8_SRGB;
2181 imageInitializerFunction = nullptr;
2182 actualBufferFormatID = angle::FormatID::R8G8B8A8_UNORM_SRGB;
2183 vkBufferFormat = VK_FORMAT_R8G8B8A8_SRGB;
2184 vkBufferFormatIsPacked = false;
2185 vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>;
2186 vertexLoadRequiresConversion = false;
2187 break;
2188
2189 case angle::FormatID::R8G8B8A8_USCALED:
2190 internalFormat = GL_RGBA8_USCALED_ANGLEX;
2191 actualImageFormatID = angle::FormatID::R8G8B8A8_USCALED;
2192 vkImageFormat = VK_FORMAT_R8G8B8A8_USCALED;
2193 imageInitializerFunction = nullptr;
2194 {
2195 static constexpr BufferFormatInitInfo kInfo[] = {
2196 {angle::FormatID::R8G8B8A8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, false,
2197 CopyNativeVertexData<GLubyte, 4, 4, 0>, false},
2198 {angle::FormatID::R32G32B32A32_FLOAT, VK_FORMAT_R32G32B32A32_SFLOAT, false,
2199 CopyTo32FVertexData<GLubyte, 4, 4, false>, true}};
2200 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2201 }
2202 break;
2203
2204 case angle::FormatID::R8G8B8_SINT:
2205 internalFormat = GL_RGB8I;
2206 {
2207 static constexpr ImageFormatInitInfo kInfo[] = {
2208 {angle::FormatID::R8G8B8_SINT, VK_FORMAT_R8G8B8_SINT, nullptr},
2209 {angle::FormatID::R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SINT,
2210 Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>}};
2211 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2212 }
2213 {
2214 static constexpr BufferFormatInitInfo kInfo[] = {
2215 {angle::FormatID::R8G8B8_SINT, VK_FORMAT_R8G8B8_SINT, false,
2216 CopyNativeVertexData<GLbyte, 3, 3, 0>, false},
2217 {angle::FormatID::R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SINT, false,
2218 CopyNativeVertexData<GLbyte, 3, 4, 0>, true}};
2219 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2220 }
2221 break;
2222
2223 case angle::FormatID::R8G8B8_SNORM:
2224 internalFormat = GL_RGB8_SNORM;
2225 {
2226 static constexpr ImageFormatInitInfo kInfo[] = {
2227 {angle::FormatID::R8G8B8_SNORM, VK_FORMAT_R8G8B8_SNORM, nullptr},
2228 {angle::FormatID::R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SNORM,
2229 Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>}};
2230 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2231 }
2232 {
2233 static constexpr BufferFormatInitInfo kInfo[] = {
2234 {angle::FormatID::R8G8B8_SNORM, VK_FORMAT_R8G8B8_SNORM, false,
2235 CopyNativeVertexData<GLbyte, 3, 3, 0>, false},
2236 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
2237 CopyTo32FVertexData<GLbyte, 3, 3, true>, true}};
2238 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2239 }
2240 break;
2241
2242 case angle::FormatID::R8G8B8_SSCALED:
2243 internalFormat = GL_RGB8_SSCALED_ANGLEX;
2244 actualImageFormatID = angle::FormatID::R8G8B8_SSCALED;
2245 vkImageFormat = VK_FORMAT_R8G8B8_SSCALED;
2246 imageInitializerFunction = nullptr;
2247 {
2248 static constexpr BufferFormatInitInfo kInfo[] = {
2249 {angle::FormatID::R8G8B8_SSCALED, VK_FORMAT_R8G8B8_SSCALED, false,
2250 CopyNativeVertexData<GLbyte, 3, 3, 0>, false},
2251 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
2252 CopyTo32FVertexData<GLbyte, 3, 3, false>, true}};
2253 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2254 }
2255 break;
2256
2257 case angle::FormatID::R8G8B8_UINT:
2258 internalFormat = GL_RGB8UI;
2259 {
2260 static constexpr ImageFormatInitInfo kInfo[] = {
2261 {angle::FormatID::R8G8B8_UINT, VK_FORMAT_R8G8B8_UINT, nullptr},
2262 {angle::FormatID::R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT,
2263 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>}};
2264 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2265 }
2266 {
2267 static constexpr BufferFormatInitInfo kInfo[] = {
2268 {angle::FormatID::R8G8B8_UINT, VK_FORMAT_R8G8B8_UINT, false,
2269 CopyNativeVertexData<GLubyte, 3, 3, 0>, false},
2270 {angle::FormatID::R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UINT, false,
2271 CopyNativeVertexData<GLubyte, 3, 4, 0>, true}};
2272 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2273 }
2274 break;
2275
2276 case angle::FormatID::R8G8B8_UNORM:
2277 internalFormat = GL_RGB8;
2278 actualImageFormatID = angle::FormatID::R8G8B8A8_UNORM;
2279 vkImageFormat = VK_FORMAT_R8G8B8A8_UNORM;
2280 imageInitializerFunction = Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>;
2281 actualBufferFormatID = angle::FormatID::R32G32B32_FLOAT;
2282 vkBufferFormat = VK_FORMAT_R32G32B32_SFLOAT;
2283 vkBufferFormatIsPacked = false;
2284 vertexLoadFunction = CopyTo32FVertexData<GLubyte, 3, 3, true>;
2285 vertexLoadRequiresConversion = true;
2286 break;
2287
2288 case angle::FormatID::R8G8B8_UNORM_SRGB:
2289 internalFormat = GL_SRGB8;
2290 {
2291 static constexpr ImageFormatInitInfo kInfo[] = {
2292 {angle::FormatID::R8G8B8_UNORM_SRGB, VK_FORMAT_R8G8B8_SRGB, nullptr},
2293 {angle::FormatID::R8G8B8A8_UNORM_SRGB, VK_FORMAT_R8G8B8A8_SRGB,
2294 Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>}};
2295 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2296 }
2297 actualBufferFormatID = angle::FormatID::R8G8B8_UNORM_SRGB;
2298 vkBufferFormat = VK_FORMAT_R8G8B8_SRGB;
2299 vkBufferFormatIsPacked = false;
2300 vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>;
2301 vertexLoadRequiresConversion = false;
2302 break;
2303
2304 case angle::FormatID::R8G8B8_USCALED:
2305 internalFormat = GL_RGB8_USCALED_ANGLEX;
2306 actualImageFormatID = angle::FormatID::R8G8B8_USCALED;
2307 vkImageFormat = VK_FORMAT_R8G8B8_USCALED;
2308 imageInitializerFunction = nullptr;
2309 {
2310 static constexpr BufferFormatInitInfo kInfo[] = {
2311 {angle::FormatID::R8G8B8_USCALED, VK_FORMAT_R8G8B8_USCALED, false,
2312 CopyNativeVertexData<GLubyte, 3, 3, 0>, false},
2313 {angle::FormatID::R32G32B32_FLOAT, VK_FORMAT_R32G32B32_SFLOAT, false,
2314 CopyTo32FVertexData<GLubyte, 3, 3, false>, true}};
2315 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2316 }
2317 break;
2318
2319 case angle::FormatID::R8G8_SINT:
2320 internalFormat = GL_RG8I;
2321 actualImageFormatID = angle::FormatID::R8G8_SINT;
2322 vkImageFormat = VK_FORMAT_R8G8_SINT;
2323 imageInitializerFunction = nullptr;
2324 actualBufferFormatID = angle::FormatID::R8G8_SINT;
2325 vkBufferFormat = VK_FORMAT_R8G8_SINT;
2326 vkBufferFormatIsPacked = false;
2327 vertexLoadFunction = CopyNativeVertexData<GLbyte, 2, 2, 0>;
2328 vertexLoadRequiresConversion = false;
2329 break;
2330
2331 case angle::FormatID::R8G8_SNORM:
2332 internalFormat = GL_RG8_SNORM;
2333 actualImageFormatID = angle::FormatID::R8G8_SNORM;
2334 vkImageFormat = VK_FORMAT_R8G8_SNORM;
2335 imageInitializerFunction = nullptr;
2336 {
2337 static constexpr BufferFormatInitInfo kInfo[] = {
2338 {angle::FormatID::R8G8_SNORM, VK_FORMAT_R8G8_SNORM, false,
2339 CopyNativeVertexData<GLbyte, 2, 2, 0>, false},
2340 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
2341 CopyTo32FVertexData<GLbyte, 2, 2, true>, true}};
2342 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2343 }
2344 break;
2345
2346 case angle::FormatID::R8G8_SSCALED:
2347 internalFormat = GL_RG8_SSCALED_ANGLEX;
2348 actualImageFormatID = angle::FormatID::R8G8_SSCALED;
2349 vkImageFormat = VK_FORMAT_R8G8_SSCALED;
2350 imageInitializerFunction = nullptr;
2351 {
2352 static constexpr BufferFormatInitInfo kInfo[] = {
2353 {angle::FormatID::R8G8_SSCALED, VK_FORMAT_R8G8_SSCALED, false,
2354 CopyNativeVertexData<GLbyte, 2, 2, 0>, false},
2355 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
2356 CopyTo32FVertexData<GLbyte, 2, 2, false>, true}};
2357 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2358 }
2359 break;
2360
2361 case angle::FormatID::R8G8_UINT:
2362 internalFormat = GL_RG8UI;
2363 actualImageFormatID = angle::FormatID::R8G8_UINT;
2364 vkImageFormat = VK_FORMAT_R8G8_UINT;
2365 imageInitializerFunction = nullptr;
2366 actualBufferFormatID = angle::FormatID::R8G8_UINT;
2367 vkBufferFormat = VK_FORMAT_R8G8_UINT;
2368 vkBufferFormatIsPacked = false;
2369 vertexLoadFunction = CopyNativeVertexData<GLubyte, 2, 2, 0>;
2370 vertexLoadRequiresConversion = false;
2371 break;
2372
2373 case angle::FormatID::R8G8_UNORM:
2374 internalFormat = GL_RG8;
2375 actualImageFormatID = angle::FormatID::R8G8_UNORM;
2376 vkImageFormat = VK_FORMAT_R8G8_UNORM;
2377 imageInitializerFunction = nullptr;
2378 {
2379 static constexpr BufferFormatInitInfo kInfo[] = {
2380 {angle::FormatID::R8G8_UNORM, VK_FORMAT_R8G8_UNORM, false,
2381 CopyNativeVertexData<GLubyte, 2, 2, 0>, false},
2382 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
2383 CopyTo32FVertexData<GLubyte, 2, 2, true>, true}};
2384 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2385 }
2386 break;
2387
2388 case angle::FormatID::R8G8_USCALED:
2389 internalFormat = GL_RG8_USCALED_ANGLEX;
2390 actualImageFormatID = angle::FormatID::R8G8_USCALED;
2391 vkImageFormat = VK_FORMAT_R8G8_USCALED;
2392 imageInitializerFunction = nullptr;
2393 {
2394 static constexpr BufferFormatInitInfo kInfo[] = {
2395 {angle::FormatID::R8G8_USCALED, VK_FORMAT_R8G8_USCALED, false,
2396 CopyNativeVertexData<GLubyte, 2, 2, 0>, false},
2397 {angle::FormatID::R32G32_FLOAT, VK_FORMAT_R32G32_SFLOAT, false,
2398 CopyTo32FVertexData<GLubyte, 2, 2, false>, true}};
2399 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2400 }
2401 break;
2402
2403 case angle::FormatID::R8_SINT:
2404 internalFormat = GL_R8I;
2405 actualImageFormatID = angle::FormatID::R8_SINT;
2406 vkImageFormat = VK_FORMAT_R8_SINT;
2407 imageInitializerFunction = nullptr;
2408 actualBufferFormatID = angle::FormatID::R8_SINT;
2409 vkBufferFormat = VK_FORMAT_R8_SINT;
2410 vkBufferFormatIsPacked = false;
2411 vertexLoadFunction = CopyNativeVertexData<GLbyte, 1, 1, 0>;
2412 vertexLoadRequiresConversion = false;
2413 break;
2414
2415 case angle::FormatID::R8_SNORM:
2416 internalFormat = GL_R8_SNORM;
2417 actualImageFormatID = angle::FormatID::R8_SNORM;
2418 vkImageFormat = VK_FORMAT_R8_SNORM;
2419 imageInitializerFunction = nullptr;
2420 {
2421 static constexpr BufferFormatInitInfo kInfo[] = {
2422 {angle::FormatID::R8_SNORM, VK_FORMAT_R8_SNORM, false,
2423 CopyNativeVertexData<GLbyte, 1, 1, 0>, false},
2424 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
2425 CopyTo32FVertexData<GLbyte, 1, 1, true>, true}};
2426 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2427 }
2428 break;
2429
2430 case angle::FormatID::R8_SSCALED:
2431 internalFormat = GL_R8_SSCALED_ANGLEX;
2432 actualImageFormatID = angle::FormatID::R8_SSCALED;
2433 vkImageFormat = VK_FORMAT_R8_SSCALED;
2434 imageInitializerFunction = nullptr;
2435 {
2436 static constexpr BufferFormatInitInfo kInfo[] = {
2437 {angle::FormatID::R8_SSCALED, VK_FORMAT_R8_SSCALED, false,
2438 CopyNativeVertexData<GLbyte, 1, 1, 0>, false},
2439 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
2440 CopyTo32FVertexData<GLbyte, 1, 1, false>, true}};
2441 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2442 }
2443 break;
2444
2445 case angle::FormatID::R8_UINT:
2446 internalFormat = GL_R8UI;
2447 actualImageFormatID = angle::FormatID::R8_UINT;
2448 vkImageFormat = VK_FORMAT_R8_UINT;
2449 imageInitializerFunction = nullptr;
2450 actualBufferFormatID = angle::FormatID::R8_UINT;
2451 vkBufferFormat = VK_FORMAT_R8_UINT;
2452 vkBufferFormatIsPacked = false;
2453 vertexLoadFunction = CopyNativeVertexData<GLubyte, 1, 1, 0>;
2454 vertexLoadRequiresConversion = false;
2455 break;
2456
2457 case angle::FormatID::R8_UNORM:
2458 internalFormat = GL_R8;
2459 actualImageFormatID = angle::FormatID::R8_UNORM;
2460 vkImageFormat = VK_FORMAT_R8_UNORM;
2461 imageInitializerFunction = nullptr;
2462 {
2463 static constexpr BufferFormatInitInfo kInfo[] = {
2464 {angle::FormatID::R8_UNORM, VK_FORMAT_R8_UNORM, false,
2465 CopyNativeVertexData<GLubyte, 1, 1, 0>, false},
2466 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
2467 CopyTo32FVertexData<GLubyte, 1, 1, true>, true}};
2468 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2469 }
2470 break;
2471
2472 case angle::FormatID::R8_UNORM_SRGB:
2473 internalFormat = GL_SR8_EXT;
2474 actualImageFormatID = angle::FormatID::R8_UNORM_SRGB;
2475 vkImageFormat = VK_FORMAT_R8_SRGB;
2476 imageInitializerFunction = nullptr;
2477 actualBufferFormatID = angle::FormatID::R8_UNORM_SRGB;
2478 vkBufferFormat = VK_FORMAT_R8_SRGB;
2479 vkBufferFormatIsPacked = false;
2480 vertexLoadFunction = CopyNativeVertexData<GLubyte, 1, 1, 0>;
2481 vertexLoadRequiresConversion = false;
2482 break;
2483
2484 case angle::FormatID::R8_USCALED:
2485 internalFormat = GL_R8_USCALED_ANGLEX;
2486 actualImageFormatID = angle::FormatID::R8_USCALED;
2487 vkImageFormat = VK_FORMAT_R8_USCALED;
2488 imageInitializerFunction = nullptr;
2489 {
2490 static constexpr BufferFormatInitInfo kInfo[] = {
2491 {angle::FormatID::R8_USCALED, VK_FORMAT_R8_USCALED, false,
2492 CopyNativeVertexData<GLubyte, 1, 1, 0>, false},
2493 {angle::FormatID::R32_FLOAT, VK_FORMAT_R32_SFLOAT, false,
2494 CopyTo32FVertexData<GLubyte, 1, 1, false>, true}};
2495 initBufferFallback(renderer, kInfo, ArraySize(kInfo));
2496 }
2497 break;
2498
2499 case angle::FormatID::R9G9B9E5_SHAREDEXP:
2500 internalFormat = GL_RGB9_E5;
2501 actualImageFormatID = angle::FormatID::R9G9B9E5_SHAREDEXP;
2502 vkImageFormat = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
2503 imageInitializerFunction = nullptr;
2504 actualBufferFormatID = angle::FormatID::R9G9B9E5_SHAREDEXP;
2505 vkBufferFormat = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32;
2506 vkBufferFormatIsPacked = true;
2507 vertexLoadFunction = CopyNativeVertexData<GLuint, 1, 1, 0>;
2508 vertexLoadRequiresConversion = false;
2509 break;
2510
2511 case angle::FormatID::S8_UINT:
2512 internalFormat = GL_STENCIL_INDEX8;
2513 {
2514 static constexpr ImageFormatInitInfo kInfo[] = {
2515 {angle::FormatID::S8_UINT, VK_FORMAT_S8_UINT, nullptr},
2516 {angle::FormatID::D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, nullptr},
2517 {angle::FormatID::D32_FLOAT_S8X24_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, nullptr},
2518 {angle::FormatID::S8_UINT, VK_FORMAT_S8_UINT, nullptr}};
2519 initImageFallback(renderer, kInfo, ArraySize(kInfo));
2520 }
2521 actualBufferFormatID = angle::FormatID::S8_UINT;
2522 vkBufferFormat = VK_FORMAT_S8_UINT;
2523 vkBufferFormatIsPacked = false;
2524 vertexLoadFunction = nullptr;
2525 vertexLoadRequiresConversion = false;
2526 break;
2527
2528 case angle::FormatID::X2R10G10B10_SINT_VERTEX:
2529 internalFormat = GL_X2_RGB10_SINT_ANGLEX;
2530 actualImageFormatID = angle::FormatID::NONE;
2531 vkImageFormat = VK_FORMAT_UNDEFINED;
2532 imageInitializerFunction = nullptr;
2533 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2534 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2535 vkBufferFormatIsPacked = false;
2536 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<true, false>;
2537 vertexLoadRequiresConversion = true;
2538 break;
2539
2540 case angle::FormatID::X2R10G10B10_SNORM_VERTEX:
2541 internalFormat = GL_X2_RGB10_SNORM_ANGLEX;
2542 actualImageFormatID = angle::FormatID::NONE;
2543 vkImageFormat = VK_FORMAT_UNDEFINED;
2544 imageInitializerFunction = nullptr;
2545 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2546 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2547 vkBufferFormatIsPacked = false;
2548 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<true, true>;
2549 vertexLoadRequiresConversion = true;
2550 break;
2551
2552 case angle::FormatID::X2R10G10B10_SSCALED_VERTEX:
2553 internalFormat = GL_X2_RGB10_SSCALED_ANGLEX;
2554 actualImageFormatID = angle::FormatID::NONE;
2555 vkImageFormat = VK_FORMAT_UNDEFINED;
2556 imageInitializerFunction = nullptr;
2557 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2558 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2559 vkBufferFormatIsPacked = false;
2560 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<true, false>;
2561 vertexLoadRequiresConversion = true;
2562 break;
2563
2564 case angle::FormatID::X2R10G10B10_UINT_VERTEX:
2565 internalFormat = GL_X2_RGB10_UINT_ANGLEX;
2566 actualImageFormatID = angle::FormatID::NONE;
2567 vkImageFormat = VK_FORMAT_UNDEFINED;
2568 imageInitializerFunction = nullptr;
2569 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2570 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2571 vkBufferFormatIsPacked = false;
2572 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<false, false>;
2573 vertexLoadRequiresConversion = true;
2574 break;
2575
2576 case angle::FormatID::X2R10G10B10_UNORM_VERTEX:
2577 internalFormat = GL_X2_RGB10_UNORM_ANGLEX;
2578 actualImageFormatID = angle::FormatID::NONE;
2579 vkImageFormat = VK_FORMAT_UNDEFINED;
2580 imageInitializerFunction = nullptr;
2581 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2582 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2583 vkBufferFormatIsPacked = false;
2584 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<false, true>;
2585 vertexLoadRequiresConversion = true;
2586 break;
2587
2588 case angle::FormatID::X2R10G10B10_USCALED_VERTEX:
2589 internalFormat = GL_X2_RGB10_USCALED_ANGLEX;
2590 actualImageFormatID = angle::FormatID::NONE;
2591 vkImageFormat = VK_FORMAT_UNDEFINED;
2592 imageInitializerFunction = nullptr;
2593 actualBufferFormatID = angle::FormatID::R32G32B32A32_FLOAT;
2594 vkBufferFormat = VK_FORMAT_R32G32B32A32_SFLOAT;
2595 vkBufferFormatIsPacked = false;
2596 vertexLoadFunction = CopyXYZ10ToXYZW32FVertexData<false, false>;
2597 vertexLoadRequiresConversion = true;
2598 break;
2599
2600 default:
2601 UNREACHABLE();
2602 break;
2603 }
2604 }
2605
2606 } // namespace vk
2607
2608 } // namespace rx
2609