1 ///////////////////////////////////////////////////////////////////////////////
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 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and/or associated documentation files (the "Materials"), to
10 // deal in the Materials without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Materials, and to permit persons to whom the Materials are
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice(s) and this permission notice shall be included in
16 // all copies or substantial portions of the Materials.
17 //
18 // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21 //
22 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
25 // USE OR OTHER DEALINGS IN THE MATERIALS.
26 ///////////////////////////////////////////////////////////////////////////////
27
28 #ifndef VKJSON_H_
29 #define VKJSON_H_
30
31 #include <vulkan/vulkan.h>
32 #include <string.h>
33
34 #include <map>
35 #include <string>
36 #include <vector>
37
38 #ifdef WIN32
39 #undef min
40 #undef max
41 #endif
42
43 struct VkJsonLayer {
44 VkLayerProperties properties;
45 std::vector<VkExtensionProperties> extensions;
46 };
47
48 struct VkJsonDevice {
VkJsonDeviceVkJsonDevice49 VkJsonDevice() {
50 memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
51 memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
52 memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
53 }
54 VkPhysicalDeviceProperties properties;
55 VkPhysicalDeviceFeatures features;
56 VkPhysicalDeviceMemoryProperties memory;
57 std::vector<VkQueueFamilyProperties> queues;
58 std::vector<VkExtensionProperties> extensions;
59 std::vector<VkLayerProperties> layers;
60 std::map<VkFormat, VkFormatProperties> formats;
61 };
62
63 struct VkJsonInstance {
64 std::vector<VkJsonLayer> layers;
65 std::vector<VkExtensionProperties> extensions;
66 std::vector<VkJsonDevice> devices;
67 };
68
69 VkJsonInstance VkJsonGetInstance();
70 std::string VkJsonInstanceToJson(const VkJsonInstance& instance);
71 bool VkJsonInstanceFromJson(const std::string& json,
72 VkJsonInstance* instance,
73 std::string* errors);
74
75 VkJsonDevice VkJsonGetDevice(VkPhysicalDevice device);
76 std::string VkJsonDeviceToJson(const VkJsonDevice& device);
77 bool VkJsonDeviceFromJson(const std::string& json,
78 VkJsonDevice* device,
79 std::string* errors);
80
81 std::string VkJsonImageFormatPropertiesToJson(
82 const VkImageFormatProperties& properties);
83 bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
84 VkImageFormatProperties* properties,
85 std::string* errors);
86
87 // Backward-compatibility aliases
88 typedef VkJsonDevice VkJsonAllProperties;
VkJsonGetAllProperties(VkPhysicalDevice physicalDevice)89 inline VkJsonAllProperties VkJsonGetAllProperties(
90 VkPhysicalDevice physicalDevice) {
91 return VkJsonGetDevice(physicalDevice);
92 }
VkJsonAllPropertiesToJson(const VkJsonAllProperties & properties)93 inline std::string VkJsonAllPropertiesToJson(
94 const VkJsonAllProperties& properties) {
95 return VkJsonDeviceToJson(properties);
96 }
VkJsonAllPropertiesFromJson(const std::string & json,VkJsonAllProperties * properties,std::string * errors)97 inline bool VkJsonAllPropertiesFromJson(const std::string& json,
98 VkJsonAllProperties* properties,
99 std::string* errors) {
100 return VkJsonDeviceFromJson(json, properties, errors);
101 }
102
103 #endif // VKJSON_H_
104