feature: add new API functions for external memory sharing

Related-To: NEO-6757
Signed-off-by: Warchulski, Jaroslaw <jaroslaw.warchulski@intel.com>
This commit is contained in:
Warchulski, Jaroslaw
2023-04-21 13:32:51 +00:00
committed by Compute-Runtime-Automation
parent 5a5c20f99c
commit bbf23df6eb
5 changed files with 249 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
#
# Copyright (C) 2018-2022 Intel Corporation
# Copyright (C) 2018-2023 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
@@ -65,6 +65,7 @@ set(IGDRCL_SRCS_tests_api
${CMAKE_CURRENT_SOURCE_DIR}/cl_enqueue_write_buffer_rect_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_enqueue_write_buffer_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_enqueue_write_image_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_external_memory_extension_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_finish_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_flush_tests.inl
${CMAKE_CURRENT_SOURCE_DIR}/cl_function_pointers_tests.inl

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2020 Intel Corporation
* Copyright (C) 2018-2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -35,5 +35,6 @@
#include "opencl/test/unit_test/api/cl_enqueue_map_image_tests.inl"
#include "opencl/test/unit_test/api/cl_enqueue_marker_tests.inl"
#include "opencl/test/unit_test/api/cl_enqueue_marker_with_wait_list_tests.inl"
#include "opencl/test/unit_test/api/cl_external_memory_extension_tests.inl"
#include "opencl/test/unit_test/api/cl_function_pointers_tests.inl"
#include "opencl/test/unit_test/api/cl_unified_shared_memory_tests.inl"

View File

@@ -0,0 +1,158 @@
/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "opencl/test/unit_test/api/cl_api_tests.h"
using namespace NEO;
using ClExternalMemoryExtensionTests = ApiTests;
TEST_F(ClExternalMemoryExtensionTests, GivenValidCommandQueueWhenEnqueingAcquireExternalMemObjectsKHRThenSuccessIsReturned) {
auto retVal = clEnqueueAcquireExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenValidCommandQueueWhenEnqueingReleaseExternalMemObjectsKHRThenSuccessIsReturned) {
auto retVal = clEnqueueReleaseExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenInvalidValueWhenEnqueingExternalMemObjectsKHRThenInvalidValueErrorIsReturned) {
auto retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
1,
nullptr,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_INVALID_VALUE, retVal);
retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
0,
reinterpret_cast<cl_mem *>(pCommandQueue),
0,
nullptr,
nullptr);
EXPECT_EQ(CL_INVALID_VALUE, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenInvalidMemObjectsWhenEnqueingExternalMemObjectsKHRThenInvalidMemObjectErrorIsReturned) {
auto retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
1,
reinterpret_cast<cl_mem *>(pCommandQueue),
0,
nullptr,
nullptr);
EXPECT_EQ(CL_INVALID_MEM_OBJECT, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenValidInputsWhenEnqueingExternalMemObjectsKHRThenSuccessIsReturned) {
auto retVal = CL_SUCCESS;
auto buffer = clCreateBuffer(
pContext,
CL_MEM_READ_WRITE,
16,
nullptr,
&retVal);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, buffer);
auto userEvent = clCreateUserEvent(
pContext,
&retVal);
retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
1,
&buffer,
1,
&userEvent,
nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
retVal = clReleaseMemObject(buffer);
EXPECT_EQ(CL_SUCCESS, retVal);
retVal = clReleaseEvent(userEvent);
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenNullCommandQueueWhenEnqueingExternalMemObjectsKHRThenInvalidCommandQueueErrorIsReturned) {
auto retVal = clEnqueueExternalMemObjectsKHR(
nullptr,
0,
nullptr,
0,
nullptr,
nullptr);
EXPECT_EQ(CL_INVALID_COMMAND_QUEUE, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenInvalidEventWaitListWhenEnqueingExternalMemObjectsKHRThenInvalidEventWaitListErrorIsReturned) {
auto retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
1,
nullptr,
nullptr);
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, retVal);
retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
0,
reinterpret_cast<cl_event *>(pCommandQueue),
nullptr);
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, retVal);
retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
1,
reinterpret_cast<cl_event *>(pCommandQueue),
nullptr);
EXPECT_EQ(CL_INVALID_EVENT_WAIT_LIST, retVal);
}
TEST_F(ClExternalMemoryExtensionTests, GivenUserEventWithErrorStatusWhenEnqueingExternalMemObjectsKHRThenExecStatusErrorForEventsInWaitListIsReturned) {
auto userEvent = clCreateUserEvent(
pContext,
&retVal);
retVal = clSetUserEventStatus(userEvent, -1);
ASSERT_EQ(CL_SUCCESS, retVal);
retVal = clEnqueueExternalMemObjectsKHR(
pCommandQueue,
0,
nullptr,
1,
&userEvent,
nullptr);
ASSERT_EQ(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST, retVal);
retVal = clReleaseEvent(userEvent);
EXPECT_EQ(CL_SUCCESS, retVal);
}