| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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. |
| // |
| // Permission is hereby granted, free of charge, to any person obtaining a copy |
| // of this software and/or associated documentation files (the "Materials"), to |
| // deal in the Materials without restriction, including without limitation the |
| // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| // sell copies of the Materials, and to permit persons to whom the Materials are |
| // furnished to do so, subject to the following conditions: |
| // |
| // The above copyright notice(s) and this permission notice shall be included in |
| // all copies or substantial portions of the Materials. |
| // |
| // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| // |
| // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE |
| // USE OR OTHER DEALINGS IN THE MATERIALS. |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #ifndef VKJSON_H_ |
| #define VKJSON_H_ |
| |
| #include <vulkan/vulkan.h> |
| #include <string.h> |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #ifdef WIN32 |
| #undef min |
| #undef max |
| #endif |
| |
| struct VkJsonLayer { |
| VkLayerProperties properties; |
| std::vector<VkExtensionProperties> extensions; |
| }; |
| |
| struct VkJsonDevice { |
| VkJsonDevice() { |
| memset(&properties, 0, sizeof(VkPhysicalDeviceProperties)); |
| memset(&features, 0, sizeof(VkPhysicalDeviceFeatures)); |
| memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties)); |
| } |
| VkPhysicalDeviceProperties properties; |
| VkPhysicalDeviceFeatures features; |
| VkPhysicalDeviceMemoryProperties memory; |
| std::vector<VkQueueFamilyProperties> queues; |
| std::vector<VkExtensionProperties> extensions; |
| std::vector<VkLayerProperties> layers; |
| std::map<VkFormat, VkFormatProperties> formats; |
| }; |
| |
| struct VkJsonInstance { |
| std::vector<VkJsonLayer> layers; |
| std::vector<VkExtensionProperties> extensions; |
| std::vector<VkJsonDevice> devices; |
| }; |
| |
| 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_ |