diff --git a/.pick_status.json b/.pick_status.json index 55d9d8d25c8..300c4940ea2 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3584,7 +3584,7 @@ "description": "anv: Don't support ASTC images with modifiers", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "355f3188438d22712850d65e48660d8f46316dc5", "notes": null diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c index 430a7196d98..4ad6c0963a5 100644 --- a/src/intel/vulkan/anv_formats.c +++ b/src/intel/vulkan/anv_formats.c @@ -577,11 +577,16 @@ anv_get_image_format_features2(const struct anv_physical_device *physical_device enum isl_format base_isl_format = base_plane_format.isl_format; if (isl_format_supports_sampling(devinfo, plane_format.isl_format)) { - /* ASTC textures must be in Y-tiled memory, and we reject compressed - * formats with modifiers. We do however interpret ASTC textures with - * uncompressed formats during data transfers. + + /* Unlike other surface formats, our sampler requires that the ASTC + * format only be used on surfaces in non-linearly-tiled memory. + * Thankfully, we can make an exception for linearly-tiled images that + * are only used for transfers. blorp_copy will reinterpret any + * compressed format to an uncompressed one. + * + * We handle modifier tilings further down in this function. */ - if (vk_tiling != VK_IMAGE_TILING_OPTIMAL && + if (vk_tiling == VK_IMAGE_TILING_LINEAR && isl_format_get_layout(plane_format.isl_format)->txc == ISL_TXC_ASTC) return VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT;