diff options
author | Alyssa Rosenzweig <alyssa@rosenzweig.io> | 2023-05-12 17:47:00 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2023-05-16 17:08:16 +0000 |
commit | 27d55436173802948eaffb0b53ce12aafd922492 (patch) | |
tree | 15c17fe0aa9a2729d58de17705efa6ff8395711b | |
parent | 4aea3fb3dd22425c264e5f6899fe8c8ce8996c7d (diff) | |
download | mesa-27d55436173802948eaffb0b53ce12aafd922492.tar.gz |
tu: Use common GetPhysicalDeviceFeatures2
Delete the code. This isn't quite as nice as for the C drivers, because we can't
use a designated initializer in C++ without matching the order and this is an
autogenerated struct where it may not necessarily make sense to fix an order.
Not a big deal to workaround though.
Tested by diff'ing vulkaninfo output before/after the patch and confirming no
changes (other than the driverInfo git sha, the pipelineCacheUUID, the
driverUUID, and slight fluctuation in the memory budget).
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23000>
-rw-r--r-- | src/freedreno/vulkan/tu_device.cc | 780 |
1 files changed, 305 insertions, 475 deletions
diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 9f4be7dcd54..53b61289a3d 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -277,6 +277,307 @@ get_device_extensions(const struct tu_physical_device *device, } }; } +static void +tu_get_features(struct tu_physical_device *pdevice, + struct vk_features *features) +{ + *features = (struct vk_features) { false }; + + /* Vulkan 1.0 */ + features->robustBufferAccess = true; + features->fullDrawIndexUint32 = true; + features->imageCubeArray = true; + features->independentBlend = true; + features->geometryShader = true; + features->tessellationShader = true; + features->sampleRateShading = true; + features->dualSrcBlend = true; + features->logicOp = true; + features->multiDrawIndirect = true; + features->drawIndirectFirstInstance = true; + features->depthClamp = true; + features->depthBiasClamp = true; + features->fillModeNonSolid = true; + features->depthBounds = true; + features->wideLines = false; + features->largePoints = true; + features->alphaToOne = true; + features->multiViewport = true; + features->samplerAnisotropy = true; + features->textureCompressionETC2 = true; + features->textureCompressionASTC_LDR = true; + features->textureCompressionBC = true; + features->occlusionQueryPrecise = true; + features->pipelineStatisticsQuery = true; + features->vertexPipelineStoresAndAtomics = true; + features->fragmentStoresAndAtomics = true; + features->shaderTessellationAndGeometryPointSize = true; + features->shaderImageGatherExtended = true; + features->shaderStorageImageExtendedFormats = true; + features->shaderStorageImageMultisample = false; + features->shaderStorageImageReadWithoutFormat = true; + features->shaderStorageImageWriteWithoutFormat = true; + features->shaderUniformBufferArrayDynamicIndexing = true; + features->shaderSampledImageArrayDynamicIndexing = true; + features->shaderStorageBufferArrayDynamicIndexing = true; + features->shaderStorageImageArrayDynamicIndexing = true; + features->shaderClipDistance = true; + features->shaderCullDistance = true; + features->shaderFloat64 = false; + features->shaderInt64 = false; + features->shaderInt16 = true; + features->sparseBinding = false; + features->variableMultisampleRate = true; + features->inheritedQueries = true; + + /* Vulkan 1.1 */ + features->storageBuffer16BitAccess = pdevice->info->a6xx.storage_16bit; + features->uniformAndStorageBuffer16BitAccess = false; + features->storagePushConstant16 = false; + features->storageInputOutput16 = false; + features->multiview = true; + features->multiviewGeometryShader = false; + features->multiviewTessellationShader = false; + features->variablePointersStorageBuffer = true; + features->variablePointers = true; + features->protectedMemory = false; + features->samplerYcbcrConversion = true; + features->shaderDrawParameters = true; + + /* Vulkan 1.2 */ + features->samplerMirrorClampToEdge = true; + features->drawIndirectCount = true; + features->storageBuffer8BitAccess = false; + features->uniformAndStorageBuffer8BitAccess = false; + features->storagePushConstant8 = false; + features->shaderBufferInt64Atomics = false; + features->shaderSharedInt64Atomics = false; + features->shaderFloat16 = true; + features->shaderInt8 = false; + + features->descriptorIndexing = true; + features->shaderInputAttachmentArrayDynamicIndexing = false; + features->shaderUniformTexelBufferArrayDynamicIndexing = true; + features->shaderStorageTexelBufferArrayDynamicIndexing = true; + features->shaderUniformBufferArrayNonUniformIndexing = true; + features->shaderSampledImageArrayNonUniformIndexing = true; + features->shaderStorageBufferArrayNonUniformIndexing = true; + features->shaderStorageImageArrayNonUniformIndexing = true; + features->shaderInputAttachmentArrayNonUniformIndexing = false; + features->shaderUniformTexelBufferArrayNonUniformIndexing = true; + features->shaderStorageTexelBufferArrayNonUniformIndexing = true; + features->descriptorBindingUniformBufferUpdateAfterBind = true; + features->descriptorBindingSampledImageUpdateAfterBind = true; + features->descriptorBindingStorageImageUpdateAfterBind = true; + features->descriptorBindingStorageBufferUpdateAfterBind = true; + features->descriptorBindingUniformTexelBufferUpdateAfterBind = true; + features->descriptorBindingStorageTexelBufferUpdateAfterBind = true; + features->descriptorBindingUpdateUnusedWhilePending = true; + features->descriptorBindingPartiallyBound = true; + features->descriptorBindingVariableDescriptorCount = true; + features->runtimeDescriptorArray = true; + + features->samplerFilterMinmax = true; + features->scalarBlockLayout = true; + features->imagelessFramebuffer = true; + features->uniformBufferStandardLayout = true; + features->shaderSubgroupExtendedTypes = true; + features->separateDepthStencilLayouts = true; + features->hostQueryReset = true; + features->timelineSemaphore = true; + features->bufferDeviceAddress = true; + features->bufferDeviceAddressCaptureReplay = pdevice->has_set_iova; + features->bufferDeviceAddressMultiDevice = false; + features->vulkanMemoryModel = true; + features->vulkanMemoryModelDeviceScope = true; + features->vulkanMemoryModelAvailabilityVisibilityChains = true; + features->shaderOutputViewportIndex = true; + features->shaderOutputLayer = true; + features->subgroupBroadcastDynamicId = true; + + /* Vulkan 1.3 */ + features->robustImageAccess = true; + features->inlineUniformBlock = true; + features->descriptorBindingInlineUniformBlockUpdateAfterBind = true; + features->pipelineCreationCacheControl = true; + features->privateData = true; + features->shaderDemoteToHelperInvocation = true; + features->shaderTerminateInvocation = true; + features->subgroupSizeControl = true; + features->computeFullSubgroups = true; + features->synchronization2 = true; + features->textureCompressionASTC_HDR = false; + features->shaderZeroInitializeWorkgroupMemory = true; + features->dynamicRendering = true; + features->shaderIntegerDotProduct = true; + features->maintenance4 = true; + + /* VK_EXT_conditional_rendering */ + features->conditionalRendering = true; + features->inheritedConditionalRendering = true; + + /* VK_EXT_transform_feedback */ + features->transformFeedback = true; + features->geometryStreams = true; + + /* VK_EXT_index_type_uint8 */ + features->indexTypeUint8 = true; + /* VK_EXT_vertex_attribute_divisor */ + features->vertexAttributeInstanceRateDivisor = true; + features->vertexAttributeInstanceRateZeroDivisor = true; + + /* VK_EXT_depth_clip_enable */ + features->depthClipEnable = true; + + /* VK_EXT_4444_formats */ + features->formatA4R4G4B4 = true; + features->formatA4B4G4R4 = true; + + /* VK_EXT_border_color_swizzle */ + features->borderColorSwizzle = true; + features->borderColorSwizzleFromImage = true; + + /* VK_EXT_custom_border_color */ + features->customBorderColors = true; + features->customBorderColorWithoutFormat = true; + + /* VK_EXT_extended_dynamic_state */ + features->extendedDynamicState = true; + + /* VK_EXT_extended_dynamic_state2 */ + features->extendedDynamicState2 = true; + features->extendedDynamicState2LogicOp = true; + features->extendedDynamicState2PatchControlPoints = true; + + /* VK_EXT_extended_dynamic_state3 */ + features->extendedDynamicState3PolygonMode = true; + features->extendedDynamicState3TessellationDomainOrigin = true; + features->extendedDynamicState3DepthClampEnable = true; + features->extendedDynamicState3DepthClipEnable = true; + features->extendedDynamicState3LogicOpEnable = true; + features->extendedDynamicState3SampleMask = true; + features->extendedDynamicState3RasterizationSamples = true; + features->extendedDynamicState3AlphaToCoverageEnable = true; + features->extendedDynamicState3AlphaToOneEnable = true; + features->extendedDynamicState3DepthClipNegativeOneToOne = true; + features->extendedDynamicState3RasterizationStream = true; + features->extendedDynamicState3ConservativeRasterizationMode = false; + features->extendedDynamicState3ExtraPrimitiveOverestimationSize = false; + features->extendedDynamicState3LineRasterizationMode = true; + features->extendedDynamicState3LineStippleEnable = false; + features->extendedDynamicState3ProvokingVertexMode = true; + features->extendedDynamicState3SampleLocationsEnable = true; + features->extendedDynamicState3ColorBlendEnable = true; + features->extendedDynamicState3ColorBlendEquation = true; + features->extendedDynamicState3ColorWriteMask = true; + features->extendedDynamicState3ViewportWScalingEnable = false; + features->extendedDynamicState3ViewportSwizzle = false; + features->extendedDynamicState3ShadingRateImageEnable = false; + features->extendedDynamicState3CoverageToColorEnable = false; + features->extendedDynamicState3CoverageToColorLocation = false; + features->extendedDynamicState3CoverageModulationMode = false; + features->extendedDynamicState3CoverageModulationTableEnable = false; + features->extendedDynamicState3CoverageModulationTable = false; + features->extendedDynamicState3CoverageReductionMode = false; + features->extendedDynamicState3RepresentativeFragmentTestEnable = false; + features->extendedDynamicState3ColorBlendAdvanced = false; + + /* VK_KHR_performance_query */ + features->performanceCounterQueryPools = true; + features->performanceCounterMultipleQueryPools = false; + + /* VK_KHR_pipeline_executable_properties */ + features->pipelineExecutableInfo = true; + + /* VK_EXT_robustness2 */ + features->robustBufferAccess2 = true; + features->robustImageAccess2 = true; + features->nullDescriptor = true; + + /* VK_EXT_provoking_vertex */ + features->provokingVertexLast = true; + features->transformFeedbackPreservesProvokingVertex = true; + + /* VK_EXT_mutable_descriptor_type */ + features->mutableDescriptorType = true; + + /* VK_EXT_line_rasterization */ + features->rectangularLines = true; + features->bresenhamLines = true; + features->smoothLines = false; + features->stippledRectangularLines = false; + features->stippledBresenhamLines = false; + features->stippledSmoothLines = false; + + /* VK_EXT_primitive_topology_list_restart */ + features->primitiveTopologyListRestart = true; + features->primitiveTopologyPatchListRestart = false; + + /* VK_EXT_rasterization_order_attachment_access */ + features->rasterizationOrderColorAttachmentAccess = true; + features->rasterizationOrderDepthAttachmentAccess = true; + features->rasterizationOrderStencilAttachmentAccess = true; + + /* VK_EXT_depth_clip_control */ + features->depthClipControl = true; + + /* VK_EXT_texel_buffer_alignment */ + features->texelBufferAlignment = true; + + /* VK_EXT_primitives_generated_query */ + features->primitivesGeneratedQuery = true; + features->primitivesGeneratedQueryWithRasterizerDiscard = false; + features->primitivesGeneratedQueryWithNonZeroStreams = false; + + /* VK_EXT_image_view_min_lod */ + features->minLod = true; + + /* VK_EXT_image_2d_view_of_3d */ + features->image2DViewOf3D = true; + features->sampler2DViewOf3D = true; + + /* VK_EXT_color_write_enable */ + features->colorWriteEnable = true; + + /* VK_EXT_shader_module_identifier */ + features->shaderModuleIdentifier = true; + + /* VK_EXT_vertex_input_dynamic_state */ + features->vertexInputDynamicState = true; + + /* VK_EXT_non_seamless_cube_map */ + features->nonSeamlessCubeMap = true; + + /* VK_EXT_attachment_feedback_loop_layout */ + features->attachmentFeedbackLoopLayout = true; + + /* VK_EXT_global_priority_query */ + features->globalPriorityQuery = true; + + /* VK_EXT_multi_draw */ + features->multiDraw = true; + + /* VK_EXT_graphics_pipeline_library */ + features->graphicsPipelineLibrary = true; + + /* VK_KHR_present_id */ + features->presentId = pdevice->vk.supported_extensions.KHR_present_id; + + /* VK_KHR_present_wait */ + features->presentWait = pdevice->vk.supported_extensions.KHR_present_wait; + + /* VK_EXT_descriptor_buffer */ + features->descriptorBuffer = true; + features->descriptorBufferCaptureReplay = pdevice->has_set_iova; + features->descriptorBufferImageLayoutIgnored = true; + features->descriptorBufferPushDescriptors = true; + + /* VK_EXT_fragment_density_map */ + features->fragmentDensityMap = true; + features->fragmentDensityMapDynamic = false; + features->fragmentDensityMapNonSubsampledImages = true; +} + static const struct vk_pipeline_cache_object_ops *const cache_import_ops[] = { &tu_shaders_ops, &tu_nir_shaders_ops, @@ -357,6 +658,9 @@ tu_physical_device_init(struct tu_physical_device *device, struct vk_device_extension_table supported_extensions; get_device_extensions(device, &supported_extensions); + struct vk_features supported_features; + tu_get_features(device, &supported_features); + struct vk_physical_device_dispatch_table dispatch_table; vk_physical_device_dispatch_table_from_entrypoints( &dispatch_table, &tu_physical_device_entrypoints, true); @@ -365,7 +669,7 @@ tu_physical_device_init(struct tu_physical_device *device, result = vk_physical_device_init(&device->vk, &instance->vk, &supported_extensions, - NULL, + &supported_features, &dispatch_table); if (result != VK_SUCCESS) goto fail_free_name; @@ -531,480 +835,6 @@ tu_DestroyInstance(VkInstance _instance, } static void -tu_get_physical_device_features_1_1(struct tu_physical_device *pdevice, - VkPhysicalDeviceVulkan11Features *features) -{ - features->storageBuffer16BitAccess = pdevice->info->a6xx.storage_16bit; - features->uniformAndStorageBuffer16BitAccess = false; - features->storagePushConstant16 = false; - features->storageInputOutput16 = false; - features->multiview = true; - features->multiviewGeometryShader = false; - features->multiviewTessellationShader = false; - features->variablePointersStorageBuffer = true; - features->variablePointers = true; - features->protectedMemory = false; - features->samplerYcbcrConversion = true; - features->shaderDrawParameters = true; -} - -static void -tu_get_physical_device_features_1_2(struct tu_physical_device *pdevice, - VkPhysicalDeviceVulkan12Features *features) -{ - features->samplerMirrorClampToEdge = true; - features->drawIndirectCount = true; - features->storageBuffer8BitAccess = false; - features->uniformAndStorageBuffer8BitAccess = false; - features->storagePushConstant8 = false; - features->shaderBufferInt64Atomics = false; - features->shaderSharedInt64Atomics = false; - features->shaderFloat16 = true; - features->shaderInt8 = false; - - features->descriptorIndexing = true; - features->shaderInputAttachmentArrayDynamicIndexing = false; - features->shaderUniformTexelBufferArrayDynamicIndexing = true; - features->shaderStorageTexelBufferArrayDynamicIndexing = true; - features->shaderUniformBufferArrayNonUniformIndexing = true; - features->shaderSampledImageArrayNonUniformIndexing = true; - features->shaderStorageBufferArrayNonUniformIndexing = true; - features->shaderStorageImageArrayNonUniformIndexing = true; - features->shaderInputAttachmentArrayNonUniformIndexing = false; - features->shaderUniformTexelBufferArrayNonUniformIndexing = true; - features->shaderStorageTexelBufferArrayNonUniformIndexing = true; - features->descriptorBindingUniformBufferUpdateAfterBind = true; - features->descriptorBindingSampledImageUpdateAfterBind = true; - features->descriptorBindingStorageImageUpdateAfterBind = true; - features->descriptorBindingStorageBufferUpdateAfterBind = true; - features->descriptorBindingUniformTexelBufferUpdateAfterBind = true; - features->descriptorBindingStorageTexelBufferUpdateAfterBind = true; - features->descriptorBindingUpdateUnusedWhilePending = true; - features->descriptorBindingPartiallyBound = true; - features->descriptorBindingVariableDescriptorCount = true; - features->runtimeDescriptorArray = true; - - features->samplerFilterMinmax = true; - features->scalarBlockLayout = true; - features->imagelessFramebuffer = true; - features->uniformBufferStandardLayout = true; - features->shaderSubgroupExtendedTypes = true; - features->separateDepthStencilLayouts = true; - features->hostQueryReset = true; - features->timelineSemaphore = true; - features->bufferDeviceAddress = true; - features->bufferDeviceAddressCaptureReplay = pdevice->has_set_iova; - features->bufferDeviceAddressMultiDevice = false; - features->vulkanMemoryModel = true; - features->vulkanMemoryModelDeviceScope = true; - features->vulkanMemoryModelAvailabilityVisibilityChains = true; - features->shaderOutputViewportIndex = true; - features->shaderOutputLayer = true; - features->subgroupBroadcastDynamicId = true; -} - -static void -tu_get_physical_device_features_1_3(struct tu_physical_device *pdevice, - VkPhysicalDeviceVulkan13Features *features) -{ - features->robustImageAccess = true; - features->inlineUniformBlock = true; - features->descriptorBindingInlineUniformBlockUpdateAfterBind = true; - features->pipelineCreationCacheControl = true; - features->privateData = true; - features->shaderDemoteToHelperInvocation = true; - features->shaderTerminateInvocation = true; - features->subgroupSizeControl = true; - features->computeFullSubgroups = true; - features->synchronization2 = true; - features->textureCompressionASTC_HDR = false; - features->shaderZeroInitializeWorkgroupMemory = true; - features->dynamicRendering = true; - features->shaderIntegerDotProduct = true; - features->maintenance4 = true; -} - -void -tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2 *pFeatures) -{ - TU_FROM_HANDLE(tu_physical_device, pdevice, physicalDevice); - - pFeatures->features = (VkPhysicalDeviceFeatures) { - .robustBufferAccess = true, - .fullDrawIndexUint32 = true, - .imageCubeArray = true, - .independentBlend = true, - .geometryShader = true, - .tessellationShader = true, - .sampleRateShading = true, - .dualSrcBlend = true, - .logicOp = true, - .multiDrawIndirect = true, - .drawIndirectFirstInstance = true, - .depthClamp = true, - .depthBiasClamp = true, - .fillModeNonSolid = true, - .depthBounds = true, - .wideLines = false, - .largePoints = true, - .alphaToOne = true, - .multiViewport = true, - .samplerAnisotropy = true, - .textureCompressionETC2 = true, - .textureCompressionASTC_LDR = true, - .textureCompressionBC = true, - .occlusionQueryPrecise = true, - .pipelineStatisticsQuery = true, - .vertexPipelineStoresAndAtomics = true, - .fragmentStoresAndAtomics = true, - .shaderTessellationAndGeometryPointSize = true, - .shaderImageGatherExtended = true, - .shaderStorageImageExtendedFormats = true, - .shaderStorageImageMultisample = false, - .shaderStorageImageReadWithoutFormat = true, - .shaderStorageImageWriteWithoutFormat = true, - .shaderUniformBufferArrayDynamicIndexing = true, - .shaderSampledImageArrayDynamicIndexing = true, - .shaderStorageBufferArrayDynamicIndexing = true, - .shaderStorageImageArrayDynamicIndexing = true, - .shaderClipDistance = true, - .shaderCullDistance = true, - .shaderFloat64 = false, - .shaderInt64 = false, - .shaderInt16 = true, - .sparseBinding = false, - .variableMultisampleRate = true, - .inheritedQueries = true, - }; - - VkPhysicalDeviceVulkan11Features core_1_1 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, - }; - tu_get_physical_device_features_1_1(pdevice, &core_1_1); - - VkPhysicalDeviceVulkan12Features core_1_2 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, - }; - tu_get_physical_device_features_1_2(pdevice, &core_1_2); - - VkPhysicalDeviceVulkan13Features core_1_3 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, - }; - tu_get_physical_device_features_1_3(pdevice, &core_1_3); - - 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; - if (vk_get_physical_device_core_1_3_feature_ext(ext, &core_1_3)) - continue; - - switch (ext->sType) { - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: { - VkPhysicalDeviceConditionalRenderingFeaturesEXT *features = - (VkPhysicalDeviceConditionalRenderingFeaturesEXT *) ext; - features->conditionalRendering = true; - features->inheritedConditionalRendering = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: { - VkPhysicalDeviceTransformFeedbackFeaturesEXT *features = - (VkPhysicalDeviceTransformFeedbackFeaturesEXT *) ext; - features->transformFeedback = true; - features->geometryStreams = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: { - VkPhysicalDeviceIndexTypeUint8FeaturesEXT *features = - (VkPhysicalDeviceIndexTypeUint8FeaturesEXT *)ext; - features->indexTypeUint8 = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *features = - (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *)ext; - features->vertexAttributeInstanceRateDivisor = true; - features->vertexAttributeInstanceRateZeroDivisor = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: { - VkPhysicalDeviceDepthClipEnableFeaturesEXT *features = - (VkPhysicalDeviceDepthClipEnableFeaturesEXT *)ext; - features->depthClipEnable = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: { - VkPhysicalDevice4444FormatsFeaturesEXT *features = - (VkPhysicalDevice4444FormatsFeaturesEXT *) ext; - features->formatA4R4G4B4 = true; - features->formatA4B4G4R4 = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: { - VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *features = - (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *) ext; - features->borderColorSwizzle = true; - features->borderColorSwizzleFromImage = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: { - VkPhysicalDeviceCustomBorderColorFeaturesEXT *features = - (VkPhysicalDeviceCustomBorderColorFeaturesEXT *) ext; - features->customBorderColors = true; - features->customBorderColorWithoutFormat = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: { - VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *features = - (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *) ext; - features->extendedDynamicState = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: { - VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *features = - (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *)ext; - features->extendedDynamicState2 = true; - features->extendedDynamicState2LogicOp = true; - features->extendedDynamicState2PatchControlPoints = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: { - VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *features = - (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *)ext; - features->extendedDynamicState3PolygonMode = true; - features->extendedDynamicState3TessellationDomainOrigin = true; - features->extendedDynamicState3DepthClampEnable = true; - features->extendedDynamicState3DepthClipEnable = true; - features->extendedDynamicState3LogicOpEnable = true; - features->extendedDynamicState3SampleMask = true; - features->extendedDynamicState3RasterizationSamples = true; - features->extendedDynamicState3AlphaToCoverageEnable = true; - features->extendedDynamicState3AlphaToOneEnable = true; - features->extendedDynamicState3DepthClipNegativeOneToOne = true; - features->extendedDynamicState3RasterizationStream = true; - features->extendedDynamicState3ConservativeRasterizationMode = false; - features->extendedDynamicState3ExtraPrimitiveOverestimationSize = false; - features->extendedDynamicState3LineRasterizationMode = true; - features->extendedDynamicState3LineStippleEnable = false; - features->extendedDynamicState3ProvokingVertexMode = true; - features->extendedDynamicState3SampleLocationsEnable = true; - features->extendedDynamicState3ColorBlendEnable = true; - features->extendedDynamicState3ColorBlendEquation = true; - features->extendedDynamicState3ColorWriteMask = true; - features->extendedDynamicState3ViewportWScalingEnable = false; - features->extendedDynamicState3ViewportSwizzle = false; - features->extendedDynamicState3ShadingRateImageEnable = false; - features->extendedDynamicState3CoverageToColorEnable = false; - features->extendedDynamicState3CoverageToColorLocation = false; - features->extendedDynamicState3CoverageModulationMode = false; - features->extendedDynamicState3CoverageModulationTableEnable = false; - features->extendedDynamicState3CoverageModulationTable = false; - features->extendedDynamicState3CoverageReductionMode = false; - features->extendedDynamicState3RepresentativeFragmentTestEnable = false; - features->extendedDynamicState3ColorBlendAdvanced = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: { - VkPhysicalDevicePerformanceQueryFeaturesKHR *feature = - (VkPhysicalDevicePerformanceQueryFeaturesKHR *)ext; - feature->performanceCounterQueryPools = true; - feature->performanceCounterMultipleQueryPools = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: { - VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *features = - (VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *)ext; - features->pipelineExecutableInfo = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: { - VkPhysicalDeviceShaderFloat16Int8Features *features = - (VkPhysicalDeviceShaderFloat16Int8Features *) ext; - features->shaderFloat16 = true; - features->shaderInt8 = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: { - VkPhysicalDeviceScalarBlockLayoutFeatures *features = - (VkPhysicalDeviceScalarBlockLayoutFeatures *) ext; - features->scalarBlockLayout = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { - VkPhysicalDeviceRobustness2FeaturesEXT *features = - (VkPhysicalDeviceRobustness2FeaturesEXT *) ext; - features->robustBufferAccess2 = true; - features->robustImageAccess2 = true; - features->nullDescriptor = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: { - VkPhysicalDeviceTimelineSemaphoreFeatures *features = - (VkPhysicalDeviceTimelineSemaphoreFeatures *) ext; - features->timelineSemaphore = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: { - VkPhysicalDeviceProvokingVertexFeaturesEXT *features = - (VkPhysicalDeviceProvokingVertexFeaturesEXT *)ext; - features->provokingVertexLast = true; - features->transformFeedbackPreservesProvokingVertex = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: { - VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *features = - (VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *)ext; - features->mutableDescriptorType = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: { - VkPhysicalDeviceLineRasterizationFeaturesEXT *features = - (VkPhysicalDeviceLineRasterizationFeaturesEXT *)ext; - features->rectangularLines = true; - features->bresenhamLines = true; - features->smoothLines = false; - features->stippledRectangularLines = false; - features->stippledBresenhamLines = false; - features->stippledSmoothLines = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: { - VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *features = - (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *)ext; - features->primitiveTopologyListRestart = true; - features->primitiveTopologyPatchListRestart = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: { - VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *features = - (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *)ext; - features->rasterizationOrderColorAttachmentAccess = true; - features->rasterizationOrderDepthAttachmentAccess = true; - features->rasterizationOrderStencilAttachmentAccess = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: { - VkPhysicalDeviceDepthClipControlFeaturesEXT *features = - (VkPhysicalDeviceDepthClipControlFeaturesEXT *)ext; - features->depthClipControl = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: { - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *features = - (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *)ext; - features->texelBufferAlignment = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: { - VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *features = - (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *)ext; - features->primitivesGeneratedQuery = true; - features->primitivesGeneratedQueryWithRasterizerDiscard = false; - features->primitivesGeneratedQueryWithNonZeroStreams = false; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: { - VkPhysicalDeviceImageViewMinLodFeaturesEXT *features = - (VkPhysicalDeviceImageViewMinLodFeaturesEXT *)ext; - features->minLod = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: { - VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *features = - (VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *)ext; - features->image2DViewOf3D = true; - features->sampler2DViewOf3D = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: { - VkPhysicalDeviceColorWriteEnableFeaturesEXT *features = - (VkPhysicalDeviceColorWriteEnableFeaturesEXT *)ext; - features->colorWriteEnable = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: { - VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *features = - (VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *)ext; - features->shaderModuleIdentifier = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: { - VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *features = - (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *)ext; - features->vertexInputDynamicState = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: { - VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *features = - (VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *)ext; - features->nonSeamlessCubeMap = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: { - VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *features = - (VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT*)ext; - features->attachmentFeedbackLoopLayout = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR: { - VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *features = - (VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR*)ext; - features->globalPriorityQuery = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: { - VkPhysicalDeviceMultiDrawFeaturesEXT *features = - (VkPhysicalDeviceMultiDrawFeaturesEXT *)ext; - features->multiDraw = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: { - VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *features = - (VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *)ext; - features->graphicsPipelineLibrary = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: { - VkPhysicalDevicePresentIdFeaturesKHR *features = - (VkPhysicalDevicePresentIdFeaturesKHR *) ext; - features->presentId = pdevice->vk.supported_extensions.KHR_present_id; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR: { - VkPhysicalDevicePresentWaitFeaturesKHR *features = - (VkPhysicalDevicePresentWaitFeaturesKHR *) ext; - features->presentWait = pdevice->vk.supported_extensions.KHR_present_wait; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: { - VkPhysicalDeviceDescriptorBufferFeaturesEXT *features = - (VkPhysicalDeviceDescriptorBufferFeaturesEXT *)ext; - features->descriptorBuffer = true; - features->descriptorBufferCaptureReplay = pdevice->has_set_iova; - features->descriptorBufferImageLayoutIgnored = true; - features->descriptorBufferPushDescriptors = true; - break; - } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { - VkPhysicalDeviceFragmentDensityMapFeaturesEXT *features = - (VkPhysicalDeviceFragmentDensityMapFeaturesEXT *)ext; - features->fragmentDensityMap = true; - features->fragmentDensityMapDynamic = false; - features->fragmentDensityMapNonSubsampledImages = true; - break; - } - - default: - break; - } - } -} - - -static void tu_get_physical_device_properties_1_1(struct tu_physical_device *pdevice, VkPhysicalDeviceVulkan11Properties *p) { |