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 #ifndef VK_API_VERSION_1_0
     37 #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)
     38 #endif
     39 
     40 #ifndef VK_API_VERSION_1_1
     41 #define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)
     42 #endif
     43 
     44 struct VkJsonLayer {
     45   VkLayerProperties properties;
     46   std::vector<VkExtensionProperties> extensions;
     47 };
     48 
     49 struct VkJsonExtVariablePointerFeatures {
     50   VkJsonExtVariablePointerFeatures() {
     51     memset(&variable_pointer_features_khr, 0,
     52            sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
     53   }
     54   VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr;
     55 };
     56 
     57 struct VkJsonDevice {
     58   VkJsonDevice() {
     59     memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
     60     memset(&features, 0, sizeof(VkPhysicalDeviceFeatures));
     61     memset(&memory, 0, sizeof(VkPhysicalDeviceMemoryProperties));
     62     memset(&subgroup_properties, 0, sizeof(VkPhysicalDeviceSubgroupProperties));
     63     memset(&point_clipping_properties, 0,
     64            sizeof(VkPhysicalDevicePointClippingProperties));
     65     memset(&multiview_properties, 0,
     66            sizeof(VkPhysicalDeviceMultiviewProperties));
     67     memset(&id_properties, 0, sizeof(VkPhysicalDeviceIDProperties));
     68     memset(&maintenance3_properties, 0,
     69            sizeof(VkPhysicalDeviceMaintenance3Properties));
     70     memset(&bit16_storage_features, 0,
     71            sizeof(VkPhysicalDevice16BitStorageFeatures));
     72     memset(&multiview_features, 0, sizeof(VkPhysicalDeviceMultiviewFeatures));
     73     memset(&variable_pointer_features, 0,
     74            sizeof(VkPhysicalDeviceVariablePointerFeatures));
     75     memset(&protected_memory_features, 0,
     76            sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
     77     memset(&sampler_ycbcr_conversion_features, 0,
     78            sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
     79     memset(&shader_draw_parameter_features, 0,
     80            sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
     81   }
     82   VkPhysicalDeviceProperties properties;
     83   VkPhysicalDeviceFeatures features;
     84   VkJsonExtVariablePointerFeatures ext_variable_pointer_features;
     85   VkPhysicalDeviceMemoryProperties memory;
     86   std::vector<VkQueueFamilyProperties> queues;
     87   std::vector<VkExtensionProperties> extensions;
     88   std::vector<VkLayerProperties> layers;
     89   std::map<VkFormat, VkFormatProperties> formats;
     90   VkPhysicalDeviceSubgroupProperties subgroup_properties;
     91   VkPhysicalDevicePointClippingProperties point_clipping_properties;
     92   VkPhysicalDeviceMultiviewProperties multiview_properties;
     93   VkPhysicalDeviceIDProperties id_properties;
     94   VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
     95   VkPhysicalDevice16BitStorageFeatures bit16_storage_features;
     96   VkPhysicalDeviceMultiviewFeatures multiview_features;
     97   VkPhysicalDeviceVariablePointerFeatures variable_pointer_features;
     98   VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features;
     99   VkPhysicalDeviceSamplerYcbcrConversionFeatures
    100       sampler_ycbcr_conversion_features;
    101   VkPhysicalDeviceShaderDrawParameterFeatures shader_draw_parameter_features;
    102   std::map<VkExternalFenceHandleTypeFlagBits, VkExternalFenceProperties>
    103       external_fence_properties;
    104   std::map<VkExternalSemaphoreHandleTypeFlagBits, VkExternalSemaphoreProperties>
    105       external_semaphore_properties;
    106 };
    107 
    108 struct VkJsonDeviceGroup {
    109   VkJsonDeviceGroup() {
    110     memset(&properties, 0, sizeof(VkPhysicalDeviceGroupProperties));
    111   }
    112   VkPhysicalDeviceGroupProperties properties;
    113   std::vector<uint32_t> device_inds;
    114 };
    115 
    116 struct VkJsonInstance {
    117   VkJsonInstance() : api_version(0) {}
    118   uint32_t api_version;
    119   std::vector<VkJsonLayer> layers;
    120   std::vector<VkExtensionProperties> extensions;
    121   std::vector<VkJsonDevice> devices;
    122   std::vector<VkJsonDeviceGroup> device_groups;
    123 };
    124 
    125 VkJsonInstance VkJsonGetInstance();
    126 std::string VkJsonInstanceToJson(const VkJsonInstance& instance);
    127 bool VkJsonInstanceFromJson(const std::string& json,
    128                             VkJsonInstance* instance,
    129                             std::string* errors);
    130 
    131 VkJsonDevice VkJsonGetDevice(VkInstance instance,
    132                              VkPhysicalDevice device,
    133                              uint32_t instanceExtensionCount,
    134                              const char* const* instanceExtensions);
    135 std::string VkJsonDeviceToJson(const VkJsonDevice& device);
    136 bool VkJsonDeviceFromJson(const std::string& json,
    137                           VkJsonDevice* device,
    138                           std::string* errors);
    139 
    140 std::string VkJsonImageFormatPropertiesToJson(
    141     const VkImageFormatProperties& properties);
    142 bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
    143                                          VkImageFormatProperties* properties,
    144                                          std::string* errors);
    145 
    146 // Backward-compatibility aliases
    147 typedef VkJsonDevice VkJsonAllProperties;
    148 inline VkJsonAllProperties VkJsonGetAllProperties(
    149     VkPhysicalDevice physicalDevice) {
    150   return VkJsonGetDevice(VK_NULL_HANDLE, physicalDevice, 0, nullptr);
    151 }
    152 inline std::string VkJsonAllPropertiesToJson(
    153     const VkJsonAllProperties& properties) {
    154   return VkJsonDeviceToJson(properties);
    155 }
    156 inline bool VkJsonAllPropertiesFromJson(const std::string& json,
    157                                         VkJsonAllProperties* properties,
    158                                         std::string* errors) {
    159   return VkJsonDeviceFromJson(json, properties, errors);
    160 }
    161 
    162 #endif  // VKJSON_H_
    163