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

Commit d35f0f66 authored by Trevor David Black's avatar Trevor David Black
Browse files

Added Vulkan 1.2 support to vkjson

Added Vulkan 1.2 packages
Added Vulkan 1.2 features
Added Vulkan 1.2 limits
Prints out instance version

Bug: 191881132
Test: adb shell cmd gpu vkjson
Change-Id: I1246b9e5e9b15840338768877c0e1760d29855e6
parent b68a2251
Loading
Loading
Loading
Loading
+133 −0
Original line number Diff line number Diff line
@@ -387,6 +387,19 @@ struct EnumTraits<VkDriverIdKHR> {
  }
};

template <>
struct EnumTraits<VkShaderFloatControlsIndependence> {
  static bool exist(uint32_t e) {
    switch (e) {
      case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY:
      case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL:
      case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE:
        return true;
    }
    return false;
  }
};

// VkSparseImageFormatProperties

template <typename Visitor>
@@ -407,6 +420,7 @@ inline bool Iterate(Visitor* visitor, VkImageFormatProperties* properties) {
    visitor->Visit("maxResourceSize", &properties->maxResourceSize);
}

// clang-format off
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceLimits* limits) {
  return
@@ -604,6 +618,123 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) {
    visitor->Visit("inheritedQueries", &features->inheritedQueries);
}

template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonCore12* core) {
  return
    visitor->Visit("features", &core->features) &&
    visitor->Visit("properties", &core->properties);
}

template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan12Properties* properties) {
  return
    visitor->Visit("driverID", &properties->driverID) &&
    visitor->Visit("driverName", &properties->driverName) &&
    visitor->Visit("driverInfo", &properties->driverInfo) &&
    visitor->Visit("conformanceVersion", &properties->conformanceVersion) &&
    visitor->Visit("denormBehaviorIndependence", &properties->denormBehaviorIndependence) &&
    visitor->Visit("roundingModeIndependence", &properties->roundingModeIndependence) &&
    visitor->Visit("shaderSignedZeroInfNanPreserveFloat16", &properties->shaderSignedZeroInfNanPreserveFloat16) &&
    visitor->Visit("shaderSignedZeroInfNanPreserveFloat32", &properties->shaderSignedZeroInfNanPreserveFloat32) &&
    visitor->Visit("shaderSignedZeroInfNanPreserveFloat64", &properties->shaderSignedZeroInfNanPreserveFloat64) &&
    visitor->Visit("shaderDenormPreserveFloat16", &properties->shaderDenormPreserveFloat16) &&
    visitor->Visit("shaderDenormPreserveFloat32", &properties->shaderDenormPreserveFloat32) &&
    visitor->Visit("shaderDenormPreserveFloat64", &properties->shaderDenormPreserveFloat64) &&
    visitor->Visit("shaderDenormFlushToZeroFloat16", &properties->shaderDenormFlushToZeroFloat16) &&
    visitor->Visit("shaderDenormFlushToZeroFloat32", &properties->shaderDenormFlushToZeroFloat32) &&
    visitor->Visit("shaderDenormFlushToZeroFloat64", &properties->shaderDenormFlushToZeroFloat64) &&
    visitor->Visit("shaderRoundingModeRTEFloat16", &properties->shaderRoundingModeRTEFloat16) &&
    visitor->Visit("shaderRoundingModeRTEFloat32", &properties->shaderRoundingModeRTEFloat32) &&
    visitor->Visit("shaderRoundingModeRTEFloat64", &properties->shaderRoundingModeRTEFloat64) &&
    visitor->Visit("shaderRoundingModeRTZFloat16", &properties->shaderRoundingModeRTZFloat16) &&
    visitor->Visit("shaderRoundingModeRTZFloat32", &properties->shaderRoundingModeRTZFloat32) &&
    visitor->Visit("shaderRoundingModeRTZFloat64", &properties->shaderRoundingModeRTZFloat64) &&
    visitor->Visit("maxUpdateAfterBindDescriptorsInAllPools", &properties->maxUpdateAfterBindDescriptorsInAllPools) &&
    visitor->Visit("shaderUniformBufferArrayNonUniformIndexingNative", &properties->shaderUniformBufferArrayNonUniformIndexingNative) &&
    visitor->Visit("shaderSampledImageArrayNonUniformIndexingNative", &properties->shaderSampledImageArrayNonUniformIndexingNative) &&
    visitor->Visit("shaderStorageBufferArrayNonUniformIndexingNative", &properties->shaderStorageBufferArrayNonUniformIndexingNative) &&
    visitor->Visit("shaderStorageImageArrayNonUniformIndexingNative", &properties->shaderStorageImageArrayNonUniformIndexingNative) &&
    visitor->Visit("shaderInputAttachmentArrayNonUniformIndexingNative", &properties->shaderInputAttachmentArrayNonUniformIndexingNative) &&
    visitor->Visit("robustBufferAccessUpdateAfterBind", &properties->robustBufferAccessUpdateAfterBind) &&
    visitor->Visit("quadDivergentImplicitLod", &properties->quadDivergentImplicitLod) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindSamplers", &properties->maxPerStageDescriptorUpdateAfterBindSamplers) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindUniformBuffers", &properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindStorageBuffers", &properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindSampledImages", &properties->maxPerStageDescriptorUpdateAfterBindSampledImages) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindStorageImages", &properties->maxPerStageDescriptorUpdateAfterBindStorageImages) &&
    visitor->Visit("maxPerStageDescriptorUpdateAfterBindInputAttachments", &properties->maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
    visitor->Visit("maxPerStageUpdateAfterBindResources", &properties->maxPerStageUpdateAfterBindResources) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindSamplers", &properties->maxDescriptorSetUpdateAfterBindSamplers) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindUniformBuffers", &properties->maxDescriptorSetUpdateAfterBindUniformBuffers) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindUniformBuffersDynamic", &properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageBuffers", &properties->maxDescriptorSetUpdateAfterBindStorageBuffers) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageBuffersDynamic", &properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindSampledImages", &properties->maxDescriptorSetUpdateAfterBindSampledImages) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageImages", &properties->maxDescriptorSetUpdateAfterBindStorageImages) &&
    visitor->Visit("maxDescriptorSetUpdateAfterBindInputAttachments", &properties->maxDescriptorSetUpdateAfterBindInputAttachments) &&
    visitor->Visit("supportedDepthResolveModes", &properties->supportedDepthResolveModes) &&
    visitor->Visit("supportedStencilResolveModes", &properties->supportedStencilResolveModes) &&
    visitor->Visit("independentResolveNone", &properties->independentResolveNone) &&
    visitor->Visit("independentResolve", &properties->independentResolve) &&
    visitor->Visit("filterMinmaxSingleComponentFormats", &properties->filterMinmaxSingleComponentFormats) &&
    visitor->Visit("filterMinmaxImageComponentMapping", &properties->filterMinmaxImageComponentMapping) &&
    visitor->Visit("maxTimelineSemaphoreValueDifference", &properties->maxTimelineSemaphoreValueDifference) &&
    visitor->Visit("framebufferIntegerColorSampleCounts", &properties->framebufferIntegerColorSampleCounts);
}

