Home | History | Annotate | Download | only in vkjson
      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 // 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 
     36 struct VkJsonLayer {
     37   VkLayerProperties properties;
     38   std::vector<VkExtensionProperties> extensions;
     39 };
     40 
     41 struct VkJsonDevice {
     42   VkJsonDevice() {
     43           memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
     44           memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
     45           memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
     46   }
     47   VkPhysicalDeviceProperties properties;
     48   VkPhysicalDeviceFeatures features;
     49   VkPhysicalDeviceMemoryProperties memory;
     50   std::vector<VkQueueFamilyProperties> queues;
     51   std::vector<VkExtensionProperties> extensions;
     52   std::vector<VkLayerProperties> layers;
     53   std::map<VkFormat, VkFormatProperties> formats;
     54 };
     55 
     56 struct VkJsonInstance {
     57   std::vector<VkJsonLayer> layers;
     58   std::vector<VkExtensionProperties> extensions;
     59   std::vector<VkJsonDevice> devices;
     60 };
     61 
     62 VkJsonInstance VkJsonGetInstance();
     63 std::string VkJsonInstanceToJson(const VkJsonInstance& instance);
     64 bool VkJsonInstanceFromJson(const std::string& json,
     65                             VkJsonInstance* instance,
     66                             std::string* errors);
     67 
     68 VkJsonDevice VkJsonGetDevice(VkPhysicalDevice device);
     69 std::string VkJsonDeviceToJson(const VkJsonDevice& device);
     70 bool VkJsonDeviceFromJson(const std::string& json,
     71                           VkJsonDevice* device,
     72                           std::string* errors);
     73 
     74 std::string VkJsonImageFormatPropertiesToJson(
     75     const VkImageFormatProperties& properties);
     76 bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
     77                                          VkImageFormatProperties* properties,
     78                                          std::string* errors);
     79 
     80 // Backward-compatibility aliases
     81 typedef VkJsonDevice VkJsonAllProperties;
     82 inline VkJsonAllProperties VkJsonGetAllProperties(
     83     VkPhysicalDevice physicalDevice) {
     84   return VkJsonGetDevice(physicalDevice);
     85 }
     86 inline std::string VkJsonAllPropertiesToJson(
     87     const VkJsonAllProperties& properties) {
     88   return VkJsonDeviceToJson(properties);
     89 }
     90 inline bool VkJsonAllPropertiesFromJson(const std::string& json,
     91                                         VkJsonAllProperties* properties,
     92                                         std::string* errors) {
     93   return VkJsonDeviceFromJson(json, properties, errors);
     94 }
     95 
     96 #endif  // VKJSON_H_
     97