mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-23 07:39:01 +00:00
Updated semaphore tests to use clSemaphoreReImportSyncFdKHR. (#1854)
* Updated semaphore tests to use clSemaphoreReImportSyncFdKHR. Additionally updated common semaphore code to handle spec updates that restrict simultaneous importing/exporting of handles. * Fix build issues on CI * gcc build issues * Make clReImportSemaphoreSyncFdKHR a required API call if cl_khr_external_semaphore_sync_fd is present. * Implement signal and wait for all semaphore types.
This commit is contained in:
@@ -54,6 +54,9 @@ typedef cl_int (*pfnclGetSemaphoreHandleForTypeKHR)(
|
||||
cl_semaphore_khr sema_object, cl_device_id device,
|
||||
cl_external_semaphore_handle_type_khr handleType, size_t handle_size,
|
||||
void *handle, size_t *handleSize);
|
||||
typedef cl_int (*pfnclReImportSemaphoreSyncFdKHR)(
|
||||
cl_semaphore_khr sema_object,
|
||||
cl_semaphore_reimport_properties_khr *reimport_props, int fd);
|
||||
|
||||
extern pfnclCreateSemaphoreWithPropertiesKHR
|
||||
clCreateSemaphoreWithPropertiesKHRptr;
|
||||
@@ -64,6 +67,7 @@ extern pfnclEnqueueAcquireExternalMemObjectsKHR
|
||||
extern pfnclEnqueueReleaseExternalMemObjectsKHR
|
||||
clEnqueueReleaseExternalMemObjectsKHRptr;
|
||||
extern pfnclReleaseSemaphoreKHR clReleaseSemaphoreKHRptr;
|
||||
extern pfnclReImportSemaphoreSyncFdKHR pfnclReImportSemaphoreSyncFdKHRptr;
|
||||
|
||||
cl_int getCLImageInfoFromVkImageInfo(const VkImageCreateInfo *, size_t,
|
||||
cl_image_format *, cl_image_desc *);
|
||||
@@ -97,7 +101,6 @@ protected:
|
||||
cl_mem m_externalMemory;
|
||||
int fd;
|
||||
void *handle;
|
||||
cl_command_queue cmd_queue;
|
||||
clExternalMemoryImage();
|
||||
|
||||
public:
|
||||
@@ -112,6 +115,15 @@ public:
|
||||
};
|
||||
|
||||
class clExternalSemaphore {
|
||||
public:
|
||||
virtual int signal(cl_command_queue command_queue) = 0;
|
||||
virtual int wait(cl_command_queue command_queue) = 0;
|
||||
virtual cl_semaphore_khr &getCLSemaphore() = 0;
|
||||
virtual ~clExternalSemaphore() = 0;
|
||||
};
|
||||
|
||||
|
||||
class clExternalImportableSemaphore : public virtual clExternalSemaphore {
|
||||
protected:
|
||||
cl_semaphore_khr m_externalSemaphore;
|
||||
VulkanExternalSemaphoreHandleType m_externalHandleType;
|
||||
@@ -122,21 +134,42 @@ protected:
|
||||
void *handle;
|
||||
|
||||
public:
|
||||
clExternalSemaphore(
|
||||
clExternalImportableSemaphore(
|
||||
const VulkanSemaphore &deviceSemaphore, cl_context context,
|
||||
VulkanExternalSemaphoreHandleType externalSemaphoreHandleType,
|
||||
cl_device_id deviceId);
|
||||
virtual ~clExternalSemaphore() noexcept(false);
|
||||
int signal(cl_command_queue command_queue);
|
||||
int wait(cl_command_queue command_queue);
|
||||
cl_semaphore_khr &getCLSemaphore();
|
||||
// operator openclExternalSemaphore_t() const;
|
||||
~clExternalImportableSemaphore() override;
|
||||
int wait(cl_command_queue command_queue) override;
|
||||
int signal(cl_command_queue command_queue) override;
|
||||
cl_semaphore_khr &getCLSemaphore() override;
|
||||
};
|
||||
|
||||
extern void init_cl_vk_ext(cl_platform_id);
|
||||
class clExternalExportableSemaphore : public virtual clExternalSemaphore {
|
||||
protected:
|
||||
cl_semaphore_khr m_externalSemaphore;
|
||||
VulkanExternalSemaphoreHandleType m_externalHandleType;
|
||||
cl_device_id m_device;
|
||||
cl_context m_context;
|
||||
const VulkanSemaphore &m_deviceSemaphore;
|
||||
int fd;
|
||||
void *handle;
|
||||
|
||||
public:
|
||||
clExternalExportableSemaphore(
|
||||
const VulkanSemaphore &deviceSemaphore, cl_context context,
|
||||
VulkanExternalSemaphoreHandleType externalSemaphoreHandleType,
|
||||
cl_device_id deviceId);
|
||||
~clExternalExportableSemaphore() override;
|
||||
int signal(cl_command_queue command_queue) override;
|
||||
int wait(cl_command_queue command_queue) override;
|
||||
cl_semaphore_khr &getCLSemaphore() override;
|
||||
};
|
||||
|
||||
extern void init_cl_vk_ext(cl_platform_id, cl_uint num_devices,
|
||||
cl_device_id *deviceIds);
|
||||
|
||||
VulkanImageTiling vkClExternalMemoryHandleTilingAssumption(
|
||||
cl_device_id deviceId,
|
||||
VulkanExternalMemoryHandleType vkExternalMemoryHandleType, int *error_ret);
|
||||
|
||||
#endif // _opencl_vulkan_wrapper_hpp_
|
||||
#endif // _opencl_vulkan_wrapper_hpp_
|
||||
Reference in New Issue
Block a user