compute-runtime/unit_tests/api/cl_get_platform_info_tests.inl

228 lines
7.1 KiB
C++

/*
* Copyright (C) 2017-2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "core/debug_settings/debug_settings_manager.h"
#include "core/helpers/options.h"
#include "runtime/device/device.h"
#include "runtime/platform/platform.h"
#include "test.h"
#include "CL/cl_ext.h"
#include "cl_api_tests.h"
using namespace NEO;
struct clGetPlatformInfoTests : public api_tests {
void SetUp() override {
api_tests::SetUp();
}
void TearDown() override {
delete[] paramValue;
api_tests::TearDown();
}
char *getPlatformInfoString(Platform *pPlatform, cl_platform_info paramName) {
size_t retSize;
auto retVal = clGetPlatformInfo(pPlatform, paramName, 0, nullptr, &retSize);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_GT(retSize, 0u);
auto value = new char[retSize];
retVal = clGetPlatformInfo(pPlatform, paramName, retSize, value, nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
return value;
}
char *paramValue = nullptr;
};
namespace ULT {
TEST_F(clGetPlatformInfoTests, GivenClPlatformProfileWhenGettingPlatformInfoStringThenFullProfileIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_PROFILE);
EXPECT_STREQ(paramValue, "FULL_PROFILE");
}
class clGetPlatformInfoParameterizedTests : public clGetPlatformInfoTests,
public ::testing::WithParamInterface<uint32_t> {
void SetUp() override {
DebugManager.flags.ForceOCLVersion.set(GetParam());
clGetPlatformInfoTests::SetUp();
}
void TearDown() override {
clGetPlatformInfoTests::TearDown();
DebugManager.flags.ForceOCLVersion.set(0);
}
};
TEST_P(clGetPlatformInfoParameterizedTests, GivenClPlatformVersionWhenGettingPlatformInfoStringThenCorrectOpenClVersionIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_VERSION);
std::string deviceVer;
switch (GetParam()) {
case 21:
deviceVer = "OpenCL 2.1 ";
break;
case 20:
deviceVer = "OpenCL 2.0 ";
break;
case 12:
default:
deviceVer = "OpenCL 1.2 ";
break;
}
EXPECT_STREQ(paramValue, deviceVer.c_str());
}
INSTANTIATE_TEST_CASE_P(OCLVersions,
clGetPlatformInfoParameterizedTests,
::testing::Values(12, 20, 21));
TEST_F(clGetPlatformInfoTests, GivenClPlatformNameWhenGettingPlatformInfoStringThenCorrectStringIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_NAME);
EXPECT_STREQ(paramValue, "Intel(R) OpenCL HD Graphics");
}
TEST_F(clGetPlatformInfoTests, GivenClPlatformVendorWhenGettingPlatformInfoStringThenCorrectStringIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_VENDOR);
EXPECT_STREQ(paramValue, "Intel(R) Corporation");
}
TEST_F(clGetPlatformInfoTests, GivenClPlatformExtensionsWhenGettingPlatformInfoStringThenExtensionStringIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_EXTENSIONS);
EXPECT_NE(nullptr, strstr(paramValue, "cl_khr_icd "));
EXPECT_NE(nullptr, strstr(paramValue, "cl_khr_fp16 "));
}
TEST_F(clGetPlatformInfoTests, GivenClPlatformIcdSuffixKhrWhenGettingPlatformInfoStringThenIntelIsReturned) {
paramValue = getPlatformInfoString(pPlatform, CL_PLATFORM_ICD_SUFFIX_KHR);
EXPECT_STREQ(paramValue, "INTEL");
}
TEST_F(clGetPlatformInfoTests, GivenClPlatformHostTimerResolutionWhenGettingPlatformInfoStringThenCorrectResolutionIsReturned) {
auto retVal = clGetPlatformInfo(pPlatform, CL_PLATFORM_HOST_TIMER_RESOLUTION, 0, nullptr, &retSize);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_GT(retSize, 0u);
cl_ulong value = 0;
retVal = clGetPlatformInfo(pPlatform, CL_PLATFORM_HOST_TIMER_RESOLUTION, retSize, &value, nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
auto device = pPlatform->getDevice(0);
cl_ulong resolution = static_cast<cl_ulong>(device->getPlatformHostTimerResolution());
EXPECT_EQ(resolution, value);
}
TEST_F(clGetPlatformInfoTests, GivenNullPlatformWhenGettingPlatformInfoStringThenClInvalidPlatformErrorIsReturned) {
char extensions[512];
retVal = clGetPlatformInfo(
nullptr, // invalid platform
CL_PLATFORM_EXTENSIONS,
sizeof(extensions),
extensions,
&retSize);
EXPECT_EQ(CL_INVALID_PLATFORM, retVal);
}
TEST_F(clGetPlatformInfoTests, GivenInvalidParamNameWhenGettingPlatformInfoStringThenClInvalidValueErrorIsReturned) {
char extensions[512];
retVal = clGetPlatformInfo(
pPlatform,
0, // invalid platform info enum
sizeof(extensions),
extensions,
&retSize);
EXPECT_EQ(CL_INVALID_VALUE, retVal);
}
TEST_F(clGetPlatformInfoTests, GivenInvalidParamSizeWhenGettingPlatformInfoStringThenClInvalidValueErrorIsReturned) {
char extensions[512];
retVal = clGetPlatformInfo(
pPlatform,
CL_PLATFORM_EXTENSIONS,
0, // invalid size
extensions,
&retSize);
EXPECT_EQ(CL_INVALID_VALUE, retVal);
}
TEST_F(clGetPlatformInfoTests, GivenDeviceWhenGettingIcdDispatchTableThenDeviceAndPlatformTablesMatch) {
EXPECT_NE(pPlatform->dispatch.icdDispatch, nullptr);
for (size_t deviceOrdinal = 0; deviceOrdinal < pPlatform->getNumDevices(); ++deviceOrdinal) {
auto device = pPlatform->getDevice(deviceOrdinal);
ASSERT_NE(nullptr, device);
EXPECT_EQ(pPlatform->dispatch.icdDispatch, device->dispatch.icdDispatch);
}
}
class GetPlatformInfoTests : public PlatformFixture,
public testing::TestWithParam<uint32_t /*cl_platform_info*/> {
using PlatformFixture::SetUp;
public:
GetPlatformInfoTests() {}
protected:
void SetUp() override {
platformInfo = GetParam();
PlatformFixture::SetUp();
}
void TearDown() override {
PlatformFixture::TearDown();
}
char *getPlatformInfoString(Platform *pPlatform, cl_platform_info paramName) {
size_t retSize;
auto retVal = clGetPlatformInfo(pPlatform, paramName, 0, nullptr, &retSize);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_GT(retSize, 0u);
auto value = new char[retSize];
retVal = clGetPlatformInfo(pPlatform, paramName, retSize, value, nullptr);
EXPECT_EQ(CL_SUCCESS, retVal);
return value;
}
cl_int retVal = CL_SUCCESS;
size_t retSize = 0;
cl_platform_info platformInfo = 0;
const HardwareInfo *pHwInfo = nullptr;
};
TEST_P(GetPlatformInfoTests, GivenValidParamWhenGettingPlatformInfoStringThenNonEmptyStringIsReturned) {
auto paramValue = getPlatformInfoString(pPlatform, platformInfo);
EXPECT_STRNE(paramValue, "");
delete[] paramValue;
}
const cl_platform_info PlatformInfoTestValues[] =
{
CL_PLATFORM_PROFILE,
CL_PLATFORM_VERSION,
CL_PLATFORM_NAME,
CL_PLATFORM_VENDOR,
CL_PLATFORM_EXTENSIONS,
CL_PLATFORM_ICD_SUFFIX_KHR,
};
INSTANTIATE_TEST_CASE_P(api,
GetPlatformInfoTests,
::testing::ValuesIn(PlatformInfoTestValues));
} // namespace ULT