From 2fb68f74c4ff0a6c879ba8be65adef9995808dfc Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 21 Sep 2021 15:04:10 -0700 Subject: [PATCH] turnip: Use the shared now-in-core feature/prop extension helper functions. Reviewed-by: Jason Ekstrand Part-of: --- src/freedreno/vulkan/tu_device.c | 280 ++----------------------------- 1 file changed, 10 insertions(+), 270 deletions(-) diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 3053d5052c2..7a0561823dd 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -567,113 +567,14 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, }; tu_get_physical_device_features_1_2(pdevice, &core_1_2); -#define CORE_FEATURE(major, minor, feature) \ - features->feature = core_##major##_##minor.feature - vk_foreach_struct(ext, pFeatures->pNext) { + if (vk_get_physical_device_core_1_1_feature_ext(ext, &core_1_1)) + continue; + if (vk_get_physical_device_core_1_2_feature_ext(ext, &core_1_2)) + continue; + switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: { - tu_get_physical_device_features_1_1(pdevice, (void *)ext); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: { - tu_get_physical_device_features_1_2(pdevice, (void *)ext); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: { - VkPhysicalDeviceVariablePointersFeatures *features = (void *) ext; - CORE_FEATURE(1, 1, variablePointersStorageBuffer); - CORE_FEATURE(1, 1, variablePointers); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: { - VkPhysicalDeviceMultiviewFeatures *features = - (VkPhysicalDeviceMultiviewFeatures *) ext; - CORE_FEATURE(1, 1, multiview); - CORE_FEATURE(1, 1, multiviewGeometryShader); - CORE_FEATURE(1, 1, multiviewTessellationShader); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR: { - VkPhysicalDeviceImagelessFramebufferFeaturesKHR *features = - (VkPhysicalDeviceImagelessFramebufferFeaturesKHR *)ext; - CORE_FEATURE(1, 2, imagelessFramebuffer); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: { - VkPhysicalDeviceShaderDrawParametersFeatures *features = - (VkPhysicalDeviceShaderDrawParametersFeatures *) ext; - CORE_FEATURE(1, 1, shaderDrawParameters); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: { - VkPhysicalDeviceProtectedMemoryFeatures *features = - (VkPhysicalDeviceProtectedMemoryFeatures *) ext; - CORE_FEATURE(1, 1, protectedMemory); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: { - VkPhysicalDevice16BitStorageFeatures *features = - (VkPhysicalDevice16BitStorageFeatures *) ext; - CORE_FEATURE(1, 1, storageBuffer16BitAccess); - CORE_FEATURE(1, 1, uniformAndStorageBuffer16BitAccess); - CORE_FEATURE(1, 1, storagePushConstant16); - CORE_FEATURE(1, 1, storageInputOutput16); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: { - VkPhysicalDeviceSamplerYcbcrConversionFeatures *features = - (VkPhysicalDeviceSamplerYcbcrConversionFeatures *) ext; - CORE_FEATURE(1, 1, samplerYcbcrConversion); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: { - VkPhysicalDeviceDescriptorIndexingFeaturesEXT *features = - (VkPhysicalDeviceDescriptorIndexingFeaturesEXT *) ext; - CORE_FEATURE(1, 2, shaderInputAttachmentArrayDynamicIndexing); - CORE_FEATURE(1, 2, shaderUniformTexelBufferArrayDynamicIndexing); - CORE_FEATURE(1, 2, shaderStorageTexelBufferArrayDynamicIndexing); - CORE_FEATURE(1, 2, shaderUniformBufferArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderSampledImageArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderStorageBufferArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderStorageImageArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderInputAttachmentArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderUniformTexelBufferArrayNonUniformIndexing); - CORE_FEATURE(1, 2, shaderStorageTexelBufferArrayNonUniformIndexing); - CORE_FEATURE(1, 2, descriptorBindingUniformBufferUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingSampledImageUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingStorageImageUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingStorageBufferUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingUniformTexelBufferUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingStorageTexelBufferUpdateAfterBind); - CORE_FEATURE(1, 2, descriptorBindingUpdateUnusedWhilePending); - CORE_FEATURE(1, 2, descriptorBindingPartiallyBound); - CORE_FEATURE(1, 2, descriptorBindingVariableDescriptorCount); - CORE_FEATURE(1, 2, runtimeDescriptorArray); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: { - VkPhysicalDevice8BitStorageFeaturesKHR *features = - (VkPhysicalDevice8BitStorageFeaturesKHR *)ext; - CORE_FEATURE(1, 2, storageBuffer8BitAccess); - CORE_FEATURE(1, 2, uniformAndStorageBuffer8BitAccess); - CORE_FEATURE(1, 2, storagePushConstant8); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR: { - VkPhysicalDeviceBufferDeviceAddressFeaturesKHR *features = (void *)ext; - CORE_FEATURE(1, 2, bufferDeviceAddress); - CORE_FEATURE(1, 2, bufferDeviceAddressCaptureReplay); - CORE_FEATURE(1, 2, bufferDeviceAddressMultiDevice); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR: { - VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR *features = - (VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR *)ext; - CORE_FEATURE(1, 2, shaderSubgroupExtendedTypes); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: { VkPhysicalDeviceConditionalRenderingFeaturesEXT *features = (VkPhysicalDeviceConditionalRenderingFeaturesEXT *) ext; @@ -701,12 +602,6 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->vertexAttributeInstanceRateZeroDivisor = true; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: { - VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR *features = - (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR *)ext; - CORE_FEATURE(1, 2, uniformBufferStandardLayout); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT: { VkPhysicalDevicePrivateDataFeaturesEXT *features = (VkPhysicalDevicePrivateDataFeaturesEXT *)ext; @@ -731,12 +626,6 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->customBorderColorWithoutFormat = true; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: { - VkPhysicalDeviceHostQueryResetFeaturesEXT *features = - (VkPhysicalDeviceHostQueryResetFeaturesEXT *)ext; - CORE_FEATURE(1, 2, hostQueryReset); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: { VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *features = (void *)ext; features->extendedDynamicState = true; @@ -794,14 +683,6 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->shaderTerminateInvocation = true; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR: { - VkPhysicalDeviceVulkanMemoryModelFeaturesKHR *features = - (VkPhysicalDeviceVulkanMemoryModelFeaturesKHR *)ext; - CORE_FEATURE(1, 2, vulkanMemoryModel); - CORE_FEATURE(1, 2, vulkanMemoryModelDeviceScope); - CORE_FEATURE(1, 2, vulkanMemoryModelAvailabilityVisibilityChains); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: { VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *features = (VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *) ext; @@ -1092,15 +973,13 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, }; tu_get_physical_device_properties_1_2(pdevice, &core_1_2); -#define CORE_RENAMED_PROPERTY(major, minor, ext_property, core_property) \ - memcpy(&properties->ext_property, &core_##major##_##minor.core_property, \ - sizeof(core_##major##_##minor.core_property)) - -#define CORE_PROPERTY(major, minor, property) \ - CORE_RENAMED_PROPERTY(major, minor, property, property) - vk_foreach_struct(ext, pProperties->pNext) { + if (vk_get_physical_device_core_1_1_property_ext(ext, &core_1_1)) + continue; + if (vk_get_physical_device_core_1_2_property_ext(ext, &core_1_2)) + continue; + switch (ext->sType) { case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR: { VkPhysicalDevicePushDescriptorPropertiesKHR *properties = @@ -1108,46 +987,6 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, properties->maxPushDescriptors = MAX_PUSH_DESCRIPTORS; break; } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR: { - VkPhysicalDeviceDriverPropertiesKHR *properties = - (VkPhysicalDeviceDriverPropertiesKHR *) ext; - CORE_PROPERTY(1, 2, driverID); - CORE_PROPERTY(1, 2, driverName); - CORE_PROPERTY(1, 2, driverInfo); - CORE_PROPERTY(1, 2, conformanceVersion); - break; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES: { - VkPhysicalDeviceIDProperties *properties = - (VkPhysicalDeviceIDProperties *) ext; - CORE_PROPERTY(1, 1, deviceUUID); - CORE_PROPERTY(1, 1, driverUUID); - CORE_PROPERTY(1, 1, deviceLUID); - CORE_PROPERTY(1, 1, deviceLUIDValid); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: { - VkPhysicalDeviceMultiviewProperties *properties = - (VkPhysicalDeviceMultiviewProperties *) ext; - CORE_PROPERTY(1, 1, maxMultiviewViewCount); - CORE_PROPERTY(1, 1, maxMultiviewInstanceIndex); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: { - VkPhysicalDevicePointClippingProperties *properties = - (VkPhysicalDevicePointClippingProperties *) ext; - CORE_PROPERTY(1, 1, pointClippingBehavior); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: { - VkPhysicalDeviceMaintenance3Properties *properties = - (VkPhysicalDeviceMaintenance3Properties *) ext; - CORE_PROPERTY(1, 1, maxPerSetDescriptors); - CORE_PROPERTY(1, 1, maxMemoryAllocationSize); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT: { VkPhysicalDeviceTransformFeedbackPropertiesEXT *properties = (VkPhysicalDeviceTransformFeedbackPropertiesEXT *)ext; @@ -1179,25 +1018,6 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, properties->variableSampleLocations = true; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES: { - VkPhysicalDeviceSamplerFilterMinmaxProperties *properties = - (VkPhysicalDeviceSamplerFilterMinmaxProperties *)ext; - CORE_PROPERTY(1, 2, filterMinmaxImageComponentMapping); - CORE_PROPERTY(1, 2, filterMinmaxSingleComponentFormats); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: { - VkPhysicalDeviceSubgroupProperties *properties = - (VkPhysicalDeviceSubgroupProperties *)ext; - CORE_PROPERTY(1, 1, subgroupSize); - CORE_RENAMED_PROPERTY(1, 1, supportedStages, - subgroupSupportedStages); - CORE_RENAMED_PROPERTY(1, 1, supportedOperations, - subgroupSupportedOperations); - CORE_RENAMED_PROPERTY(1, 1, quadOperationsInAllStages, - subgroupQuadOperationsInAllStages); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: { VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *props = (VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *)ext; @@ -1209,71 +1029,12 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, props->maxCustomBorderColorSamplers = TU_BORDER_COLOR_COUNT; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES: { - VkPhysicalDeviceDepthStencilResolveProperties *properties = - (VkPhysicalDeviceDepthStencilResolveProperties *)ext; - CORE_PROPERTY(1, 2, supportedDepthResolveModes); - CORE_PROPERTY(1, 2, supportedStencilResolveModes); - CORE_PROPERTY(1, 2, independentResolveNone); - CORE_PROPERTY(1, 2, independentResolve); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR: { VkPhysicalDevicePerformanceQueryPropertiesKHR *properties = (VkPhysicalDevicePerformanceQueryPropertiesKHR *)ext; properties->allowCommandBufferQueryCopies = false; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { - VkPhysicalDeviceDescriptorIndexingPropertiesEXT *properties = - (VkPhysicalDeviceDescriptorIndexingPropertiesEXT *)ext; - CORE_PROPERTY(1, 2, maxUpdateAfterBindDescriptorsInAllPools); - CORE_PROPERTY(1, 2, shaderUniformBufferArrayNonUniformIndexingNative); - CORE_PROPERTY(1, 2, shaderSampledImageArrayNonUniformIndexingNative); - CORE_PROPERTY(1, 2, shaderStorageBufferArrayNonUniformIndexingNative); - CORE_PROPERTY(1, 2, shaderStorageImageArrayNonUniformIndexingNative); - CORE_PROPERTY(1, 2, shaderInputAttachmentArrayNonUniformIndexingNative); - CORE_PROPERTY(1, 2, robustBufferAccessUpdateAfterBind); - CORE_PROPERTY(1, 2, quadDivergentImplicitLod); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindSamplers); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindUniformBuffers); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindStorageBuffers); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindSampledImages); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindStorageImages); - CORE_PROPERTY(1, 2, maxPerStageDescriptorUpdateAfterBindInputAttachments); - CORE_PROPERTY(1, 2, maxPerStageUpdateAfterBindResources); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindSamplers); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindUniformBuffers); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindUniformBuffersDynamic); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindStorageBuffers); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindStorageBuffersDynamic); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindSampledImages); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindStorageImages); - CORE_PROPERTY(1, 2, maxDescriptorSetUpdateAfterBindInputAttachments); - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: { - VkPhysicalDeviceFloatControlsProperties *properties = - (VkPhysicalDeviceFloatControlsProperties *) ext; - CORE_PROPERTY(1, 2, denormBehaviorIndependence); - CORE_PROPERTY(1, 2, roundingModeIndependence); - CORE_PROPERTY(1, 2, shaderDenormFlushToZeroFloat16); - CORE_PROPERTY(1, 2, shaderDenormPreserveFloat16); - CORE_PROPERTY(1, 2, shaderRoundingModeRTEFloat16); - CORE_PROPERTY(1, 2, shaderRoundingModeRTZFloat16); - CORE_PROPERTY(1, 2, shaderSignedZeroInfNanPreserveFloat16); - CORE_PROPERTY(1, 2, shaderDenormFlushToZeroFloat32); - CORE_PROPERTY(1, 2, shaderDenormPreserveFloat32); - CORE_PROPERTY(1, 2, shaderRoundingModeRTEFloat32); - CORE_PROPERTY(1, 2, shaderRoundingModeRTZFloat32); - CORE_PROPERTY(1, 2, shaderSignedZeroInfNanPreserveFloat32); - CORE_PROPERTY(1, 2, shaderDenormFlushToZeroFloat64); - CORE_PROPERTY(1, 2, shaderDenormPreserveFloat64); - CORE_PROPERTY(1, 2, shaderRoundingModeRTEFloat64); - CORE_PROPERTY(1, 2, shaderRoundingModeRTZFloat64); - CORE_PROPERTY(1, 2, shaderSignedZeroInfNanPreserveFloat64); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { VkPhysicalDeviceRobustness2PropertiesEXT *props = (void *)ext; /* see write_buffer_descriptor() */ @@ -1282,19 +1043,6 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, props->robustUniformBufferAccessSizeAlignment = 16; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES: { - VkPhysicalDeviceTimelineSemaphorePropertiesKHR *properties = - (VkPhysicalDeviceTimelineSemaphorePropertiesKHR *) ext; - CORE_PROPERTY(1, 2, maxTimelineSemaphoreValueDifference); - break; - } - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: { - VkPhysicalDeviceProtectedMemoryProperties *properties = - (VkPhysicalDeviceProtectedMemoryProperties *)ext; - CORE_PROPERTY(1, 1, protectedNoFault); - break; - } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT: { VkPhysicalDeviceProvokingVertexPropertiesEXT *properties = @@ -1304,14 +1052,6 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: - tu_get_physical_device_properties_1_1(pdevice, (void *)ext); - break; - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES: - tu_get_physical_device_properties_1_2(pdevice, (void *)ext); - break; - default: break; }