---
src/amd/vulkan/radv_wsi.c | 137 +++
src/intel/vulkan/anv_wsi.c | 14 +-
src/vulkan/wsi/wsi_common.c | 341 +++-
src/vulkan/wsi/wsi_common.h | 54 +-
src/vulkan/wsi/wsi_common_private.h | 16 ++
src/vulkan/wsi/wsi_common_wayland.c | 6 +-
src/vulkan/wsi/wsi_common_x11.c | 87 +
7 files changed, 475 insertions(+), 180 deletions(-)
diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c
index 247f7cc..589eb5c 100644
--- a/src/amd/vulkan/radv_wsi.c
+++ b/src/amd/vulkan/radv_wsi.c
@@ -40,6 +40,13 @@ radv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const
char *pName)
return radv_lookup_entrypoint(pName);
}
+static uint32_t
+anv_wsi_queue_get_family_index(VkQueue _queue)
+{
+ RADV_FROM_HANDLE(radv_queue, queue, _queue);
+ return queue->queue_family_index;
+}
+
VkResult
radv_init_wsi(struct radv_physical_device *physical_device)
{
@@ -49,6 +56,9 @@ radv_init_wsi(struct radv_physical_device *physical_device)
radv_physical_device_to_handle(physical_device),
radv_wsi_proc_addr);
+ physical_device->wsi_device.queue_get_family_index =
+ anv_wsi_queue_get_family_index;
+
#ifdef VK_USE_PLATFORM_XCB_KHR
result = wsi_x11_init_wsi(_device->wsi_device,
_device->instance->alloc);
if (result != VK_SUCCESS)
@@ -151,8 +161,6 @@ static VkResult
radv_wsi_image_create(VkDevice device_h,
const VkSwapchainCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks* pAllocator,
- bool needs_linear_copy,
- bool linear,
struct wsi_image *wsi_image)
{
VkResult result = VK_SUCCESS;
@@ -178,7 +186,7 @@ radv_wsi_image_create(VkDevice device_h,
.arrayLayers = 1,
.samples = 1,
/* FIXME: Need a way to use
X tiling to allow scanout */
- .tiling = linear ?
VK_IMAGE_TILING_LINEAR : VK_IMAGE_TILING_OPTIMAL,
+ .tiling =
VK_IMAGE_TILING_OPTIMAL,
.usage =
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
.flags = 0,
},
@@ -203,7 +211,7 @@ radv_wsi_image_create(VkDevice device_h,
int memory_type_index = -1;
for (int i = 0; i <
device->physical_device->memory_properties.memoryTypeCount; ++i) {
bool is_local =
!!(device->physical_device->memory_properties.memoryTypes[i].propertyFlags &
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
- if ((linear && !is_local) || (!linear && is_local)) {
+ if (is_local) {
memory_type_index = i;
break;
}
@@ -228,16 +236,10 @@ radv_wsi_image_create(VkDevice device_h,
radv_BindImageMemory(device_h, image_h, memory_h, 0);
- /*
-* return the fd for the image in the no copy mode,
-* or the fd for the linear image if a copy is required.
-*/
- if (!needs_linear_copy || (needs_linear_copy && linear)) {
- RADV_FROM_HANDLE(radv_device_memory, memory, memory_h);
- if (!radv_get_memory_fd(device, memory, ))
- goto fail_alloc_memory;
- wsi_image->fd = fd;
- }
+ RADV_FROM_HANDLE(radv_device_memory, memory, memory_h);
+ if (!radv_get_memory_fd(device, memory, ))
+ goto fail_alloc_memory;
+ wsi_image->fd = fd;
surface = >surface;
@@ -277,94 +279,6 @@ static const struct wsi_image_fns radv_wsi_image_fns = {
.free_wsi_image = radv_wsi_image_free,
};
-#define NUM_PRIME_POOLS RADV_QUEUE_TRANSFER
-static void
-radv_wsi_free_prime_command_buffers(struct radv_device *device,
- struct wsi_swapchain *swapchain)
-{
- const int num_pools = NUM_PRIME_POOLS;
- const int num_images = swapchain->image_count;
- int i;
- for (i = 0; i < num_pools; i++) {
- radv_FreeCommandBuffers(radv_device_to_handle(device),
-swapchain->cmd_pools[i],
-swapchain->image_count,
->cmd_buffers[i * num_images]);
-
- radv_DestroyCommandPool(radv_device_to_handle(device),
-swapchain->cmd_pools[i],
->alloc);
- }
-}
-
-static VkResult
-radv_wsi_create_prime_command_buffers(struct radv_device *device,
- const VkAllocationCallbacks *alloc,
-