From 9632e6eefaef70e6bbc1262537339db606acbaef Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Thu, 17 Mar 2022 03:34:23 +0100 Subject: [PATCH] radv: Fix vk_queue_to_radv for radv_image_queue_family_mask. radv_image_queue_family_mask was still using queue family index values for the special cases, while being passes a radv_queue_family enum. This adds the bits to the enum and vk_queue_to_radv so we can implement radv_image_queue_family_mask completely in terms of the enum. Fixes: 1ec4e568 ("radv: abstract queue family away from queue family index.") Reviewed-by: Dave Airlie Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_image.c | 4 ++-- src/amd/vulkan/radv_private.h | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 6a1134f8ad1..10890413a3f 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -2308,9 +2308,9 @@ radv_image_queue_family_mask(const struct radv_image *image, { if (!image->exclusive) return image->queue_family_mask; - if (family == VK_QUEUE_FAMILY_EXTERNAL || family == VK_QUEUE_FAMILY_FOREIGN_EXT) + if (family == RADV_QUEUE_FOREIGN) return ((1u << RADV_MAX_QUEUE_FAMILIES) - 1u) | (1u << RADV_QUEUE_FOREIGN); - if (family == VK_QUEUE_FAMILY_IGNORED) + if (family == RADV_QUEUE_IGNORED) return 1u << queue_family; return 1u << family; } diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 04afcd07d46..e0473e85412 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -258,6 +258,7 @@ enum radv_queue_family { RADV_QUEUE_TRANSFER, RADV_MAX_QUEUE_FAMILIES, RADV_QUEUE_FOREIGN = RADV_MAX_QUEUE_FAMILIES, + RADV_QUEUE_IGNORED, }; struct radv_physical_device { @@ -699,9 +700,14 @@ struct radv_meta_state { struct radv_deferred_queue_submission; static inline enum radv_queue_family -vk_queue_to_radv(struct radv_physical_device *phys_dev, - int queue_family_index) +vk_queue_to_radv(const struct radv_physical_device *phys_dev, int queue_family_index) { + if (queue_family_index == VK_QUEUE_FAMILY_EXTERNAL || + queue_family_index == VK_QUEUE_FAMILY_FOREIGN_EXT) + return RADV_QUEUE_FOREIGN; + if (queue_family_index == VK_QUEUE_FAMILY_IGNORED) + return RADV_QUEUE_IGNORED; + assert(queue_family_index < RADV_MAX_QUEUE_FAMILIES); return phys_dev->vk_queue_to_radv[queue_family_index]; }