diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 5e953ef242e..b2fd3b177fb 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -274,6 +274,32 @@ get_device_extensions(const struct panvk_physical_device *device, }; } +static bool +has_compressed_formats(const struct panvk_physical_device *physical_device, + const uint32_t required_formats) +{ + uint32_t supported_compr_fmts = + panfrost_query_compressed_formats(&physical_device->kmod.props); + + return (supported_compr_fmts & required_formats) == required_formats; +} + +static bool +has_texture_compression_etc2(const struct panvk_physical_device *physical_device) +{ + return has_compressed_formats(physical_device, + BITFIELD_BIT(MALI_ETC2_RGB8) | + BITFIELD_BIT(MALI_ETC2_RGB8A1) | BITFIELD_BIT(MALI_ETC2_RGBA8) | + BITFIELD_BIT(MALI_ETC2_R11_UNORM) | BITFIELD_BIT(MALI_ETC2_R11_SNORM) | + BITFIELD_BIT(MALI_ETC2_RG11_UNORM) | BITFIELD_BIT(MALI_ETC2_RG11_SNORM)); +} + +static bool +has_texture_compression_astc_ldr(const struct panvk_physical_device *physical_device) +{ + return has_compressed_formats(physical_device, BITFIELD_BIT(MALI_ASTC_2D_LDR)); +} + static void get_features(const struct panvk_physical_device *device, struct vk_features *features) @@ -294,8 +320,8 @@ get_features(const struct panvk_physical_device *device, .largePoints = true, .occlusionQueryPrecise = true, .samplerAnisotropy = true, - .textureCompressionETC2 = true, - .textureCompressionASTC_LDR = true, + .textureCompressionETC2 = has_texture_compression_etc2(device), + .textureCompressionASTC_LDR = has_texture_compression_astc_ldr(device), .fragmentStoresAndAtomics = arch >= 10, .shaderImageGatherExtended = true, .shaderStorageImageExtendedFormats = true,