diff --git a/.pick_status.json b/.pick_status.json index e08a313d9f3..2fd18f1f195 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -174,7 +174,7 @@ "description": "panvk: check for texture-compression support", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "d970fe2e9d6a8e9997a0ce212146d62013b3b455", "notes": null diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index dc3b371c3b0..05be006ad16 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -253,6 +253,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) @@ -273,8 +299,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, .shaderUniformBufferArrayDynamicIndexing = true, .shaderSampledImageArrayDynamicIndexing = true,