radv: Support VK_EXT_queue_family_foreign.
Basically same as external for now. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> 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.
This commit is contained in:
@@ -40,6 +40,7 @@ TBD.
|
||||
|
||||
<ul>
|
||||
<li>EGL_EXT_platform_device</li>
|
||||
<li>VK_EXT_queue_family_foreign for radv</li>
|
||||
</ul>
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
|
@@ -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)
|
||||
|
@@ -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'),
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user