Mesa (main): v3dv: handle Vulkan 1.1 feature and property queries
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 14 06:41:27 UTC 2021
Module: Mesa
Branch: main
Commit: 42b351370dab765c93049aa49a2d1e73c202530a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=42b351370dab765c93049aa49a2d1e73c202530a
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Thu Jun 10 13:17:45 2021 +0200
v3dv: handle Vulkan 1.1 feature and property queries
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11316>
---
src/broadcom/vulkan/v3dv_device.c | 112 ++++++++++++++++++++++++++++++++------
1 file changed, 95 insertions(+), 17 deletions(-)
diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c
index 2747111e4cb..3514f89913a 100644
--- a/src/broadcom/vulkan/v3dv_device.c
+++ b/src/broadcom/vulkan/v3dv_device.c
@@ -1010,6 +1010,22 @@ v3dv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
{
v3dv_GetPhysicalDeviceFeatures(physicalDevice, &pFeatures->features);
+ VkPhysicalDeviceVulkan11Features vk11 = {
+ .storageBuffer16BitAccess = false,
+ .uniformAndStorageBuffer16BitAccess = false,
+ .storagePushConstant16 = false,
+ .storageInputOutput16 = false,
+ .multiview = false,
+ .multiviewGeometryShader = false,
+ .multiviewTessellationShader = false,
+ .variablePointersStorageBuffer = true,
+ /* FIXME: this needs support for non-constant index on UBO/SSBO */
+ .variablePointers = false,
+ .protectedMemory = false,
+ .samplerYcbcrConversion = false,
+ .shaderDrawParameters = false,
+ };
+
vk_foreach_struct(ext, pFeatures->pNext) {
switch (ext->sType) {
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: {
@@ -1025,15 +1041,53 @@ v3dv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
features->privateData = true;
break;
}
+
+ /* Vulkan 1.1 */
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: {
+ VkPhysicalDeviceVulkan11Features *features =
+ (VkPhysicalDeviceVulkan11Features *)ext;
+ memcpy(features, &vk11, sizeof(VkPhysicalDeviceVulkan11Features));
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
+ VkPhysicalDevice16BitStorageFeatures *features = (void *) ext;
+ features->storageBuffer16BitAccess = vk11.storageBuffer16BitAccess;
+ features->uniformAndStorageBuffer16BitAccess =
+ vk11.uniformAndStorageBuffer16BitAccess;
+ features->storagePushConstant16 = vk11.storagePushConstant16;
+ features->storageInputOutput16 = vk11.storageInputOutput16;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
+ VkPhysicalDeviceMultiviewFeatures *features = (void *) ext;
+ features->multiview = vk11.multiview;
+ features->multiviewGeometryShader = vk11.multiviewGeometryShader;
+ features->multiviewTessellationShader = vk11.multiviewTessellationShader;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: {
+ VkPhysicalDeviceProtectedMemoryFeatures *features = (void *) ext;
+ features->protectedMemory = vk11.protectedMemory;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
+ VkPhysicalDeviceSamplerYcbcrConversionFeatures *features = (void *) ext;
+ features->samplerYcbcrConversion = vk11.samplerYcbcrConversion;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
+ VkPhysicalDeviceShaderDrawParametersFeatures *features = (void *) ext;
+ features->shaderDrawParameters = vk11.shaderDrawParameters;
+ break;
+ }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
VkPhysicalDeviceVariablePointersFeatures *features = (void *) ext;
- features->variablePointersStorageBuffer = true;
- /* FIXME: for this we need to support non-constant indexing on
- * UBO/SSBO.
- */
- features->variablePointers = false;
+ features->variablePointersStorageBuffer =
+ vk11.variablePointersStorageBuffer;
+ features->variablePointers = vk11.variablePointers;
break;
}
+
default:
v3dv_debug_ignored_stype(ext->sType);
break;
@@ -1291,18 +1345,6 @@ v3dv_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
id_props->deviceLUIDValid = false;
break;
}
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
- /* Do nothing, not even logging. This is a non-PCI device, so we will
- * never provide this extension.
- */
- break;
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: {
- VkPhysicalDevicePointClippingProperties *props =
- (VkPhysicalDevicePointClippingProperties *)ext;
- props->pointClippingBehavior =
- VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
- break;
- }
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: {
VkPhysicalDeviceMaintenance3Properties *props =
(VkPhysicalDeviceMaintenance3Properties *)ext;
@@ -1326,6 +1368,42 @@ v3dv_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
props->maxMemoryAllocationSize = MAX_MEMORY_ALLOCATION_SIZE;
break;
}
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: {
+ VkPhysicalDeviceMultiviewProperties *props =
+ (VkPhysicalDeviceMultiviewProperties *)ext;
+ props->maxMultiviewViewCount = 1;
+ /* This assumes that the multiview implementation uses instancing */
+ props->maxMultiviewInstanceIndex =
+ (UINT32_MAX / props->maxMultiviewViewCount) - 1;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
+ /* Do nothing, not even logging. This is a non-PCI device, so we will
+ * never provide this extension.
+ */
+ break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: {
+ VkPhysicalDevicePointClippingProperties *props =
+ (VkPhysicalDevicePointClippingProperties *)ext;
+ props->pointClippingBehavior =
+ VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES: {
+ VkPhysicalDeviceProtectedMemoryProperties *props =
+ (VkPhysicalDeviceProtectedMemoryProperties *)ext;
+ props->protectedNoFault = false;
+ break;
+ }
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: {
+ VkPhysicalDeviceSubgroupProperties *props =
+ (VkPhysicalDeviceSubgroupProperties *)ext;
+ props->subgroupSize = 1;
+ props->supportedStages = VK_SHADER_STAGE_COMPUTE_BIT;
+ props->supportedOperations = VK_SUBGROUP_FEATURE_BASIC_BIT;
+ props->quadOperationsInAllStages = false;
+ break;
+ }
default:
v3dv_debug_ignored_stype(ext->sType);
break;
More information about the mesa-commit
mailing list