From 63218f416141e689eaac530c7d6223e53762891c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 11 Mar 2024 14:45:34 -0400 Subject: [PATCH] zink: set the sparse format usage flags directly based on queried props this should yield more consistent results and avoid weird cases where various formats are queried for things they don't support and won't use Fixes: 9a412c10b7a ("zink: set all usage flags when querying sparse features") Part-of: (cherry picked from commit 8fa413fef05ceaf4e811d2c564e766431c1d6701) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_screen.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index fb9f5e13a36..e7cfbaedb83 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -744,7 +744,7 @@ "description": "zink: set the sparse format usage flags directly based on queried props", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9a412c10b7a96adf71c9a2ca44a0abca75de1c49", "notes": null diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 7089f8041a1..0362d53de5e 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2552,9 +2552,11 @@ zink_get_sparse_texture_virtual_page_size(struct pipe_screen *pscreen, default: return 0; } - VkImageUsageFlags flags = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | - VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - flags |= is_zs ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + + VkImageUsageFlags use_flags = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | + VK_IMAGE_USAGE_STORAGE_BIT; + use_flags |= is_zs ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + VkImageUsageFlags flags = screen->format_props[pformat].optimalTilingFeatures & use_flags; VkSparseImageFormatProperties props[4]; //planar? unsigned prop_count = ARRAY_SIZE(props); VKSCR(GetPhysicalDeviceSparseImageFormatProperties)(screen->pdev, format, type,