1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
|
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2015-2016 The Khronos Group Inc.
// Copyright (c) 2015-2016 Valve Corporation
// Copyright (c) 2015-2016 LunarG, Inc.
// Copyright (c) 2015-2016 Google, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///////////////////////////////////////////////////////////////////////////////
#ifndef VKJSON_H_
#define VKJSON_H_
#include <string.h>
#include <vulkan/vulkan.h>
#include <map>
#include <string>
#include <vector>
#ifdef WIN32
#undef min
#undef max
#endif
struct VkJsonLayer {
VkLayerProperties properties;
std::vector<VkExtensionProperties> extensions;
};
struct VkJsonKHRVariablePointers {
VkJsonKHRVariablePointers() {
reported = false;
memset(&variable_pointer_features_khr, 0,
sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
memset(&variable_pointers_features_khr, 0,
sizeof(VkPhysicalDeviceVariablePointersFeaturesKHR));
}
bool reported;
VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr;
VkPhysicalDeviceVariablePointersFeaturesKHR variable_pointers_features_khr;
};
struct VkJsonKHRShaderFloat16Int8 {
VkJsonKHRShaderFloat16Int8() {
reported = false;
memset(&shader_float16_int8_features_khr, 0,
sizeof(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR));
memset(&float16_int8_features_khr, 0,
sizeof(VkPhysicalDeviceFloat16Int8FeaturesKHR));
}
bool reported;
VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr;
VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features_khr;
};
struct VkJsonExtImage2dViewOf3d {
VkJsonExtImage2dViewOf3d() {
reported = false;
memset(&image_2d_view_of_3d_features_ext, 0,
sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT));
}
bool reported;
VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d_features_ext;
};
struct VkJsonExtCustomBorderColor {
VkJsonExtCustomBorderColor() {
reported = false;
memset(&custom_border_color_features_ext, 0,
sizeof(VkPhysicalDeviceCustomBorderColorFeaturesEXT));
}
bool reported;
VkPhysicalDeviceCustomBorderColorFeaturesEXT custom_border_color_features_ext;
};
struct VkJsonExtPrimitiveTopologyListRestart {
VkJsonExtPrimitiveTopologyListRestart() {
reported = false;
memset(&primitive_topology_list_restart_features_ext, 0,
sizeof(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT));
}
bool reported;
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
primitive_topology_list_restart_features_ext;
};
struct VkJsonExtProvokingVertex {
VkJsonExtProvokingVertex() {
reported = false;
memset(&provoking_vertex_features_ext, 0,
sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT));
}
bool reported;
VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex_features_ext;
};
struct VkJsonKHRIndexTypeUint8 {
VkJsonKHRIndexTypeUint8() {
reported = false;
memset(&index_type_uint8_features_khr, 0,
sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesKHR));
}
bool reported;
VkPhysicalDeviceIndexTypeUint8FeaturesKHR index_type_uint8_features_khr;
};
struct VkJsonExtIndexTypeUint8 {
VkJsonExtIndexTypeUint8() {
reported = false;
memset(&index_type_uint8_features_ext, 0,
sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesEXT));
}
bool reported;
VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8_features_ext;
};
struct VkJsonKHRVertexAttributeDivisor {
VkJsonKHRVertexAttributeDivisor() {
reported = false;
memset(&vertex_attribute_divisor_features_khr, 0,
sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR));
}
bool reported;
VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR
vertex_attribute_divisor_features_khr;
};
struct VkJsonExtVertexAttributeDivisor {
VkJsonExtVertexAttributeDivisor() {
reported = false;
memset(&vertex_attribute_divisor_features_ext, 0,
sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT));
}
bool reported;
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
vertex_attribute_divisor_features_ext;
};
struct VkJsonExtTransformFeedback {
VkJsonExtTransformFeedback() {
reported = false;
memset(&transform_feedback_features_ext, 0,
sizeof(VkPhysicalDeviceTransformFeedbackFeaturesEXT));
}
bool reported;
VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback_features_ext;
};
struct VkJsonKHRShaderSubgroupUniformControlFlow {
VkJsonKHRShaderSubgroupUniformControlFlow() {
reported = false;
memset(&shader_subgroup_uniform_control_flow_features_khr, 0,
sizeof(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
}
bool reported;
VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
shader_subgroup_uniform_control_flow_features_khr;
};
struct VkJsonKHRShaderSubgroupExtendedTypes {
VkJsonKHRShaderSubgroupExtendedTypes() {
reported = false;
memset(&shader_subgroup_extended_types_features_khr, 0,
sizeof(VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR));
}
bool reported;
VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR
shader_subgroup_extended_types_features_khr;
};
struct VkJsonKHR8bitStorage {
VkJsonKHR8bitStorage() {
reported = false;
memset(&bit8_storage_features_khr, 0,
sizeof(VkPhysicalDevice8BitStorageFeaturesKHR));
}
bool reported;
VkPhysicalDevice8BitStorageFeaturesKHR bit8_storage_features_khr;
};
struct VkJsonKHRShaderIntegerDotProduct {
VkJsonKHRShaderIntegerDotProduct() {
reported = false;
memset(&shader_integer_dot_product_features_khr, 0,
sizeof(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR));
}
bool reported;
VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
shader_integer_dot_product_features_khr;
};
struct VkJsonIMGRelaxedLineRasterization {
VkJsonIMGRelaxedLineRasterization() {
reported = false;
memset(&relaxed_line_rasterization_features_img, 0,
sizeof(VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG));
}
bool reported;
VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG
relaxed_line_rasterization_features_img;
};
struct VkJsonKHRLineRasterization {
VkJsonKHRLineRasterization() {
reported = false;
memset(&line_rasterization_features_khr, 0,
sizeof(VkPhysicalDeviceLineRasterizationFeaturesKHR));
}
bool reported;
VkPhysicalDeviceLineRasterizationFeaturesKHR line_rasterization_features_khr;
};
struct VkJsonExtLineRasterization {
VkJsonExtLineRasterization() {
reported = false;
memset(&line_rasterization_features_ext, 0,
sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT));
}
bool reported;
VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization_features_ext;
};
struct VkJsonExtPrimitivesGeneratedQuery {
VkJsonExtPrimitivesGeneratedQuery() {
reported = false;
memset(&primitives_generated_query_features_ext, 0,
sizeof(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT));
}
bool reported;
VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
primitives_generated_query_features_ext;
};
struct VkJsonKHRShaderFloatControls {
VkJsonKHRShaderFloatControls() {
reported = false;
memset(&float_controls_properties_khr, 0,
sizeof(VkPhysicalDeviceFloatControlsPropertiesKHR));
}
bool reported;
VkPhysicalDeviceFloatControlsPropertiesKHR float_controls_properties_khr;
};
struct VkJsonKHRDriverProperties {
VkJsonKHRDriverProperties() {
reported = false;
memset(&driver_properties_khr, 0,
sizeof(VkPhysicalDeviceDriverPropertiesKHR));
}
bool reported;
VkPhysicalDeviceDriverPropertiesKHR driver_properties_khr;
};
struct VkJsonCore11 {
VkPhysicalDeviceVulkan11Properties properties;
VkPhysicalDeviceVulkan11Features features;
};
struct VkJsonCore12 {
VkPhysicalDeviceVulkan12Properties properties;
VkPhysicalDeviceVulkan12Features features;
};
struct VkJsonCore13 {
VkPhysicalDeviceVulkan13Properties properties;
VkPhysicalDeviceVulkan13Features features;
};
struct VkJsonCore14 {
VkPhysicalDeviceVulkan14Properties properties;
VkPhysicalDeviceVulkan14Features features;
};
struct VkJsonDevice {
VkJsonDevice() {
memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
memset(&subgroup_properties, 0, sizeof(VkPhysicalDeviceSubgroupProperties));
memset(&point_clipping_properties, 0,
sizeof(VkPhysicalDevicePointClippingProperties));
memset(&multiview_properties, 0,
sizeof(VkPhysicalDeviceMultiviewProperties));
memset(&id_properties, 0, sizeof(VkPhysicalDeviceIDProperties));
memset(&maintenance3_properties, 0,
sizeof(VkPhysicalDeviceMaintenance3Properties));
memset(&bit16_storage_features, 0,
sizeof(VkPhysicalDevice16BitStorageFeatures));
memset(&multiview_features, 0, sizeof(VkPhysicalDeviceMultiviewFeatures));
memset(&variable_pointers_features, 0,
sizeof(VkPhysicalDeviceVariablePointersFeatures));
memset(&protected_memory_features, 0,
sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
memset(&sampler_ycbcr_conversion_features, 0,
sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
memset(&shader_draw_parameter_features, 0,
sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
memset(&core11, 0, sizeof(VkJsonCore11));
memset(&core12, 0, sizeof(VkJsonCore12));
memset(&core13, 0, sizeof(VkJsonCore13));
memset(&core14, 0, sizeof(VkJsonCore14));
}
VkJsonKHRVariablePointers khr_variable_pointers;
VkJsonKHRShaderFloat16Int8 khr_shader_float16_int8;
VkJsonExtImage2dViewOf3d ext_image_2d_view_of_3d;
VkJsonExtCustomBorderColor ext_custom_border_color;
VkJsonExtPrimitiveTopologyListRestart ext_primitive_topology_list_restart;
VkJsonExtProvokingVertex ext_provoking_vertex;
VkJsonKHRIndexTypeUint8 khr_index_type_uint8;
VkJsonExtIndexTypeUint8 ext_index_type_uint8;
VkJsonKHRVertexAttributeDivisor khr_vertex_attribute_divisor;
VkJsonExtVertexAttributeDivisor ext_vertex_attribute_divisor;
VkJsonExtTransformFeedback ext_transform_feedback;
VkJsonKHRShaderSubgroupUniformControlFlow
khr_shader_subgroup_uniform_control_flow;
VkJsonKHRShaderSubgroupExtendedTypes khr_shader_subgroup_extended_types;
VkJsonKHR8bitStorage khr_8bit_storage;
VkJsonKHRShaderIntegerDotProduct khr_shader_integer_dot_product;
VkJsonIMGRelaxedLineRasterization img_relaxed_line_rasterization;
VkJsonKHRLineRasterization khr_line_rasterization;
VkJsonExtLineRasterization ext_line_rasterization;
VkJsonExtPrimitivesGeneratedQuery ext_primitives_generated_query;
VkJsonKHRShaderFloatControls khr_shader_float_controls;
VkJsonKHRDriverProperties khr_driver_properties;
VkJsonCore11 core11;
VkJsonCore12 core12;
VkJsonCore13 core13;
VkJsonCore14 core14;
VkPhysicalDeviceProperties properties;
VkPhysicalDeviceFeatures features;
VkPhysicalDeviceMemoryProperties memory;
VkPhysicalDeviceSubgroupProperties subgroup_properties;
VkPhysicalDevicePointClippingProperties point_clipping_properties;
VkPhysicalDeviceMultiviewProperties multiview_properties;
VkPhysicalDeviceIDProperties id_properties;
VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
VkPhysicalDevice16BitStorageFeatures bit16_storage_features;
VkPhysicalDeviceMultiviewFeatures multiview_features;
VkPhysicalDeviceVariablePointersFeatures variable_pointers_features;
VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features;
VkPhysicalDeviceSamplerYcbcrConversionFeatures
sampler_ycbcr_conversion_features;
VkPhysicalDeviceShaderDrawParameterFeatures shader_draw_parameter_features;
std::vector<VkQueueFamilyProperties> queues;
std::vector<VkExtensionProperties> extensions;
std::vector<VkLayerProperties> layers;
std::map<VkFormat, VkFormatProperties> formats;
std::map<VkExternalFenceHandleTypeFlagBits, VkExternalFenceProperties>
external_fence_properties;
std::map<VkExternalSemaphoreHandleTypeFlagBits, VkExternalSemaphoreProperties>
external_semaphore_properties;
};
struct VkJsonDeviceGroup {
VkJsonDeviceGroup() {
memset(&properties, 0, sizeof(VkPhysicalDeviceGroupProperties));
}
VkPhysicalDeviceGroupProperties properties;
std::vector<uint32_t> device_inds;
};
struct VkJsonInstance {
VkJsonInstance() : api_version(0) {}
uint32_t api_version;
std::vector<VkJsonLayer> layers;
std::vector<VkExtensionProperties> extensions;
std::vector<VkJsonDevice> devices;
std::vector<VkJsonDeviceGroup> device_groups;
};
VkJsonInstance VkJsonGetInstance();
std::string VkJsonInstanceToJson(const VkJsonInstance& instance);
bool VkJsonInstanceFromJson(const std::string& json,
VkJsonInstance* instance,
std::string* errors);
VkJsonDevice VkJsonGetDevice(VkPhysicalDevice device);
std::string VkJsonDeviceToJson(const VkJsonDevice& device);
bool VkJsonDeviceFromJson(const std::string& json,
VkJsonDevice* device,
std::string* errors);
std::string VkJsonImageFormatPropertiesToJson(
const VkImageFormatProperties& properties);
bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
VkImageFormatProperties* properties,
std::string* errors);
// Backward-compatibility aliases
typedef VkJsonDevice VkJsonAllProperties;
inline VkJsonAllProperties VkJsonGetAllProperties(
VkPhysicalDevice physicalDevice) {
return VkJsonGetDevice(physicalDevice);
}
inline std::string VkJsonAllPropertiesToJson(
const VkJsonAllProperties& properties) {
return VkJsonDeviceToJson(properties);
}
inline bool VkJsonAllPropertiesFromJson(const std::string& json,
VkJsonAllProperties* properties,
std::string* errors) {
return VkJsonDeviceFromJson(json, properties, errors);
}
#endif // VKJSON_H_
|