template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan12Features* features) {
  return
    visitor->Visit("samplerMirrorClampToEdge", &features->samplerMirrorClampToEdge) &&
    visitor->Visit("drawIndirectCount", &features->drawIndirectCount) &&
    visitor->Visit("storageBuffer8BitAccess", &features->storageBuffer8BitAccess) &&
    visitor->Visit("uniformAndStorageBuffer8BitAccess", &features->uniformAndStorageBuffer8BitAccess) &&
    visitor->Visit("storagePushConstant8", &features->storagePushConstant8) &&
    visitor->Visit("shaderBufferInt64Atomics", &features->shaderBufferInt64Atomics) &&
    visitor->Visit("shaderSharedInt64Atomics", &features->shaderSharedInt64Atomics) &&
    visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
    visitor->Visit("shaderInt8", &features->shaderInt8) &&
    visitor->Visit("descriptorIndexing", &features->descriptorIndexing) &&
    visitor->Visit("shaderInputAttachmentArrayDynamicIndexing", &features->shaderInputAttachmentArrayDynamicIndexing) &&
    visitor->Visit("shaderUniformTexelBufferArrayDynamicIndexing", &features->shaderUniformTexelBufferArrayDynamicIndexing) &&
    visitor->Visit("shaderStorageTexelBufferArrayDynamicIndexing", &features->shaderStorageTexelBufferArrayDynamicIndexing) &&
    visitor->Visit("shaderUniformBufferArrayNonUniformIndexing", &features->shaderUniformBufferArrayNonUniformIndexing) &&
    visitor->Visit("shaderSampledImageArrayNonUniformIndexing", &features->shaderSampledImageArrayNonUniformIndexing) &&
    visitor->Visit("shaderStorageBufferArrayNonUniformIndexing", &features->shaderStorageBufferArrayNonUniformIndexing) &&
    visitor->Visit("shaderStorageImageArrayNonUniformIndexing", &features->shaderStorageImageArrayNonUniformIndexing) &&
    visitor->Visit("shaderInputAttachmentArrayNonUniformIndexing", &features->shaderInputAttachmentArrayNonUniformIndexing) &&
    visitor->Visit("shaderUniformTexelBufferArrayNonUniformIndexing", &features->shaderUniformTexelBufferArrayNonUniformIndexing) &&
    visitor->Visit("shaderStorageTexelBufferArrayNonUniformIndexing", &features->shaderStorageTexelBufferArrayNonUniformIndexing) &&
    visitor->Visit("descriptorBindingUniformBufferUpdateAfterBind", &features->descriptorBindingUniformBufferUpdateAfterBind) &&
    visitor->Visit("descriptorBindingSampledImageUpdateAfterBind", &features->descriptorBindingSampledImageUpdateAfterBind) &&
    visitor->Visit("descriptorBindingStorageImageUpdateAfterBind", &features->descriptorBindingStorageImageUpdateAfterBind) &&
    visitor->Visit("descriptorBindingStorageBufferUpdateAfterBind", &features->descriptorBindingStorageBufferUpdateAfterBind) &&
    visitor->Visit("descriptorBindingUniformTexelBufferUpdateAfterBind", &features->descriptorBindingUniformTexelBufferUpdateAfterBind) &&
    visitor->Visit("descriptorBindingStorageTexelBufferUpdateAfterBind", &features->descriptorBindingStorageTexelBufferUpdateAfterBind) &&
    visitor->Visit("descriptorBindingUpdateUnusedWhilePending", &features->descriptorBindingUpdateUnusedWhilePending) &&
    visitor->Visit("descriptorBindingPartiallyBound", &features->descriptorBindingPartiallyBound) &&
    visitor->Visit("descriptorBindingVariableDescriptorCount", &features->descriptorBindingVariableDescriptorCount) &&
    visitor->Visit("runtimeDescriptorArray", &features->runtimeDescriptorArray) &&
    visitor->Visit("samplerFilterMinmax", &features->samplerFilterMinmax) &&
    visitor->Visit("scalarBlockLayout", &features->scalarBlockLayout) &&
    visitor->Visit("imagelessFramebuffer", &features->imagelessFramebuffer) &&
    visitor->Visit("uniformBufferStandardLayout", &features->uniformBufferStandardLayout) &&
    visitor->Visit("shaderSubgroupExtendedTypes", &features->shaderSubgroupExtendedTypes) &&
    visitor->Visit("separateDepthStencilLayouts", &features->separateDepthStencilLayouts) &&
    visitor->Visit("hostQueryReset", &features->hostQueryReset) &&
    visitor->Visit("timelineSemaphore", &features->timelineSemaphore) &&
    visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
    visitor->Visit("bufferDeviceAddressCaptureReplay", &features->bufferDeviceAddressCaptureReplay) &&
    visitor->Visit("bufferDeviceAddressMultiDevice", &features->bufferDeviceAddressMultiDevice) &&
    visitor->Visit("vulkanMemoryModel", &features->vulkanMemoryModel) &&
    visitor->Visit("vulkanMemoryModelDeviceScope", &features->vulkanMemoryModelDeviceScope) &&
    visitor->Visit("vulkanMemoryModelAvailabilityVisibilityChains", &features->vulkanMemoryModelAvailabilityVisibilityChains) &&
    visitor->Visit("shaderOutputViewportIndex", &features->shaderOutputViewportIndex) &&
    visitor->Visit("shaderOutputLayer", &features->shaderOutputLayer) &&
    visitor->Visit("shaderOutputLayer", &features->shaderOutputLayer);
}
// clang-format on

