Commit 42b35137 authored by Iago Toral's avatar Iago Toral Committed by Marge Bot
Browse files

v3dv: handle Vulkan 1.1 feature and property queries


Reviewed-by: Alejandro Piñeiro's avatarAlejandro Piñeiro <apinheiro@igalia.com>
Part-of: <mesa/mesa!11316>
parent 1a773c00
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment