From 0dad1a7c72a88323533f89719c0217bb0e05066c Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 4 Nov 2020 13:35:08 +0100 Subject: [PATCH] v3dv: expose more features MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/vulkan/v3dv_device.c | 8 ++++---- src/broadcom/vulkan/v3dv_formats.c | 11 +++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index c76741a8c24..4e63a205c4c 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -669,16 +669,16 @@ v3dv_GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, *pFeatures = (VkPhysicalDeviceFeatures) { .robustBufferAccess = true, /* This feature is mandatory */ - .fullDrawIndexUint32 = false, + .fullDrawIndexUint32 = false, /* Only available since V3D 4.4.9.1 */ .imageCubeArray = true, - .independentBlend = false, + .independentBlend = true, .geometryShader = false, .tessellationShader = false, .sampleRateShading = true, .dualSrcBlend = false, .logicOp = true, .multiDrawIndirect = false, - .drawIndirectFirstInstance = false, + .drawIndirectFirstInstance = true, .depthClamp = false, .depthBiasClamp = false, .fillModeNonSolid = true, @@ -697,7 +697,7 @@ v3dv_GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, .fragmentStoresAndAtomics = true, .shaderTessellationAndGeometryPointSize = false, .shaderImageGatherExtended = false, - .shaderStorageImageExtendedFormats = false, + .shaderStorageImageExtendedFormats = true, .shaderStorageImageMultisample = false, .shaderStorageImageReadWithoutFormat = false, .shaderStorageImageWriteWithoutFormat = false, diff --git a/src/broadcom/vulkan/v3dv_formats.c b/src/broadcom/vulkan/v3dv_formats.c index e7587f5f33c..ac8b8e58f54 100644 --- a/src/broadcom/vulkan/v3dv_formats.c +++ b/src/broadcom/vulkan/v3dv_formats.c @@ -442,6 +442,11 @@ image_format_features(VkFormat vk_format, flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT; if (desc->nr_channels == 1 && vk_format_is_int(vk_format)) flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT; + } else if (vk_format == VK_FORMAT_A2B10G10R10_UNORM_PACK32 || + vk_format == VK_FORMAT_A2B10G10R10_UINT_PACK32 || + vk_format == VK_FORMAT_B10G11R11_UFLOAT_PACK32) { + /* To comply with shaderStorageImageExtendedFormats */ + flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT; } if (flags) { @@ -482,10 +487,12 @@ buffer_format_features(VkFormat vk_format, const struct v3dv_format *v3dv_format } } else if (vk_format == VK_FORMAT_A2B10G10R10_UNORM_PACK32) { flags |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT | - VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT; + VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT; } else if (vk_format == VK_FORMAT_A2B10G10R10_UINT_PACK32 || vk_format == VK_FORMAT_B10G11R11_UFLOAT_PACK32) { - flags |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT; + flags |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT; } if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN &&