diff options
author | 2021-09-07 23:39:36 +0000 | |
---|---|---|
committer | 2022-01-24 15:55:40 +0000 | |
commit | d35f0f66b71b69a55d81a7850f55179079abd10f (patch) | |
tree | c846cf84e24d07a8c776693985ea6b164a55e854 | |
parent | b68a2251024524f64447dc858aa3f017e07fdf78 (diff) |
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
-rw-r--r-- | vulkan/vkjson/vkjson.cc | 133 | ||||
-rw-r--r-- | vulkan/vkjson/vkjson.h | 7 | ||||
-rw-r--r-- | vulkan/vkjson/vkjson_instance.cc | 76 |
3 files changed, 180 insertions, 36 deletions
diff --git a/vulkan/vkjson/vkjson.cc b/vulkan/vkjson/vkjson.cc index bdb76484d0..90cf42c7f7 100644 --- a/vulkan/vkjson/vkjson.cc +++ b/vulkan/vkjson/vkjson.cc @@ -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 @@ -605,6 +619,123 @@ inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) { } 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) { return visitor->Visit("driverPropertiesKHR", @@ -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); diff --git a/vulkan/vkjson/vkjson.h b/vulkan/vkjson/vkjson.h index aca1d6085e..0575147efa 100644 --- a/vulkan/vkjson/vkjson.h +++ b/vulkan/vkjson/vkjson.h @@ -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 { diff --git a/vulkan/vkjson/vkjson_instance.cc b/vulkan/vkjson/vkjson_instance.cc index 587249539f..6e301c78a4 100644 --- a/vulkan/vkjson/vkjson_instance.cc +++ b/vulkan/vkjson/vkjson_instance.cc @@ -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; - - vkGetPhysicalDeviceProperties2(physical_device, &properties2); + device.maintenance3_properties.pNext = properties.pNext; + properties.pNext = &device.maintenance3_properties; - 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; } |