blob: 87a76c1ac90b071865b85d93861949e13267b435 [file] [log] [blame]
Yiwei Zhangf9a57e62018-04-05 00:17:22 -07001///////////////////////////////////////////////////////////////////////////////
2//
3// Copyright (c) 2015-2016 The Khronos Group Inc.
4// Copyright (c) 2015-2016 Valve Corporation
5// Copyright (c) 2015-2016 LunarG, Inc.
6// Copyright (c) 2015-2016 Google, Inc.
7//
8// Licensed under the Apache License, Version 2.0 (the "License");
9// you may not use this file except in compliance with the License.
10// You may obtain a copy of the License at
11//
12// http://www.apache.org/licenses/LICENSE-2.0
13//
14// Unless required by applicable law or agreed to in writing, software
15// distributed under the License is distributed on an "AS IS" BASIS,
16// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17// See the License for the specific language governing permissions and
18// limitations under the License.
19///////////////////////////////////////////////////////////////////////////////
20
21#ifndef VKJSON_H_
22#define VKJSON_H_
23
24#include <vulkan/vulkan.h>
25#include <string.h>
26
27#include <map>
28#include <string>
29#include <vector>
30
31#ifdef WIN32
32#undef min
33#undef max
34#endif
35
Yiwei Zhangf9a57e62018-04-05 00:17:22 -070036struct VkJsonLayer {
37 VkLayerProperties properties;
38 std::vector<VkExtensionProperties> extensions;
39};
40
Yiwei Zhang7b4169d2018-10-02 18:58:31 -070041struct VkJsonExtDriverProperties {
42 VkJsonExtDriverProperties() {
43 reported = false;
44 memset(&driver_properties_khr, 0,
45 sizeof(VkPhysicalDeviceDriverPropertiesKHR));
46 }
47 bool reported;
48 VkPhysicalDeviceDriverPropertiesKHR driver_properties_khr;
49};
50
Yiwei Zhangf9a57e62018-04-05 00:17:22 -070051struct VkJsonExtVariablePointerFeatures {
52 VkJsonExtVariablePointerFeatures() {
Yiwei Zhang7b4169d2018-10-02 18:58:31 -070053 reported = false;
Yiwei Zhangf9a57e62018-04-05 00:17:22 -070054 memset(&variable_pointer_features_khr, 0,
55 sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
56 }
Yiwei Zhang7b4169d2018-10-02 18:58:31 -070057 bool reported;
Yiwei Zhangf9a57e62018-04-05 00:17:22 -070058 VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr;
59};
60
Nikita Gupta5acad432025-02-08 11:53:54 +000061struct VkJsonExtImage2DViewOf3DFeatures {
62 VkJsonExtImage2DViewOf3DFeatures() {
63 reported = false;
64 memset(&image_2D_view_of_3D_features_EXT, 0,
65 sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT));
66 }
67 bool reported;
68 VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2D_view_of_3D_features_EXT;
69};
70
Peiyong Linc1b5ffb2020-02-27 19:31:51 -080071struct VkJsonExtShaderFloat16Int8Features {
72 VkJsonExtShaderFloat16Int8Features() {
73 reported = false;
74 memset(&shader_float16_int8_features_khr, 0,
75 sizeof(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR));
76 }
77 bool reported;
78 VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr;
79};
80
Trevor David Blackd35f0f62021-09-07 23:39:36 +000081struct VkJsonCore12 {
82 VkPhysicalDeviceVulkan12Properties properties;
83 VkPhysicalDeviceVulkan12Features features;
84};
85
Trevor David Black79883792021-11-04 23:46:31 +000086struct VkJsonCore13 {
87 VkPhysicalDeviceVulkan13Properties properties;
88 VkPhysicalDeviceVulkan13Features features;
89};
90
Tom Murphy80d9ca72024-10-17 09:52:47 +000091struct VkJsonCore14 {
92 VkPhysicalDeviceVulkan14Properties properties;
93 VkPhysicalDeviceVulkan14Features features;
94};
95
Yiwei Zhangf9a57e62018-04-05 00:17:22 -070096struct VkJsonDevice {
97 VkJsonDevice() {
98 memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
99 memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
100 memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
101 memset(&subgroup_properties, 0, sizeof(VkPhysicalDeviceSubgroupProperties));
102 memset(&point_clipping_properties, 0,
103 sizeof(VkPhysicalDevicePointClippingProperties));
104 memset(&multiview_properties, 0,
105 sizeof(VkPhysicalDeviceMultiviewProperties));
106 memset(&id_properties, 0, sizeof(VkPhysicalDeviceIDProperties));
107 memset(&maintenance3_properties, 0,
108 sizeof(VkPhysicalDeviceMaintenance3Properties));
109 memset(&bit16_storage_features, 0,
110 sizeof(VkPhysicalDevice16BitStorageFeatures));
111 memset(&multiview_features, 0, sizeof(VkPhysicalDeviceMultiviewFeatures));
112 memset(&variable_pointer_features, 0,
113 sizeof(VkPhysicalDeviceVariablePointerFeatures));
114 memset(&protected_memory_features, 0,
115 sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
116 memset(&sampler_ycbcr_conversion_features, 0,
117 sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
118 memset(&shader_draw_parameter_features, 0,
119 sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
Trevor David Blackd35f0f62021-09-07 23:39:36 +0000120 memset(&core12, 0, sizeof(VkJsonCore12));
Trevor David Black79883792021-11-04 23:46:31 +0000121 memset(&core13, 0, sizeof(VkJsonCore13));
Tom Murphy80d9ca72024-10-17 09:52:47 +0000122 memset(&core14, 0, sizeof(VkJsonCore14));
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700123 }
124 VkPhysicalDeviceProperties properties;
125 VkPhysicalDeviceFeatures features;
Yiwei Zhang7b4169d2018-10-02 18:58:31 -0700126 VkJsonExtDriverProperties ext_driver_properties;
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700127 VkJsonExtVariablePointerFeatures ext_variable_pointer_features;
Nikita Gupta5acad432025-02-08 11:53:54 +0000128 VkJsonExtImage2DViewOf3DFeatures ext_image_2d_view_of_3d_features;
Peiyong Linc1b5ffb2020-02-27 19:31:51 -0800129 VkJsonExtShaderFloat16Int8Features ext_shader_float16_int8_features;
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700130 VkPhysicalDeviceMemoryProperties memory;
131 std::vector<VkQueueFamilyProperties> queues;
132 std::vector<VkExtensionProperties> extensions;
133 std::vector<VkLayerProperties> layers;
134 std::map<VkFormat, VkFormatProperties> formats;
135 VkPhysicalDeviceSubgroupProperties subgroup_properties;
136 VkPhysicalDevicePointClippingProperties point_clipping_properties;
137 VkPhysicalDeviceMultiviewProperties multiview_properties;
138 VkPhysicalDeviceIDProperties id_properties;
139 VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
140 VkPhysicalDevice16BitStorageFeatures bit16_storage_features;
141 VkPhysicalDeviceMultiviewFeatures multiview_features;
142 VkPhysicalDeviceVariablePointerFeatures variable_pointer_features;
143 VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features;
144 VkPhysicalDeviceSamplerYcbcrConversionFeatures
145 sampler_ycbcr_conversion_features;
146 VkPhysicalDeviceShaderDrawParameterFeatures shader_draw_parameter_features;
147 std::map<VkExternalFenceHandleTypeFlagBits, VkExternalFenceProperties>
148 external_fence_properties;
149 std::map<VkExternalSemaphoreHandleTypeFlagBits, VkExternalSemaphoreProperties>
150 external_semaphore_properties;
Trevor David Blackd35f0f62021-09-07 23:39:36 +0000151 VkJsonCore12 core12;
Trevor David Black79883792021-11-04 23:46:31 +0000152 VkJsonCore13 core13;
Tom Murphy80d9ca72024-10-17 09:52:47 +0000153 VkJsonCore14 core14;
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700154};
155
156struct VkJsonDeviceGroup {
157 VkJsonDeviceGroup() {
158 memset(&properties, 0, sizeof(VkPhysicalDeviceGroupProperties));
159 }
160 VkPhysicalDeviceGroupProperties properties;
161 std::vector<uint32_t> device_inds;
162};
163
164struct VkJsonInstance {
165 VkJsonInstance() : api_version(0) {}
166 uint32_t api_version;
167 std::vector<VkJsonLayer> layers;
168 std::vector<VkExtensionProperties> extensions;
169 std::vector<VkJsonDevice> devices;
170 std::vector<VkJsonDeviceGroup> device_groups;
171};
172
173VkJsonInstance VkJsonGetInstance();
174std::string VkJsonInstanceToJson(const VkJsonInstance& instance);
175bool VkJsonInstanceFromJson(const std::string& json,
176 VkJsonInstance* instance,
177 std::string* errors);
178
Yiwei Zhang91fc3dc2020-07-05 23:33:22 -0700179VkJsonDevice VkJsonGetDevice(VkPhysicalDevice device);
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700180std::string VkJsonDeviceToJson(const VkJsonDevice& device);
181bool VkJsonDeviceFromJson(const std::string& json,
182 VkJsonDevice* device,
183 std::string* errors);
184
185std::string VkJsonImageFormatPropertiesToJson(
186 const VkImageFormatProperties& properties);
187bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
188 VkImageFormatProperties* properties,
189 std::string* errors);
190
191// Backward-compatibility aliases
192typedef VkJsonDevice VkJsonAllProperties;
193inline VkJsonAllProperties VkJsonGetAllProperties(
194 VkPhysicalDevice physicalDevice) {
Yiwei Zhang91fc3dc2020-07-05 23:33:22 -0700195 return VkJsonGetDevice(physicalDevice);
Yiwei Zhangf9a57e62018-04-05 00:17:22 -0700196}
197inline std::string VkJsonAllPropertiesToJson(
198 const VkJsonAllProperties& properties) {
199 return VkJsonDeviceToJson(properties);
200}
201inline bool VkJsonAllPropertiesFromJson(const std::string& json,
202 VkJsonAllProperties* properties,
203 std::string* errors) {
204 return VkJsonDeviceFromJson(json, properties, errors);
205}
206
207#endif // VKJSON_H_