template <typename Visitor>
inline bool Iterate(Visitor* visitor,
                    VkJsonExtDriverProperties* properties) {
@@ -843,6 +974,7 @@ inline bool Iterate(Visitor* visitor, VkJsonDevice* device) {
  switch (device->properties.apiVersion ^
          VK_API_VERSION_PATCH(device->properties.apiVersion)) {
    case VK_API_VERSION_1_2:
      ret &= visitor->Visit("core12", &device->core12);
      FALLTHROUGH_INTENDED;
    case VK_API_VERSION_1_1:
      ret &=
@@ -899,6 +1031,7 @@ inline bool Iterate(Visitor* visitor, VkJsonInstance* instance) {
  bool ret = true;
  switch (instance->api_version ^ VK_API_VERSION_PATCH(instance->api_version)) {
    case VK_API_VERSION_1_2:
      ret &= visitor->Visit("apiVersion", &instance->api_version);
      FALLTHROUGH_INTENDED;
    case VK_API_VERSION_1_1:
      ret &= visitor->Visit("deviceGroups", &instance->device_groups);
+7 −0
Original line number Diff line number Diff line
@@ -74,6 +74,11 @@ struct VkJsonExtShaderFloat16Int8Features {
  VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr;
};

struct VkJsonCore12 {
  VkPhysicalDeviceVulkan12Properties properties;
  VkPhysicalDeviceVulkan12Features features;
};

struct VkJsonDevice {
  VkJsonDevice() {
    memset(&properties, 0, sizeof(VkPhysicalDeviceProperties));
@@ -98,6 +103,7 @@ struct VkJsonDevice {
           sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
    memset(&shader_draw_parameter_features, 0,
           sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
    memset(&core12, 0, sizeof(VkJsonCore12));
  }
  VkPhysicalDeviceProperties properties;
  VkPhysicalDeviceFeatures features;
@@ -125,6 +131,7 @@ struct VkJsonDevice {
      external_fence_properties;
  std::map<VkExternalSemaphoreHandleTypeFlagBits, VkExternalSemaphoreProperties>
      external_semaphore_properties;
  VkJsonCore12 core12;
};

struct VkJsonDeviceGroup {
+40 −36
Original line number Diff line number Diff line
@@ -157,76 +157,64 @@ VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {
      }
    }

    VkPhysicalDeviceProperties2 properties2 = {
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
        nullptr,
        {},
    };

    device.subgroup_properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
    device.subgroup_properties.pNext = properties2.pNext;
    properties2.pNext = &device.subgroup_properties;
    device.subgroup_properties.pNext = properties.pNext;
    properties.pNext = &device.subgroup_properties;

    device.point_clipping_properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES;
    device.point_clipping_properties.pNext = properties2.pNext;
    properties2.pNext = &device.point_clipping_properties;
    device.point_clipping_properties.pNext = properties.pNext;
    properties.pNext = &device.point_clipping_properties;

    device.multiview_properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES;
    device.multiview_properties.pNext = properties2.pNext;
    properties2.pNext = &device.multiview_properties;
    device.multiview_properties.pNext = properties.pNext;
    properties.pNext = &device.multiview_properties;

    device.id_properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
    device.id_properties.pNext = properties2.pNext;
    properties2.pNext = &device.id_properties;
    device.id_properties.pNext = properties.pNext;
    properties.pNext = &device.id_properties;

    device.maintenance3_properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
    device.maintenance3_properties.pNext = properties2.pNext;
    properties2.pNext = &device.maintenance3_properties;
    device.maintenance3_properties.pNext = properties.pNext;
    properties.pNext = &device.maintenance3_properties;

    vkGetPhysicalDeviceProperties2(physical_device, &properties2);

    VkPhysicalDeviceFeatures2 features2 = {
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
        nullptr,
        {},
    };
    vkGetPhysicalDeviceProperties2(physical_device, &properties);

    device.bit16_storage_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
    device.bit16_storage_features.pNext = features2.pNext;
    features2.pNext = &device.bit16_storage_features;
    device.bit16_storage_features.pNext = features.pNext;
    features.pNext = &device.bit16_storage_features;

    device.multiview_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
    device.multiview_features.pNext = features2.pNext;
    features2.pNext = &device.multiview_features;
    device.multiview_features.pNext = features.pNext;
    features.pNext = &device.multiview_features;

    device.variable_pointer_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
    device.variable_pointer_features.pNext = features2.pNext;
    features2.pNext = &device.variable_pointer_features;
    device.variable_pointer_features.pNext = features.pNext;
    features.pNext = &device.variable_pointer_features;

    device.protected_memory_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
    device.protected_memory_features.pNext = features2.pNext;
    features2.pNext = &device.protected_memory_features;
    device.protected_memory_features.pNext = features.pNext;
    features.pNext = &device.protected_memory_features;

    device.sampler_ycbcr_conversion_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
    device.sampler_ycbcr_conversion_features.pNext = features2.pNext;
    features2.pNext = &device.sampler_ycbcr_conversion_features;
    device.sampler_ycbcr_conversion_features.pNext = features.pNext;
    features.pNext = &device.sampler_ycbcr_conversion_features;

    device.shader_draw_parameter_features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES;
    device.shader_draw_parameter_features.pNext = features2.pNext;
    features2.pNext = &device.shader_draw_parameter_features;
    device.shader_draw_parameter_features.pNext = features.pNext;
    features.pNext = &device.shader_draw_parameter_features;

    vkGetPhysicalDeviceFeatures2(physical_device, &features2);
    vkGetPhysicalDeviceFeatures2(physical_device, &features);

    VkPhysicalDeviceExternalFenceInfo external_fence_info = {
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, nullptr,
@@ -272,6 +260,22 @@ VkJsonDevice VkJsonGetDevice(VkPhysicalDevice physical_device) {
    }
  }

  if (device.properties.apiVersion >= VK_API_VERSION_1_2) {
    device.core12.properties.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
    device.core12.properties.pNext = properties.pNext;
    properties.pNext = &device.core12.properties;

    vkGetPhysicalDeviceProperties2(physical_device, &properties);

    device.core12.features.sType =
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
    device.core12.features.pNext = features.pNext;
    features.pNext = &device.core12.features;

    vkGetPhysicalDeviceFeatures2(physical_device, &features);
  }

  return device;
}