1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // This file is auto-generated from
6 // gpu/ipc/common/generate_vulkan_types.py
7 // It's formatted by clang-format using chromium coding style:
8 //    clang-format -i -style=chromium filename
9 // DO NOT EDIT!
10 
11 #ifndef GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_TRAITS_H_
12 #define GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_TRAITS_H_
13 
14 #include "base/containers/span.h"
15 #include "base/strings/string_piece.h"
16 #include "gpu/ipc/common/vulkan_types.h"
17 #include "gpu/ipc/common/vulkan_types.mojom-shared.h"
18 
19 namespace mojo {
20 
21 template <>
22 struct StructTraits<gpu::mojom::VkExtensionPropertiesDataView,
23                     VkExtensionProperties> {
24   static base::StringPiece extensionName(const VkExtensionProperties& input) {
25     return input.extensionName;
26   }
27 
28   static uint32_t specVersion(const VkExtensionProperties& input) {
29     return input.specVersion;
30   }
31 
32   static bool Read(gpu::mojom::VkExtensionPropertiesDataView data,
33                    VkExtensionProperties* out);
34 };
35 
36 template <>
37 struct StructTraits<gpu::mojom::VkLayerPropertiesDataView, VkLayerProperties> {
38   static base::StringPiece layerName(const VkLayerProperties& input) {
39     return input.layerName;
40   }
41 
42   static uint32_t specVersion(const VkLayerProperties& input) {
43     return input.specVersion;
44   }
45 
46   static uint32_t implementationVersion(const VkLayerProperties& input) {
47     return input.implementationVersion;
48   }
49 
50   static base::StringPiece description(const VkLayerProperties& input) {
51     return input.description;
52   }
53 
54   static bool Read(gpu::mojom::VkLayerPropertiesDataView data,
55                    VkLayerProperties* out);
56 };
57 
58 template <>
59 struct StructTraits<gpu::mojom::VkPhysicalDevicePropertiesDataView,
60                     VkPhysicalDeviceProperties> {
61   static uint32_t apiVersion(const VkPhysicalDeviceProperties& input) {
62     return input.apiVersion;
63   }
64 
65   static uint32_t driverVersion(const VkPhysicalDeviceProperties& input) {
66     return input.driverVersion;
67   }
68 
69   static uint32_t vendorID(const VkPhysicalDeviceProperties& input) {
70     return input.vendorID;
71   }
72 
73   static uint32_t deviceID(const VkPhysicalDeviceProperties& input) {
74     return input.deviceID;
75   }
76 
77   static VkPhysicalDeviceType deviceType(
78       const VkPhysicalDeviceProperties& input) {
79     return input.deviceType;
80   }
81 
82   static base::StringPiece deviceName(const VkPhysicalDeviceProperties& input) {
83     return input.deviceName;
84   }
85 
86   static base::span<const uint8_t> pipelineCacheUUID(
87       const VkPhysicalDeviceProperties& input) {
88     return base::make_span(input.pipelineCacheUUID);
89   }
90 
91   static const VkPhysicalDeviceLimits& limits(
92       const VkPhysicalDeviceProperties& input) {
93     return input.limits;
94   }
95 
96   static const VkPhysicalDeviceSparseProperties& sparseProperties(
97       const VkPhysicalDeviceProperties& input) {
98     return input.sparseProperties;
99   }
100 
101   static bool Read(gpu::mojom::VkPhysicalDevicePropertiesDataView data,
102                    VkPhysicalDeviceProperties* out);
103 };
104 
105 template <>
106 struct EnumTraits<gpu::mojom::VkPhysicalDeviceType, VkPhysicalDeviceType> {
107   static gpu::mojom::VkPhysicalDeviceType ToMojom(VkPhysicalDeviceType input) {
108     switch (input) {
109       case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_OTHER:
110         return gpu::mojom::VkPhysicalDeviceType::OTHER;
111       case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
112         return gpu::mojom::VkPhysicalDeviceType::INTEGRATED_GPU;
113       case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
114         return gpu::mojom::VkPhysicalDeviceType::DISCRETE_GPU;
115       case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
116         return gpu::mojom::VkPhysicalDeviceType::VIRTUAL_GPU;
117       case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_CPU:
118         return gpu::mojom::VkPhysicalDeviceType::CPU;
119       default:
120         NOTREACHED();
121         return gpu::mojom::VkPhysicalDeviceType::INVALID_VALUE;
122     }
123   }
124 
125   static bool FromMojom(gpu::mojom::VkPhysicalDeviceType input,
126                         VkPhysicalDeviceType* out) {
127     switch (input) {
128       case gpu::mojom::VkPhysicalDeviceType::OTHER:
129         *out = VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_OTHER;
130         return true;
131       case gpu::mojom::VkPhysicalDeviceType::INTEGRATED_GPU:
132         *out = VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
133         return true;
134       case gpu::mojom::VkPhysicalDeviceType::DISCRETE_GPU:
135         *out = VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
136         return true;
137       case gpu::mojom::VkPhysicalDeviceType::VIRTUAL_GPU:
138         *out = VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU;
139         return true;
140       case gpu::mojom::VkPhysicalDeviceType::CPU:
141         *out = VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_CPU;
142         return true;
143       case gpu::mojom::VkPhysicalDeviceType::INVALID_VALUE:
144         NOTREACHED();
145         return false;
146     }
147     NOTREACHED();
148     return false;
149   }
150 };
151 template <>
152 struct StructTraits<gpu::mojom::VkPhysicalDeviceLimitsDataView,
153                     VkPhysicalDeviceLimits> {
154   static uint32_t maxImageDimension1D(const VkPhysicalDeviceLimits& input) {
155     return input.maxImageDimension1D;
156   }
157 
158   static uint32_t maxImageDimension2D(const VkPhysicalDeviceLimits& input) {
159     return input.maxImageDimension2D;
160   }
161 
162   static uint32_t maxImageDimension3D(const VkPhysicalDeviceLimits& input) {
163     return input.maxImageDimension3D;
164   }
165 
166   static uint32_t maxImageDimensionCube(const VkPhysicalDeviceLimits& input) {
167     return input.maxImageDimensionCube;
168   }
169 
170   static uint32_t maxImageArrayLayers(const VkPhysicalDeviceLimits& input) {
171     return input.maxImageArrayLayers;
172   }
173 
174   static uint32_t maxTexelBufferElements(const VkPhysicalDeviceLimits& input) {
175     return input.maxTexelBufferElements;
176   }
177 
178   static uint32_t maxUniformBufferRange(const VkPhysicalDeviceLimits& input) {
179     return input.maxUniformBufferRange;
180   }
181 
182   static uint32_t maxStorageBufferRange(const VkPhysicalDeviceLimits& input) {
183     return input.maxStorageBufferRange;
184   }
185 
186   static uint32_t maxPushConstantsSize(const VkPhysicalDeviceLimits& input) {
187     return input.maxPushConstantsSize;
188   }
189 
190   static uint32_t maxMemoryAllocationCount(
191       const VkPhysicalDeviceLimits& input) {
192     return input.maxMemoryAllocationCount;
193   }
194 
195   static uint32_t maxSamplerAllocationCount(
196       const VkPhysicalDeviceLimits& input) {
197     return input.maxSamplerAllocationCount;
198   }
199 
200   static bool bufferImageGranularity(const VkPhysicalDeviceLimits& input) {
201     return input.bufferImageGranularity;
202   }
203 
204   static bool sparseAddressSpaceSize(const VkPhysicalDeviceLimits& input) {
205     return input.sparseAddressSpaceSize;
206   }
207 
208   static uint32_t maxBoundDescriptorSets(const VkPhysicalDeviceLimits& input) {
209     return input.maxBoundDescriptorSets;
210   }
211 
212   static uint32_t maxPerStageDescriptorSamplers(
213       const VkPhysicalDeviceLimits& input) {
214     return input.maxPerStageDescriptorSamplers;
215   }
216 
217   static uint32_t maxPerStageDescriptorUniformBuffers(
218       const VkPhysicalDeviceLimits& input) {
219     return input.maxPerStageDescriptorUniformBuffers;
220   }
221 
222   static uint32_t maxPerStageDescriptorStorageBuffers(
223       const VkPhysicalDeviceLimits& input) {
224     return input.maxPerStageDescriptorStorageBuffers;
225   }
226 
227   static uint32_t maxPerStageDescriptorSampledImages(
228       const VkPhysicalDeviceLimits& input) {
229     return input.maxPerStageDescriptorSampledImages;
230   }
231 
232   static uint32_t maxPerStageDescriptorStorageImages(
233       const VkPhysicalDeviceLimits& input) {
234     return input.maxPerStageDescriptorStorageImages;
235   }
236 
237   static uint32_t maxPerStageDescriptorInputAttachments(
238       const VkPhysicalDeviceLimits& input) {
239     return input.maxPerStageDescriptorInputAttachments;
240   }
241 
242   static uint32_t maxPerStageResources(const VkPhysicalDeviceLimits& input) {
243     return input.maxPerStageResources;
244   }
245 
246   static uint32_t maxDescriptorSetSamplers(
247       const VkPhysicalDeviceLimits& input) {
248     return input.maxDescriptorSetSamplers;
249   }
250 
251   static uint32_t maxDescriptorSetUniformBuffers(
252       const VkPhysicalDeviceLimits& input) {
253     return input.maxDescriptorSetUniformBuffers;
254   }
255 
256   static uint32_t maxDescriptorSetUniformBuffersDynamic(
257       const VkPhysicalDeviceLimits& input) {
258     return input.maxDescriptorSetUniformBuffersDynamic;
259   }
260 
261   static uint32_t maxDescriptorSetStorageBuffers(
262       const VkPhysicalDeviceLimits& input) {
263     return input.maxDescriptorSetStorageBuffers;
264   }
265 
266   static uint32_t maxDescriptorSetStorageBuffersDynamic(
267       const VkPhysicalDeviceLimits& input) {
268     return input.maxDescriptorSetStorageBuffersDynamic;
269   }
270 
271   static uint32_t maxDescriptorSetSampledImages(
272       const VkPhysicalDeviceLimits& input) {
273     return input.maxDescriptorSetSampledImages;
274   }
275 
276   static uint32_t maxDescriptorSetStorageImages(
277       const VkPhysicalDeviceLimits& input) {
278     return input.maxDescriptorSetStorageImages;
279   }
280 
281   static uint32_t maxDescriptorSetInputAttachments(
282       const VkPhysicalDeviceLimits& input) {
283     return input.maxDescriptorSetInputAttachments;
284   }
285 
286   static uint32_t maxVertexInputAttributes(
287       const VkPhysicalDeviceLimits& input) {
288     return input.maxVertexInputAttributes;
289   }
290 
291   static uint32_t maxVertexInputBindings(const VkPhysicalDeviceLimits& input) {
292     return input.maxVertexInputBindings;
293   }
294 
295   static uint32_t maxVertexInputAttributeOffset(
296       const VkPhysicalDeviceLimits& input) {
297     return input.maxVertexInputAttributeOffset;
298   }
299 
300   static uint32_t maxVertexInputBindingStride(
301       const VkPhysicalDeviceLimits& input) {
302     return input.maxVertexInputBindingStride;
303   }
304 
305   static uint32_t maxVertexOutputComponents(
306       const VkPhysicalDeviceLimits& input) {
307     return input.maxVertexOutputComponents;
308   }
309 
310   static uint32_t maxTessellationGenerationLevel(
311       const VkPhysicalDeviceLimits& input) {
312     return input.maxTessellationGenerationLevel;
313   }
314 
315   static uint32_t maxTessellationPatchSize(
316       const VkPhysicalDeviceLimits& input) {
317     return input.maxTessellationPatchSize;
318   }
319 
320   static uint32_t maxTessellationControlPerVertexInputComponents(
321       const VkPhysicalDeviceLimits& input) {
322     return input.maxTessellationControlPerVertexInputComponents;
323   }
324 
325   static uint32_t maxTessellationControlPerVertexOutputComponents(
326       const VkPhysicalDeviceLimits& input) {
327     return input.maxTessellationControlPerVertexOutputComponents;
328   }
329 
330   static uint32_t maxTessellationControlPerPatchOutputComponents(
331       const VkPhysicalDeviceLimits& input) {
332     return input.maxTessellationControlPerPatchOutputComponents;
333   }
334 
335   static uint32_t maxTessellationControlTotalOutputComponents(
336       const VkPhysicalDeviceLimits& input) {
337     return input.maxTessellationControlTotalOutputComponents;
338   }
339 
340   static uint32_t maxTessellationEvaluationInputComponents(
341       const VkPhysicalDeviceLimits& input) {
342     return input.maxTessellationEvaluationInputComponents;
343   }
344 
345   static uint32_t maxTessellationEvaluationOutputComponents(
346       const VkPhysicalDeviceLimits& input) {
347     return input.maxTessellationEvaluationOutputComponents;
348   }
349 
350   static uint32_t maxGeometryShaderInvocations(
351       const VkPhysicalDeviceLimits& input) {
352     return input.maxGeometryShaderInvocations;
353   }
354 
355   static uint32_t maxGeometryInputComponents(
356       const VkPhysicalDeviceLimits& input) {
357     return input.maxGeometryInputComponents;
358   }
359 
360   static uint32_t maxGeometryOutputComponents(
361       const VkPhysicalDeviceLimits& input) {
362     return input.maxGeometryOutputComponents;
363   }
364 
365   static uint32_t maxGeometryOutputVertices(
366       const VkPhysicalDeviceLimits& input) {
367     return input.maxGeometryOutputVertices;
368   }
369 
370   static uint32_t maxGeometryTotalOutputComponents(
371       const VkPhysicalDeviceLimits& input) {
372     return input.maxGeometryTotalOutputComponents;
373   }
374 
375   static uint32_t maxFragmentInputComponents(
376       const VkPhysicalDeviceLimits& input) {
377     return input.maxFragmentInputComponents;
378   }
379 
380   static uint32_t maxFragmentOutputAttachments(
381       const VkPhysicalDeviceLimits& input) {
382     return input.maxFragmentOutputAttachments;
383   }
384 
385   static uint32_t maxFragmentDualSrcAttachments(
386       const VkPhysicalDeviceLimits& input) {
387     return input.maxFragmentDualSrcAttachments;
388   }
389 
390   static uint32_t maxFragmentCombinedOutputResources(
391       const VkPhysicalDeviceLimits& input) {
392     return input.maxFragmentCombinedOutputResources;
393   }
394 
395   static uint32_t maxComputeSharedMemorySize(
396       const VkPhysicalDeviceLimits& input) {
397     return input.maxComputeSharedMemorySize;
398   }
399 
400   static base::span<const uint32_t> maxComputeWorkGroupCount(
401       const VkPhysicalDeviceLimits& input) {
402     return base::make_span(input.maxComputeWorkGroupCount);
403   }
404 
405   static uint32_t maxComputeWorkGroupInvocations(
406       const VkPhysicalDeviceLimits& input) {
407     return input.maxComputeWorkGroupInvocations;
408   }
409 
410   static base::span<const uint32_t> maxComputeWorkGroupSize(
411       const VkPhysicalDeviceLimits& input) {
412     return base::make_span(input.maxComputeWorkGroupSize);
413   }
414 
415   static uint32_t subPixelPrecisionBits(const VkPhysicalDeviceLimits& input) {
416     return input.subPixelPrecisionBits;
417   }
418 
419   static uint32_t subTexelPrecisionBits(const VkPhysicalDeviceLimits& input) {
420     return input.subTexelPrecisionBits;
421   }
422 
423   static uint32_t mipmapPrecisionBits(const VkPhysicalDeviceLimits& input) {
424     return input.mipmapPrecisionBits;
425   }
426 
427   static uint32_t maxDrawIndexedIndexValue(
428       const VkPhysicalDeviceLimits& input) {
429     return input.maxDrawIndexedIndexValue;
430   }
431 
432   static uint32_t maxDrawIndirectCount(const VkPhysicalDeviceLimits& input) {
433     return input.maxDrawIndirectCount;
434   }
435 
436   static float maxSamplerLodBias(const VkPhysicalDeviceLimits& input) {
437     return input.maxSamplerLodBias;
438   }
439 
440   static float maxSamplerAnisotropy(const VkPhysicalDeviceLimits& input) {
441     return input.maxSamplerAnisotropy;
442   }
443 
444   static uint32_t maxViewports(const VkPhysicalDeviceLimits& input) {
445     return input.maxViewports;
446   }
447 
448   static base::span<const uint32_t> maxViewportDimensions(
449       const VkPhysicalDeviceLimits& input) {
450     return base::make_span(input.maxViewportDimensions);
451   }
452 
453   static base::span<const float> viewportBoundsRange(
454       const VkPhysicalDeviceLimits& input) {
455     return base::make_span(input.viewportBoundsRange);
456   }
457 
458   static uint32_t viewportSubPixelBits(const VkPhysicalDeviceLimits& input) {
459     return input.viewportSubPixelBits;
460   }
461 
462   static size_t minMemoryMapAlignment(const VkPhysicalDeviceLimits& input) {
463     return input.minMemoryMapAlignment;
464   }
465 
466   static bool minTexelBufferOffsetAlignment(
467       const VkPhysicalDeviceLimits& input) {
468     return input.minTexelBufferOffsetAlignment;
469   }
470 
471   static bool minUniformBufferOffsetAlignment(
472       const VkPhysicalDeviceLimits& input) {
473     return input.minUniformBufferOffsetAlignment;
474   }
475 
476   static bool minStorageBufferOffsetAlignment(
477       const VkPhysicalDeviceLimits& input) {
478     return input.minStorageBufferOffsetAlignment;
479   }
480 
481   static int32_t minTexelOffset(const VkPhysicalDeviceLimits& input) {
482     return input.minTexelOffset;
483   }
484 
485   static uint32_t maxTexelOffset(const VkPhysicalDeviceLimits& input) {
486     return input.maxTexelOffset;
487   }
488 
489   static int32_t minTexelGatherOffset(const VkPhysicalDeviceLimits& input) {
490     return input.minTexelGatherOffset;
491   }
492 
493   static uint32_t maxTexelGatherOffset(const VkPhysicalDeviceLimits& input) {
494     return input.maxTexelGatherOffset;
495   }
496 
497   static float minInterpolationOffset(const VkPhysicalDeviceLimits& input) {
498     return input.minInterpolationOffset;
499   }
500 
501   static float maxInterpolationOffset(const VkPhysicalDeviceLimits& input) {
502     return input.maxInterpolationOffset;
503   }
504 
505   static uint32_t subPixelInterpolationOffsetBits(
506       const VkPhysicalDeviceLimits& input) {
507     return input.subPixelInterpolationOffsetBits;
508   }
509 
510   static uint32_t maxFramebufferWidth(const VkPhysicalDeviceLimits& input) {
511     return input.maxFramebufferWidth;
512   }
513 
514   static uint32_t maxFramebufferHeight(const VkPhysicalDeviceLimits& input) {
515     return input.maxFramebufferHeight;
516   }
517 
518   static uint32_t maxFramebufferLayers(const VkPhysicalDeviceLimits& input) {
519     return input.maxFramebufferLayers;
520   }
521 
522   static VkSampleCountFlags framebufferColorSampleCounts(
523       const VkPhysicalDeviceLimits& input) {
524     return input.framebufferColorSampleCounts;
525   }
526 
527   static VkSampleCountFlags framebufferDepthSampleCounts(
528       const VkPhysicalDeviceLimits& input) {
529     return input.framebufferDepthSampleCounts;
530   }
531 
532   static VkSampleCountFlags framebufferStencilSampleCounts(
533       const VkPhysicalDeviceLimits& input) {
534     return input.framebufferStencilSampleCounts;
535   }
536 
537   static VkSampleCountFlags framebufferNoAttachmentsSampleCounts(
538       const VkPhysicalDeviceLimits& input) {
539     return input.framebufferNoAttachmentsSampleCounts;
540   }
541 
542   static uint32_t maxColorAttachments(const VkPhysicalDeviceLimits& input) {
543     return input.maxColorAttachments;
544   }
545 
546   static VkSampleCountFlags sampledImageColorSampleCounts(
547       const VkPhysicalDeviceLimits& input) {
548     return input.sampledImageColorSampleCounts;
549   }
550 
551   static VkSampleCountFlags sampledImageIntegerSampleCounts(
552       const VkPhysicalDeviceLimits& input) {
553     return input.sampledImageIntegerSampleCounts;
554   }
555 
556   static VkSampleCountFlags sampledImageDepthSampleCounts(
557       const VkPhysicalDeviceLimits& input) {
558     return input.sampledImageDepthSampleCounts;
559   }
560 
561   static VkSampleCountFlags sampledImageStencilSampleCounts(
562       const VkPhysicalDeviceLimits& input) {
563     return input.sampledImageStencilSampleCounts;
564   }
565 
566   static VkSampleCountFlags storageImageSampleCounts(
567       const VkPhysicalDeviceLimits& input) {
568     return input.storageImageSampleCounts;
569   }
570 
571   static uint32_t maxSampleMaskWords(const VkPhysicalDeviceLimits& input) {
572     return input.maxSampleMaskWords;
573   }
574 
575   static bool timestampComputeAndGraphics(const VkPhysicalDeviceLimits& input) {
576     return input.timestampComputeAndGraphics;
577   }
578 
579   static float timestampPeriod(const VkPhysicalDeviceLimits& input) {
580     return input.timestampPeriod;
581   }
582 
583   static uint32_t maxClipDistances(const VkPhysicalDeviceLimits& input) {
584     return input.maxClipDistances;
585   }
586 
587   static uint32_t maxCullDistances(const VkPhysicalDeviceLimits& input) {
588     return input.maxCullDistances;
589   }
590 
591   static uint32_t maxCombinedClipAndCullDistances(
592       const VkPhysicalDeviceLimits& input) {
593     return input.maxCombinedClipAndCullDistances;
594   }
595 
596   static uint32_t discreteQueuePriorities(const VkPhysicalDeviceLimits& input) {
597     return input.discreteQueuePriorities;
598   }
599 
600   static base::span<const float> pointSizeRange(
601       const VkPhysicalDeviceLimits& input) {
602     return base::make_span(input.pointSizeRange);
603   }
604 
605   static base::span<const float> lineWidthRange(
606       const VkPhysicalDeviceLimits& input) {
607     return base::make_span(input.lineWidthRange);
608   }
609 
610   static float pointSizeGranularity(const VkPhysicalDeviceLimits& input) {
611     return input.pointSizeGranularity;
612   }
613 
614   static float lineWidthGranularity(const VkPhysicalDeviceLimits& input) {
615     return input.lineWidthGranularity;
616   }
617 
618   static bool strictLines(const VkPhysicalDeviceLimits& input) {
619     return input.strictLines;
620   }
621 
622   static bool standardSampleLocations(const VkPhysicalDeviceLimits& input) {
623     return input.standardSampleLocations;
624   }
625 
626   static bool optimalBufferCopyOffsetAlignment(
627       const VkPhysicalDeviceLimits& input) {
628     return input.optimalBufferCopyOffsetAlignment;
629   }
630 
631   static bool optimalBufferCopyRowPitchAlignment(
632       const VkPhysicalDeviceLimits& input) {
633     return input.optimalBufferCopyRowPitchAlignment;
634   }
635 
636   static bool nonCoherentAtomSize(const VkPhysicalDeviceLimits& input) {
637     return input.nonCoherentAtomSize;
638   }
639 
640   static bool Read(gpu::mojom::VkPhysicalDeviceLimitsDataView data,
641                    VkPhysicalDeviceLimits* out);
642 };
643 
644 template <>
645 struct StructTraits<gpu::mojom::VkPhysicalDeviceSparsePropertiesDataView,
646                     VkPhysicalDeviceSparseProperties> {
647   static bool residencyStandard2DBlockShape(
648       const VkPhysicalDeviceSparseProperties& input) {
649     return input.residencyStandard2DBlockShape;
650   }
651 
652   static bool residencyStandard2DMultisampleBlockShape(
653       const VkPhysicalDeviceSparseProperties& input) {
654     return input.residencyStandard2DMultisampleBlockShape;
655   }
656 
657   static bool residencyStandard3DBlockShape(
658       const VkPhysicalDeviceSparseProperties& input) {
659     return input.residencyStandard3DBlockShape;
660   }
661 
662   static bool residencyAlignedMipSize(
663       const VkPhysicalDeviceSparseProperties& input) {
664     return input.residencyAlignedMipSize;
665   }
666 
667   static bool residencyNonResidentStrict(
668       const VkPhysicalDeviceSparseProperties& input) {
669     return input.residencyNonResidentStrict;
670   }
671 
672   static bool Read(gpu::mojom::VkPhysicalDeviceSparsePropertiesDataView data,
673                    VkPhysicalDeviceSparseProperties* out);
674 };
675 
676 template <>
677 struct StructTraits<gpu::mojom::VkPhysicalDeviceFeaturesDataView,
678                     VkPhysicalDeviceFeatures> {
679   static bool robustBufferAccess(const VkPhysicalDeviceFeatures& input) {
680     return input.robustBufferAccess;
681   }
682 
683   static bool fullDrawIndexUint32(const VkPhysicalDeviceFeatures& input) {
684     return input.fullDrawIndexUint32;
685   }
686 
687   static bool imageCubeArray(const VkPhysicalDeviceFeatures& input) {
688     return input.imageCubeArray;
689   }
690 
691   static bool independentBlend(const VkPhysicalDeviceFeatures& input) {
692     return input.independentBlend;
693   }
694 
695   static bool geometryShader(const VkPhysicalDeviceFeatures& input) {
696     return input.geometryShader;
697   }
698 
699   static bool tessellationShader(const VkPhysicalDeviceFeatures& input) {
700     return input.tessellationShader;
701   }
702 
703   static bool sampleRateShading(const VkPhysicalDeviceFeatures& input) {
704     return input.sampleRateShading;
705   }
706 
707   static bool dualSrcBlend(const VkPhysicalDeviceFeatures& input) {
708     return input.dualSrcBlend;
709   }
710 
711   static bool logicOp(const VkPhysicalDeviceFeatures& input) {
712     return input.logicOp;
713   }
714 
715   static bool multiDrawIndirect(const VkPhysicalDeviceFeatures& input) {
716     return input.multiDrawIndirect;
717   }
718 
719   static bool drawIndirectFirstInstance(const VkPhysicalDeviceFeatures& input) {
720     return input.drawIndirectFirstInstance;
721   }
722 
723   static bool depthClamp(const VkPhysicalDeviceFeatures& input) {
724     return input.depthClamp;
725   }
726 
727   static bool depthBiasClamp(const VkPhysicalDeviceFeatures& input) {
728     return input.depthBiasClamp;
729   }
730 
731   static bool fillModeNonSolid(const VkPhysicalDeviceFeatures& input) {
732     return input.fillModeNonSolid;
733   }
734 
735   static bool depthBounds(const VkPhysicalDeviceFeatures& input) {
736     return input.depthBounds;
737   }
738 
739   static bool wideLines(const VkPhysicalDeviceFeatures& input) {
740     return input.wideLines;
741   }
742 
743   static bool largePoints(const VkPhysicalDeviceFeatures& input) {
744     return input.largePoints;
745   }
746 
747   static bool alphaToOne(const VkPhysicalDeviceFeatures& input) {
748     return input.alphaToOne;
749   }
750 
751   static bool multiViewport(const VkPhysicalDeviceFeatures& input) {
752     return input.multiViewport;
753   }
754 
755   static bool samplerAnisotropy(const VkPhysicalDeviceFeatures& input) {
756     return input.samplerAnisotropy;
757   }
758 
759   static bool textureCompressionETC2(const VkPhysicalDeviceFeatures& input) {
760     return input.textureCompressionETC2;
761   }
762 
763   static bool textureCompressionASTC_LDR(
764       const VkPhysicalDeviceFeatures& input) {
765     return input.textureCompressionASTC_LDR;
766   }
767 
768   static bool textureCompressionBC(const VkPhysicalDeviceFeatures& input) {
769     return input.textureCompressionBC;
770   }
771 
772   static bool occlusionQueryPrecise(const VkPhysicalDeviceFeatures& input) {
773     return input.occlusionQueryPrecise;
774   }
775 
776   static bool pipelineStatisticsQuery(const VkPhysicalDeviceFeatures& input) {
777     return input.pipelineStatisticsQuery;
778   }
779 
780   static bool vertexPipelineStoresAndAtomics(
781       const VkPhysicalDeviceFeatures& input) {
782     return input.vertexPipelineStoresAndAtomics;
783   }
784 
785   static bool fragmentStoresAndAtomics(const VkPhysicalDeviceFeatures& input) {
786     return input.fragmentStoresAndAtomics;
787   }
788 
789   static bool shaderTessellationAndGeometryPointSize(
790       const VkPhysicalDeviceFeatures& input) {
791     return input.shaderTessellationAndGeometryPointSize;
792   }
793 
794   static bool shaderImageGatherExtended(const VkPhysicalDeviceFeatures& input) {
795     return input.shaderImageGatherExtended;
796   }
797 
798   static bool shaderStorageImageExtendedFormats(
799       const VkPhysicalDeviceFeatures& input) {
800     return input.shaderStorageImageExtendedFormats;
801   }
802 
803   static bool shaderStorageImageMultisample(
804       const VkPhysicalDeviceFeatures& input) {
805     return input.shaderStorageImageMultisample;
806   }
807 
808   static bool shaderStorageImageReadWithoutFormat(
809       const VkPhysicalDeviceFeatures& input) {
810     return input.shaderStorageImageReadWithoutFormat;
811   }
812 
813   static bool shaderStorageImageWriteWithoutFormat(
814       const VkPhysicalDeviceFeatures& input) {
815     return input.shaderStorageImageWriteWithoutFormat;
816   }
817 
818   static bool shaderUniformBufferArrayDynamicIndexing(
819       const VkPhysicalDeviceFeatures& input) {
820     return input.shaderUniformBufferArrayDynamicIndexing;
821   }
822 
823   static bool shaderSampledImageArrayDynamicIndexing(
824       const VkPhysicalDeviceFeatures& input) {
825     return input.shaderSampledImageArrayDynamicIndexing;
826   }
827 
828   static bool shaderStorageBufferArrayDynamicIndexing(
829       const VkPhysicalDeviceFeatures& input) {
830     return input.shaderStorageBufferArrayDynamicIndexing;
831   }
832 
833   static bool shaderStorageImageArrayDynamicIndexing(
834       const VkPhysicalDeviceFeatures& input) {
835     return input.shaderStorageImageArrayDynamicIndexing;
836   }
837 
838   static bool shaderClipDistance(const VkPhysicalDeviceFeatures& input) {
839     return input.shaderClipDistance;
840   }
841 
842   static bool shaderCullDistance(const VkPhysicalDeviceFeatures& input) {
843     return input.shaderCullDistance;
844   }
845 
846   static bool shaderFloat64(const VkPhysicalDeviceFeatures& input) {
847     return input.shaderFloat64;
848   }
849 
850   static bool shaderInt64(const VkPhysicalDeviceFeatures& input) {
851     return input.shaderInt64;
852   }
853 
854   static bool shaderInt16(const VkPhysicalDeviceFeatures& input) {
855     return input.shaderInt16;
856   }
857 
858   static bool shaderResourceResidency(const VkPhysicalDeviceFeatures& input) {
859     return input.shaderResourceResidency;
860   }
861 
862   static bool shaderResourceMinLod(const VkPhysicalDeviceFeatures& input) {
863     return input.shaderResourceMinLod;
864   }
865 
866   static bool sparseBinding(const VkPhysicalDeviceFeatures& input) {
867     return input.sparseBinding;
868   }
869 
870   static bool sparseResidencyBuffer(const VkPhysicalDeviceFeatures& input) {
871     return input.sparseResidencyBuffer;
872   }
873 
874   static bool sparseResidencyImage2D(const VkPhysicalDeviceFeatures& input) {
875     return input.sparseResidencyImage2D;
876   }
877 
878   static bool sparseResidencyImage3D(const VkPhysicalDeviceFeatures& input) {
879     return input.sparseResidencyImage3D;
880   }
881 
882   static bool sparseResidency2Samples(const VkPhysicalDeviceFeatures& input) {
883     return input.sparseResidency2Samples;
884   }
885 
886   static bool sparseResidency4Samples(const VkPhysicalDeviceFeatures& input) {
887     return input.sparseResidency4Samples;
888   }
889 
890   static bool sparseResidency8Samples(const VkPhysicalDeviceFeatures& input) {
891     return input.sparseResidency8Samples;
892   }
893 
894   static bool sparseResidency16Samples(const VkPhysicalDeviceFeatures& input) {
895     return input.sparseResidency16Samples;
896   }
897 
898   static bool sparseResidencyAliased(const VkPhysicalDeviceFeatures& input) {
899     return input.sparseResidencyAliased;
900   }
901 
902   static bool variableMultisampleRate(const VkPhysicalDeviceFeatures& input) {
903     return input.variableMultisampleRate;
904   }
905 
906   static bool inheritedQueries(const VkPhysicalDeviceFeatures& input) {
907     return input.inheritedQueries;
908   }
909 
910   static bool Read(gpu::mojom::VkPhysicalDeviceFeaturesDataView data,
911                    VkPhysicalDeviceFeatures* out);
912 };
913 
914 template <>
915 struct StructTraits<gpu::mojom::VkQueueFamilyPropertiesDataView,
916                     VkQueueFamilyProperties> {
917   static VkQueueFlags queueFlags(const VkQueueFamilyProperties& input) {
918     return input.queueFlags;
919   }
920 
921   static uint32_t queueCount(const VkQueueFamilyProperties& input) {
922     return input.queueCount;
923   }
924 
925   static uint32_t timestampValidBits(const VkQueueFamilyProperties& input) {
926     return input.timestampValidBits;
927   }
928 
929   static const VkExtent3D& minImageTransferGranularity(
930       const VkQueueFamilyProperties& input) {
931     return input.minImageTransferGranularity;
932   }
933 
934   static bool Read(gpu::mojom::VkQueueFamilyPropertiesDataView data,
935                    VkQueueFamilyProperties* out);
936 };
937 
938 template <>
939 struct StructTraits<gpu::mojom::VkExtent3DDataView, VkExtent3D> {
940   static uint32_t width(const VkExtent3D& input) { return input.width; }
941 
942   static uint32_t height(const VkExtent3D& input) { return input.height; }
943 
944   static uint32_t depth(const VkExtent3D& input) { return input.depth; }
945 
946   static bool Read(gpu::mojom::VkExtent3DDataView data, VkExtent3D* out);
947 };
948 
949 }  // namespace mojo
950 
951 #endif  // GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_TRAITS_H_
952