Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adb29b0a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "vkjson: report VkPhysicalDeviceDriverPropertiesKHR"

parents 1c3b2b5d 7b4169d3
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -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) {
@@ -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;
}
+13 −0
Original line number Diff line number Diff line
@@ -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;
};

@@ -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;
+24 −1
Original line number Diff line number Diff line
@@ -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"));
@@ -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 =
@@ -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);