1/* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8#include "shared/source/helpers/file_io.h" 9#include "shared/test/common/helpers/test_files.h" 10 11#include "opencl/source/context/context.h" 12 13#include "cl_api_tests.h" 14 15using namespace NEO; 16 17typedef api_tests clCloneKernelTests; 18 19namespace ULT { 20 21TEST_F(clCloneKernelTests, GivenNullKernelWhenCloningKernelThenNullIsReturned) { 22 auto kernel = clCloneKernel(nullptr, nullptr); 23 EXPECT_EQ(nullptr, kernel); 24} 25 26TEST_F(clCloneKernelTests, GivenNullKernelWhenCloningKernelThenInvalidKernelErrorIsReturned) { 27 clCloneKernel(nullptr, &retVal); 28 EXPECT_EQ(CL_INVALID_KERNEL, retVal); 29} 30 31TEST_F(clCloneKernelTests, GivenValidKernelWhenCloningKernelThenSuccessIsReturned) { 32 cl_kernel pSourceKernel = nullptr; 33 cl_kernel pClonedKernel = nullptr; 34 cl_program pProgram = nullptr; 35 cl_int binaryStatus = CL_SUCCESS; 36 size_t binarySize = 0; 37 std::string testFile; 38 retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd16_", ".bin"); 39 40 auto pBinary = loadDataFromFile( 41 testFile.c_str(), 42 binarySize); 43 44 ASSERT_NE(0u, binarySize); 45 ASSERT_NE(nullptr, pBinary); 46 47 const unsigned char *binaries[1] = {reinterpret_cast<const unsigned char *>(pBinary.get())}; 48 pProgram = clCreateProgramWithBinary( 49 pContext, 50 1, 51 &testedClDevice, 52 &binarySize, 53 binaries, 54 &binaryStatus, 55 &retVal); 56 57 pBinary.reset(); 58 59 EXPECT_NE(nullptr, pProgram); 60 ASSERT_EQ(CL_SUCCESS, retVal); 61 62 retVal = clBuildProgram( 63 pProgram, 64 1, 65 &testedClDevice, 66 nullptr, 67 nullptr, 68 nullptr); 69 70 ASSERT_EQ(CL_SUCCESS, retVal); 71 72 pSourceKernel = clCreateKernel( 73 pProgram, 74 "CopyBuffer", 75 &retVal); 76 77 EXPECT_NE(nullptr, pSourceKernel); 78 ASSERT_EQ(CL_SUCCESS, retVal); 79 80 pClonedKernel = clCloneKernel( 81 pSourceKernel, 82 &retVal); 83 84 EXPECT_NE(nullptr, pClonedKernel); 85 ASSERT_EQ(CL_SUCCESS, retVal); 86 87 retVal = clReleaseKernel(pClonedKernel); 88 ASSERT_EQ(CL_SUCCESS, retVal); 89 90 retVal = clReleaseKernel(pSourceKernel); 91 ASSERT_EQ(CL_SUCCESS, retVal); 92 93 retVal = clReleaseProgram(pProgram); 94 EXPECT_EQ(CL_SUCCESS, retVal); 95} 96} // namespace ULT 97