Mesa (main): anv: Implement vk_device::create_sync_for_memory
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Dec 17 02:11:37 UTC 2021
Module: Mesa
Branch: main
Commit: 9ae1e621e56fb845b7195f7bd5fb84f52ebff688
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9ae1e621e56fb845b7195f7bd5fb84f52ebff688
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Thu Dec 16 14:14:19 2021 -0600
anv: Implement vk_device::create_sync_for_memory
Fixes: 36ea90a3619f ("anv: Convert to the common sync and submit framework")
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14237>
---
src/intel/vulkan/anv_bo_sync.c | 36 +++++++++++++++++++++++++++++++-----
src/intel/vulkan/anv_device.c | 1 +
src/intel/vulkan/anv_private.h | 5 +++++
3 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/src/intel/vulkan/anv_bo_sync.c b/src/intel/vulkan/anv_bo_sync.c
index fe933ca3811..4415b1fa51e 100644
--- a/src/intel/vulkan/anv_bo_sync.c
+++ b/src/intel/vulkan/anv_bo_sync.c
@@ -212,10 +212,11 @@ const struct vk_sync_type anv_bo_sync_type = {
.wait_many = anv_bo_sync_wait,
};
-VkResult
-anv_sync_create_for_bo(struct anv_device *device,
- struct anv_bo *bo,
- struct vk_sync **sync_out)
+static VkResult
+_anv_sync_create_for_bo(struct anv_device *device,
+ struct anv_bo *bo,
+ enum anv_bo_sync_state state,
+ struct vk_sync **sync_out)
{
struct anv_bo_sync *bo_sync;
@@ -225,10 +226,35 @@ anv_sync_create_for_bo(struct anv_device *device,
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
bo_sync->sync.type = &anv_bo_sync_type;
- bo_sync->state = ANV_BO_SYNC_STATE_SUBMITTED;
+ bo_sync->state = state;
bo_sync->bo = anv_bo_ref(bo);
*sync_out = &bo_sync->sync;
return VK_SUCCESS;
}
+
+VkResult
+anv_sync_create_for_bo(struct anv_device *device,
+ struct anv_bo *bo,
+ struct vk_sync **sync_out)
+{
+ return _anv_sync_create_for_bo(device, bo, ANV_BO_SYNC_STATE_SUBMITTED,
+ sync_out);
+}
+
+VkResult
+anv_create_sync_for_memory(struct vk_device *vk_device,
+ VkDeviceMemory memory,
+ bool signal_memory,
+ struct vk_sync **sync_out)
+{
+ ANV_FROM_HANDLE(anv_device_memory, mem, memory);
+ struct anv_device *device =
+ container_of(vk_device, struct anv_device, vk);
+
+ enum anv_bo_sync_state state = signal_memory ?
+ ANV_BO_SYNC_STATE_RESET : ANV_BO_SYNC_STATE_SUBMITTED;
+
+ return _anv_sync_create_for_bo(device, mem->bo, state, sync_out);
+}
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index d8a44bf353b..0553cd4e532 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -3025,6 +3025,7 @@ VkResult anv_CreateDevice(
}
device->vk.check_status = anv_device_check_status;
+ device->vk.create_sync_for_memory = anv_create_sync_for_memory;
vk_device_set_drm_fd(&device->vk, device->fd);
uint32_t num_queues = 0;
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 61196d5ff69..9143fe2cfc7 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -3176,6 +3176,11 @@ VkResult anv_sync_create_for_bo(struct anv_device *device,
struct anv_bo *bo,
struct vk_sync **sync_out);
+VkResult anv_create_sync_for_memory(struct vk_device *device,
+ VkDeviceMemory memory,
+ bool signal_memory,
+ struct vk_sync **sync_out);
+
struct anv_event {
struct vk_object_base base;
uint64_t semaphore;
More information about the mesa-commit
mailing list