From c6cb9b197d4e82432cacae7cec04e7d6ee73ceba Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Wed, 3 Jul 2019 02:25:19 +0200 Subject: [PATCH] radv: Support VK_EXT_queue_family_foreign. Basically same as external for now. Reviewed-by: Samuel Pitoiset Only case we might need to handle differently in the near future is Raven's case of displayable DCC which is not renderable. But we don't support that yet. --- docs/relnotes/19.2.0.html | 1 + src/amd/vulkan/radv_cmd_buffer.c | 3 ++- src/amd/vulkan/radv_extensions.py | 1 + src/amd/vulkan/radv_image.c | 6 ++++-- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/relnotes/19.2.0.html b/docs/relnotes/19.2.0.html index 0809d9489ba..907edf447f0 100644 --- a/docs/relnotes/19.2.0.html +++ b/docs/relnotes/19.2.0.html @@ -40,6 +40,7 @@ TBD.

Bug fixes

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index ed5822a37c6..f1e0ce23233 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -5111,7 +5111,8 @@ static void radv_handle_image_transition(struct radv_cmd_buffer *cmd_buffer, assert(src_family == cmd_buffer->queue_family_index || dst_family == cmd_buffer->queue_family_index); - if (src_family == VK_QUEUE_FAMILY_EXTERNAL) + if (src_family == VK_QUEUE_FAMILY_EXTERNAL || + src_family == VK_QUEUE_FAMILY_FOREIGN_EXT) return; if (cmd_buffer->queue_family_index == RADV_QUEUE_TRANSFER) diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py index 90c3a57db49..acb408760f9 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -120,6 +120,7 @@ EXTENSIONS = [ Extension('VK_EXT_memory_priority', 1, True), Extension('VK_EXT_pci_bus_info', 2, True), Extension('VK_EXT_pipeline_creation_feedback', 1, True), + Extension('VK_EXT_queue_family_foreign', 1, True), Extension('VK_EXT_sample_locations', 1, True), Extension('VK_EXT_sampler_filter_minmax', 1, 'device->rad_info.chip_class >= GFX7'), Extension('VK_EXT_scalar_block_layout', 1, 'device->rad_info.chip_class >= GFX7'), diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index dc598d9eecf..e92aef3ba30 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1125,7 +1125,8 @@ radv_image_create(VkDevice _device, image->exclusive = pCreateInfo->sharingMode == VK_SHARING_MODE_EXCLUSIVE; if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) { for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; ++i) - if (pCreateInfo->pQueueFamilyIndices[i] == VK_QUEUE_FAMILY_EXTERNAL) + if (pCreateInfo->pQueueFamilyIndices[i] == VK_QUEUE_FAMILY_EXTERNAL || + pCreateInfo->pQueueFamilyIndices[i] == VK_QUEUE_FAMILY_FOREIGN_EXT) image->queue_family_mask |= (1u << RADV_MAX_QUEUE_FAMILIES) - 1u; else image->queue_family_mask |= 1u << pCreateInfo->pQueueFamilyIndices[i]; @@ -1471,7 +1472,8 @@ unsigned radv_image_queue_family_mask(const struct radv_image *image, uint32_t f { if (!image->exclusive) return image->queue_family_mask; - if (family == VK_QUEUE_FAMILY_EXTERNAL) + if (family == VK_QUEUE_FAMILY_EXTERNAL || + family == VK_QUEUE_FAMILY_FOREIGN_EXT) return (1u << RADV_MAX_QUEUE_FAMILIES) - 1u; if (family == VK_QUEUE_FAMILY_IGNORED) return 1u << queue_family; -- 2.30.2