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 &&