Loading vulkan/vkjson/vkjson.cc +33 −2 Original line number Diff line number Diff line Loading @@ -542,6 +542,31 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) { visitor->Visit("inheritedQueries", &features->inheritedQueries); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkJsonExtDriverProperties* properties) { return visitor->Visit("driverPropertiesKHR", &properties->driver_properties_khr); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkPhysicalDeviceDriverPropertiesKHR* properties) { return visitor->Visit("driverID", &properties->driverID) && visitor->Visit("driverName", &properties->driverName) && visitor->Visit("driverInfo", &properties->driverInfo) && visitor->Visit("conformanceVersion", &properties->conformanceVersion); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkConformanceVersionKHR* version) { return visitor->Visit("major", &version->major) && visitor->Visit("minor", &version->minor) && visitor->Visit("subminor", &version->subminor) && visitor->Visit("patch", &version->patch); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkJsonExtVariablePointerFeatures* features) { Loading Loading @@ -769,13 +794,19 @@ inline bool Iterate(Visitor* visitor, VkJsonDevice* device) { case VK_API_VERSION_1_0: ret &= visitor->Visit("properties", &device->properties) && visitor->Visit("features", &device->features) && visitor->Visit("VK_KHR_variable_pointers", &device->ext_variable_pointer_features) && visitor->Visit("memory", &device->memory) && visitor->Visit("queues", &device->queues) && visitor->Visit("extensions", &device->extensions) && visitor->Visit("layers", &device->layers) && visitor->Visit("formats", &device->formats); if (device->ext_driver_properties.reported) { ret &= visitor->Visit("VK_KHR_driver_properties", &device->ext_driver_properties); } if (device->ext_variable_pointer_features.reported) { ret &= visitor->Visit("VK_KHR_variable_pointers", &device->ext_variable_pointer_features); } } return ret; } Loading vulkan/vkjson/vkjson.h +13 −0 Original line number Diff line number Diff line Loading @@ -46,11 +46,23 @@ struct VkJsonLayer { std::vector<VkExtensionProperties> extensions; }; struct VkJsonExtDriverProperties { VkJsonExtDriverProperties() { reported = false; memset(&driver_properties_khr, 0, sizeof(VkPhysicalDeviceDriverPropertiesKHR)); } bool reported; VkPhysicalDeviceDriverPropertiesKHR driver_properties_khr; }; struct VkJsonExtVariablePointerFeatures { VkJsonExtVariablePointerFeatures() { reported = false; memset(&variable_pointer_features_khr, 0, sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR)); } bool reported; VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr; }; Loading Loading @@ -81,6 +93,7 @@ struct VkJsonDevice { } VkPhysicalDeviceProperties properties; VkPhysicalDeviceFeatures features; VkJsonExtDriverProperties ext_driver_properties; VkJsonExtVariablePointerFeatures ext_variable_pointer_features; VkPhysicalDeviceMemoryProperties memory; std::vector<VkQueueFamilyProperties> queues; Loading vulkan/vkjson/vkjson_instance.cc +24 −1 Original line number Diff line number Diff line Loading @@ -71,11 +71,16 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, const char* const* instance_extensions) { VkJsonDevice device; PFN_vkGetPhysicalDeviceProperties2KHR vkpGetPhysicalDeviceProperties2KHR = nullptr; PFN_vkGetPhysicalDeviceFeatures2KHR vkpGetPhysicalDeviceFeatures2KHR = nullptr; if (instance != VK_NULL_HANDLE && HasExtension("VK_KHR_get_physical_device_properties2", instance_extension_count, instance_extensions)) { vkpGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>( vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2KHR")); vkpGetPhysicalDeviceFeatures2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2KHR>( vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR")); Loading @@ -98,15 +103,32 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, device.layers.data()); } vkGetPhysicalDeviceProperties(physical_device, &device.properties); if (HasExtension("VK_KHR_get_physical_device_properties2", instance_extension_count, instance_extensions)) { VkPhysicalDeviceProperties2KHR properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, nullptr, {} // properties }; if (HasExtension("VK_KHR_driver_properties", device.extensions)) { device.ext_driver_properties.reported = true; device.ext_driver_properties.driver_properties_khr.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR; device.ext_driver_properties.driver_properties_khr.pNext = properties.pNext; properties.pNext = &device.ext_driver_properties.driver_properties_khr; } vkpGetPhysicalDeviceProperties2KHR(physical_device, &properties); device.properties = properties.properties; VkPhysicalDeviceFeatures2KHR features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, nullptr, {} // features }; if (HasExtension("VK_KHR_variable_pointers", device.extensions)) { device.ext_variable_pointer_features.reported = true; device.ext_variable_pointer_features.variable_pointer_features_khr.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR; device.ext_variable_pointer_features.variable_pointer_features_khr.pNext = Loading @@ -117,6 +139,7 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, vkpGetPhysicalDeviceFeatures2KHR(physical_device, &features); device.features = features.features; } else { vkGetPhysicalDeviceProperties(physical_device, &device.properties); vkGetPhysicalDeviceFeatures(physical_device, &device.features); } vkGetPhysicalDeviceMemoryProperties(physical_device, &device.memory); Loading Loading
vulkan/vkjson/vkjson.cc +33 −2 Original line number Diff line number Diff line Loading @@ -542,6 +542,31 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) { visitor->Visit("inheritedQueries", &features->inheritedQueries); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkJsonExtDriverProperties* properties) { return visitor->Visit("driverPropertiesKHR", &properties->driver_properties_khr); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkPhysicalDeviceDriverPropertiesKHR* properties) { return visitor->Visit("driverID", &properties->driverID) && visitor->Visit("driverName", &properties->driverName) && visitor->Visit("driverInfo", &properties->driverInfo) && visitor->Visit("conformanceVersion", &properties->conformanceVersion); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkConformanceVersionKHR* version) { return visitor->Visit("major", &version->major) && visitor->Visit("minor", &version->minor) && visitor->Visit("subminor", &version->subminor) && visitor->Visit("patch", &version->patch); } template <typename Visitor> inline bool Iterate(Visitor* visitor, VkJsonExtVariablePointerFeatures* features) { Loading Loading @@ -769,13 +794,19 @@ inline bool Iterate(Visitor* visitor, VkJsonDevice* device) { case VK_API_VERSION_1_0: ret &= visitor->Visit("properties", &device->properties) && visitor->Visit("features", &device->features) && visitor->Visit("VK_KHR_variable_pointers", &device->ext_variable_pointer_features) && visitor->Visit("memory", &device->memory) && visitor->Visit("queues", &device->queues) && visitor->Visit("extensions", &device->extensions) && visitor->Visit("layers", &device->layers) && visitor->Visit("formats", &device->formats); if (device->ext_driver_properties.reported) { ret &= visitor->Visit("VK_KHR_driver_properties", &device->ext_driver_properties); } if (device->ext_variable_pointer_features.reported) { ret &= visitor->Visit("VK_KHR_variable_pointers", &device->ext_variable_pointer_features); } } return ret; } Loading
vulkan/vkjson/vkjson.h +13 −0 Original line number Diff line number Diff line Loading @@ -46,11 +46,23 @@ struct VkJsonLayer { std::vector<VkExtensionProperties> extensions; }; struct VkJsonExtDriverProperties { VkJsonExtDriverProperties() { reported = false; memset(&driver_properties_khr, 0, sizeof(VkPhysicalDeviceDriverPropertiesKHR)); } bool reported; VkPhysicalDeviceDriverPropertiesKHR driver_properties_khr; }; struct VkJsonExtVariablePointerFeatures { VkJsonExtVariablePointerFeatures() { reported = false; memset(&variable_pointer_features_khr, 0, sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR)); } bool reported; VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr; }; Loading Loading @@ -81,6 +93,7 @@ struct VkJsonDevice { } VkPhysicalDeviceProperties properties; VkPhysicalDeviceFeatures features; VkJsonExtDriverProperties ext_driver_properties; VkJsonExtVariablePointerFeatures ext_variable_pointer_features; VkPhysicalDeviceMemoryProperties memory; std::vector<VkQueueFamilyProperties> queues; Loading
vulkan/vkjson/vkjson_instance.cc +24 −1 Original line number Diff line number Diff line Loading @@ -71,11 +71,16 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, const char* const* instance_extensions) { VkJsonDevice device; PFN_vkGetPhysicalDeviceProperties2KHR vkpGetPhysicalDeviceProperties2KHR = nullptr; PFN_vkGetPhysicalDeviceFeatures2KHR vkpGetPhysicalDeviceFeatures2KHR = nullptr; if (instance != VK_NULL_HANDLE && HasExtension("VK_KHR_get_physical_device_properties2", instance_extension_count, instance_extensions)) { vkpGetPhysicalDeviceProperties2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>( vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2KHR")); vkpGetPhysicalDeviceFeatures2KHR = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2KHR>( vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR")); Loading @@ -98,15 +103,32 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, device.layers.data()); } vkGetPhysicalDeviceProperties(physical_device, &device.properties); if (HasExtension("VK_KHR_get_physical_device_properties2", instance_extension_count, instance_extensions)) { VkPhysicalDeviceProperties2KHR properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, nullptr, {} // properties }; if (HasExtension("VK_KHR_driver_properties", device.extensions)) { device.ext_driver_properties.reported = true; device.ext_driver_properties.driver_properties_khr.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR; device.ext_driver_properties.driver_properties_khr.pNext = properties.pNext; properties.pNext = &device.ext_driver_properties.driver_properties_khr; } vkpGetPhysicalDeviceProperties2KHR(physical_device, &properties); device.properties = properties.properties; VkPhysicalDeviceFeatures2KHR features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, nullptr, {} // features }; if (HasExtension("VK_KHR_variable_pointers", device.extensions)) { device.ext_variable_pointer_features.reported = true; device.ext_variable_pointer_features.variable_pointer_features_khr.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR; device.ext_variable_pointer_features.variable_pointer_features_khr.pNext = Loading @@ -117,6 +139,7 @@ VkJsonDevice VkJsonGetDevice(VkInstance instance, vkpGetPhysicalDeviceFeatures2KHR(physical_device, &features); device.features = features.features; } else { vkGetPhysicalDeviceProperties(physical_device, &device.properties); vkGetPhysicalDeviceFeatures(physical_device, &device.features); } vkGetPhysicalDeviceMemoryProperties(physical_device, &device.memory); Loading