From 0a59476cb933cdd07cd2e3f3bfbba924a5e8867b Mon Sep 17 00:00:00 2001 From: Kamil Kopryk Date: Tue, 25 Jun 2019 14:28:25 +0200 Subject: [PATCH] clGetDeviceInfo support unified memory 1/n Change-Id: Iebb7f9f81ebfef8382ef12783356127f27ea3fc3 Related-To: NEO-3344 Signed-off-by: Kamil Kopryk --- public/cl_ext_private.h | 8 ++++++++ runtime/device/device_info.cpp | 11 +++++++++++ unit_tests/device/get_device_info_tests.cpp | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/public/cl_ext_private.h b/public/cl_ext_private.h index 404e0dfa9f..88536e80b8 100644 --- a/public/cl_ext_private.h +++ b/public/cl_ext_private.h @@ -46,6 +46,7 @@ using cl_mem_flags_intel = cl_mem_flags; using cl_mem_info_intel = cl_uint; using cl_mem_advice_intel = cl_uint; using cl_unified_shared_memory_type_intel = cl_uint; +using cl_unified_shared_memory_capabilities_intel = cl_bitfield; /****************************** * Internal only cl_mem_flags * @@ -71,3 +72,10 @@ using cl_unified_shared_memory_type_intel = cl_uint; #define CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL 0x10051 #define CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL 0x10052 #define CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL 0x10053 + +// New queries for clGetDeviceInfo: +#define CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL 0x10050 +#define CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL 0x10051 +#define CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x10052 +#define CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x10053 +#define CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL 0x10054 diff --git a/runtime/device/device_info.cpp b/runtime/device/device_info.cpp index b5b8a8a317..66ff78a658 100644 --- a/runtime/device/device_info.cpp +++ b/runtime/device/device_info.cpp @@ -71,6 +71,7 @@ cl_int Device::getDeviceInfo(cl_device_info paramName, size_t srcSize = 0; size_t retSize = 0; cl_uint param; + cl_ulong ulongParam; const void *src = nullptr; // clang-format off @@ -205,6 +206,16 @@ cl_int Device::getDeviceInfo(cl_device_info paramName, if (deviceInfo.nv12Extension) getCap(src, srcSize, retSize); break; + case CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL: + case CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL: + case CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL: + case CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL: + case CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL: { + src = &ulongParam; + retSize = srcSize = sizeof(cl_unified_shared_memory_capabilities_intel); + ulongParam = 0u; + break; + } default: DeviceHelper::getExtraDeviceInfo(getHardwareInfo(), paramName, param, src, srcSize, retSize); } diff --git a/unit_tests/device/get_device_info_tests.cpp b/unit_tests/device/get_device_info_tests.cpp index 07866fbef9..8d14520ba8 100644 --- a/unit_tests/device/get_device_info_tests.cpp +++ b/unit_tests/device/get_device_info_tests.cpp @@ -25,6 +25,26 @@ TEST(GetDeviceInfo, InvalidFlags_returnsError) { EXPECT_EQ(CL_INVALID_VALUE, retVal); } +TEST(GetDeviceInfo, GivenValidParametersWhenGetDeviceInfoIsCalledThenClSuccessIsReturned) { + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(nullptr)); + + cl_uint params[] = {CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL, + CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL, + CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL, + CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL, + CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL}; + + for (auto param : params) { + cl_unified_shared_memory_capabilities_intel unifiedSharedMemoryCapabilities{}; + size_t paramRetSize; + + const auto retVal = device->getDeviceInfo(param, sizeof(cl_unified_shared_memory_capabilities_intel), &unifiedSharedMemoryCapabilities, ¶mRetSize); + EXPECT_EQ(CL_SUCCESS, retVal); + EXPECT_EQ(0u, unifiedSharedMemoryCapabilities); + EXPECT_EQ(sizeof(cl_unified_shared_memory_capabilities_intel), paramRetSize); + } +} + TEST(GetDeviceInfo, devicePlanarYuvMaxWidthHeightReturnsErrorWhenPlanarYuvExtensionDisabled) { auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(nullptr));