aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/intel/vulkan/anv_device.c13
-rw-r--r--src/intel/vulkan/anv_queue.c20
2 files changed, 18 insertions, 15 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 9db62ef919e..027a908f8e7 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -3139,19 +3139,6 @@ VkResult anv_AllocateMemory(
break;
}
- case VK_STRUCTURE_TYPE_WSI_MEMORY_ALLOCATE_INFO_MESA: {
- const struct wsi_memory_allocate_info *wsi_info = (void *)ext;
- if (wsi_info->implicit_sync) {
- /* We need to set the WRITE flag on window system buffers so that
- * GEM will know we're writing to them and synchronize uses on
- * other rings (eg if the display server uses the blitter ring).
- */
- alloc_flags |= ANV_BO_ALLOC_IMPLICIT_SYNC |
- ANV_BO_ALLOC_IMPLICIT_WRITE;
- }
- break;
- }
-
default:
anv_debug_ignored_stype(ext->sType);
break;
diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c
index 791975d1fcf..abcedfd95d1 100644
--- a/src/intel/vulkan/anv_queue.c
+++ b/src/intel/vulkan/anv_queue.c
@@ -702,6 +702,7 @@ anv_queue_submit(struct anv_queue *queue,
const VkSemaphore *out_semaphores,
const uint64_t *out_values,
uint32_t num_out_semaphores,
+ struct anv_bo *wsi_signal_bo,
VkFence _fence)
{
ANV_FROM_HANDLE(anv_fence, fence, _fence);
@@ -829,6 +830,12 @@ anv_queue_submit(struct anv_queue *queue,
}
}
+ if (wsi_signal_bo) {
+ result = anv_queue_submit_add_fence_bo(submit, wsi_signal_bo, true /* signal */);
+ if (result != VK_SUCCESS)
+ goto error;
+ }
+
if (fence) {
/* Under most circumstances, out fences won't be temporary. However,
* the spec does allow it for opaque_fd. From the Vulkan 1.0.53 spec:
@@ -923,7 +930,8 @@ VkResult anv_QueueSubmit(
* come up with something more efficient but this shouldn't be a
* common case.
*/
- result = anv_queue_submit(queue, NULL, NULL, NULL, 0, NULL, NULL, 0, fence);
+ result = anv_queue_submit(queue, NULL, NULL, NULL, 0, NULL, NULL, 0,
+ NULL, fence);
goto out;
}
@@ -931,6 +939,13 @@ VkResult anv_QueueSubmit(
/* Fence for this submit. NULL for all but the last one */
VkFence submit_fence = (i == submitCount - 1) ? fence : VK_NULL_HANDLE;
+ const struct wsi_memory_signal_submit_info *mem_signal_info =
+ vk_find_struct_const(pSubmits[i].pNext,
+ WSI_MEMORY_SIGNAL_SUBMIT_INFO_MESA);
+ struct anv_bo *wsi_signal_bo =
+ mem_signal_info && mem_signal_info->memory != VK_NULL_HANDLE ?
+ anv_device_memory_from_handle(mem_signal_info->memory)->bo : NULL;
+
const VkTimelineSemaphoreSubmitInfoKHR *timeline_info =
vk_find_struct_const(pSubmits[i].pNext,
TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR);
@@ -954,6 +969,7 @@ VkResult anv_QueueSubmit(
pSubmits[i].pSignalSemaphores,
signal_values,
pSubmits[i].signalSemaphoreCount,
+ wsi_signal_bo,
submit_fence);
if (result != VK_SUCCESS)
goto out;
@@ -992,7 +1008,7 @@ VkResult anv_QueueSubmit(
result = anv_queue_submit(queue, cmd_buffer,
in_semaphores, in_values, num_in_semaphores,
out_semaphores, out_values, num_out_semaphores,
- execbuf_fence);
+ wsi_signal_bo, execbuf_fence);
if (result != VK_SUCCESS)
goto out;
}