zink: use stored format features for blit functionality
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 27 Jul 2022 19:10:12 +0000 (15:10 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 3 Aug 2022 17:25:27 +0000 (17:25 +0000)
Acked-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17773>

src/gallium/drivers/zink/zink_blit.c

index 3cfd51d..8ad8849 100644 (file)
@@ -109,14 +109,6 @@ blit_resolve(struct zink_context *ctx, const struct pipe_blit_info *info, bool *
    return true;
 }
 
-static VkFormatFeatureFlags
-get_resource_features(struct zink_screen *screen, struct zink_resource *res)
-{
-   VkFormatProperties props = screen->format_props[res->base.b.format];
-   return res->optimal_tiling ? props.optimalTilingFeatures :
-                                props.linearTilingFeatures;
-}
-
 static bool
 blit_native(struct zink_context *ctx, const struct pipe_blit_info *info, bool *needs_present_readback)
 {
@@ -146,8 +138,8 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info, bool *n
        dst->format != zink_get_format(screen, info->dst.format))
       return false;
 
-   if (!(get_resource_features(screen, src) & VK_FORMAT_FEATURE_BLIT_SRC_BIT) ||
-       !(get_resource_features(screen, dst) & VK_FORMAT_FEATURE_BLIT_DST_BIT))
+   if (!(src->obj->vkfeats & VK_FORMAT_FEATURE_BLIT_SRC_BIT) ||
+       !(dst->obj->vkfeats & VK_FORMAT_FEATURE_BLIT_DST_BIT))
       return false;
 
    if ((util_format_is_pure_sint(info->src.format) !=
@@ -157,8 +149,7 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info, bool *n
       return false;
 
    if (info->filter == PIPE_TEX_FILTER_LINEAR &&
-       !(get_resource_features(screen, src) &
-          VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT))
+       !(src->obj->vkfeats & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT))
       return false;
 
    apply_dst_clears(ctx, info, false);