mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
OpenCL Queue Families extension 7/n
Update enum values to official ones Delete redundant CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL Rename CL_QUEUE_CAPABILITY_ALL_INTEL to CL_QUEUE_DEFAULT_CAPABILITIES_INTEL Add capabilities for cross queue events and single queue events Add capabilities for buffer to image and image to buffer transfers Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com> Related-To: NEO-5120
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
05ab806126
commit
384e47f438
@ -151,25 +151,29 @@ using cl_unified_shared_memory_capabilities_intel = cl_bitfield;
|
||||
*******************************/
|
||||
|
||||
/* cl_device_info */
|
||||
#define CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL 0x10030
|
||||
#define CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL 0x10031
|
||||
#define CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL 0x418B
|
||||
|
||||
/* cl_queue_properties */
|
||||
#define CL_QUEUE_FAMILY_INTEL 0x10032
|
||||
#define CL_QUEUE_INDEX_INTEL 0x10033
|
||||
#define CL_QUEUE_FAMILY_INTEL 0x418C
|
||||
#define CL_QUEUE_INDEX_INTEL 0x418D
|
||||
|
||||
/* cl_command_queue_capabilities_intel */
|
||||
#define CL_QUEUE_DEFAULT_CAPABILITIES_INTEL 0u
|
||||
#define CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL (1 << 0)
|
||||
#define CL_QUEUE_CAPABILITY_EVENTS_INTEL (1 << 1)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL (1 << 2)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL (1 << 3)
|
||||
#define CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL (1 << 4)
|
||||
#define CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL (1 << 5)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL (1 << 6)
|
||||
#define CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL (1 << 7)
|
||||
#define CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL (1 << 8)
|
||||
#define CL_QUEUE_CAPABILITY_MARKER_INTEL (1 << 9)
|
||||
#define CL_QUEUE_CAPABILITY_BARRIER_INTEL (1 << 10)
|
||||
#define CL_QUEUE_CAPABILITY_KERNEL_INTEL (1 << 11)
|
||||
#define CL_QUEUE_CAPABILITY_ALL_INTEL 0xFFFFFFFFFFFFFFFFULL
|
||||
#define CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL (1 << 1)
|
||||
#define CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENTS_INTEL (1 << 2)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL (1 << 8)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL (1 << 9)
|
||||
#define CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL (1 << 10)
|
||||
#define CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL (1 << 11)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL (1 << 12)
|
||||
#define CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL (1 << 13)
|
||||
#define CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL (1 << 14)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL (1 << 15)
|
||||
#define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL (1 << 16)
|
||||
#define CL_QUEUE_CAPABILITY_MARKER_INTEL (1 << 24)
|
||||
#define CL_QUEUE_CAPABILITY_BARRIER_INTEL (1 << 25)
|
||||
#define CL_QUEUE_CAPABILITY_KERNEL_INTEL (1 << 26)
|
||||
|
||||
typedef cl_bitfield cl_command_queue_capabilities_intel;
|
||||
|
||||
|
@ -204,7 +204,8 @@ bool ClDevice::arePipesSupported() const {
|
||||
|
||||
cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilitiesAll() {
|
||||
return CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL |
|
||||
CL_QUEUE_CAPABILITY_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL |
|
||||
@ -212,6 +213,8 @@ cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilitiesAll() {
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MARKER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_BARRIER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_KERNEL_INTEL;
|
||||
@ -228,7 +231,7 @@ cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilities(EngineG
|
||||
if (disabledProperties != 0) {
|
||||
return getQueueFamilyCapabilitiesAll() & ~disabledProperties;
|
||||
}
|
||||
return CL_QUEUE_CAPABILITY_ALL_INTEL;
|
||||
return CL_QUEUE_DEFAULT_CAPABILITIES_INTEL;
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
@ -375,7 +375,7 @@ void ClDevice::initializeCaps() {
|
||||
}
|
||||
} else {
|
||||
cl_queue_family_properties_intel properties;
|
||||
properties.capabilities = CL_QUEUE_CAPABILITY_ALL_INTEL;
|
||||
properties.capabilities = CL_QUEUE_DEFAULT_CAPABILITIES_INTEL;
|
||||
properties.count = 1;
|
||||
properties.properties = deviceInfo.queueOnHostProperties;
|
||||
deviceInfo.queueFamilyProperties.push_back(properties);
|
||||
|
@ -188,11 +188,6 @@ cl_int ClDevice::getDeviceInfo(cl_device_info paramName,
|
||||
src = ¶m;
|
||||
}
|
||||
break;
|
||||
case CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL:
|
||||
srcSize = retSize = sizeof(cl_uint);
|
||||
param = static_cast<cl_uint>(deviceInfo.queueFamilyProperties.size());
|
||||
src = ¶m;
|
||||
break;
|
||||
case CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL:
|
||||
if (simultaneousInterops.size() > 1u) {
|
||||
srcSize = retSize = sizeof(cl_uint) * simultaneousInterops.size();
|
||||
|
@ -539,13 +539,15 @@ bool CommandQueue::setupDebugSurface(Kernel *kernel) {
|
||||
}
|
||||
|
||||
bool CommandQueue::validateCapability(cl_command_queue_capabilities_intel capability) const {
|
||||
return this->queueCapabilities == CL_QUEUE_CAPABILITY_ALL_INTEL || isValueSet(this->queueCapabilities, capability);
|
||||
return this->queueCapabilities == CL_QUEUE_DEFAULT_CAPABILITIES_INTEL || isValueSet(this->queueCapabilities, capability);
|
||||
}
|
||||
|
||||
bool CommandQueue::validateCapabilityForOperation(cl_command_queue_capabilities_intel capability, const cl_event *waitList, const cl_event *outEvent) const {
|
||||
const bool operationValid = validateCapability(capability);
|
||||
const bool waitListValid = waitList == nullptr || validateCapability(CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL);
|
||||
const bool outEventValid = outEvent == nullptr || validateCapability(CL_QUEUE_CAPABILITY_EVENTS_INTEL);
|
||||
const bool outEventValid = outEvent == nullptr ||
|
||||
validateCapability(CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL) ||
|
||||
validateCapability(CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENTS_INTEL);
|
||||
return operationValid && waitListValid && outEventValid;
|
||||
}
|
||||
|
||||
|
@ -364,7 +364,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
|
||||
cl_command_queue_properties commandQueueProperties = 0;
|
||||
std::vector<uint64_t> propertiesVector;
|
||||
|
||||
cl_command_queue_capabilities_intel queueCapabilities = CL_QUEUE_CAPABILITY_ALL_INTEL;
|
||||
cl_command_queue_capabilities_intel queueCapabilities = CL_QUEUE_DEFAULT_CAPABILITIES_INTEL;
|
||||
cl_uint queueFamilyIndex = 0;
|
||||
cl_uint queueIndexWithinFamily = 0;
|
||||
bool queueFamilySelected = false;
|
||||
|
@ -65,7 +65,7 @@ struct ApiFixture {
|
||||
}
|
||||
|
||||
void disableQueueCapabilities(cl_command_queue_capabilities_intel capabilities) {
|
||||
if (pCommandQueue->queueCapabilities == CL_QUEUE_CAPABILITY_ALL_INTEL) {
|
||||
if (pCommandQueue->queueCapabilities == CL_QUEUE_DEFAULT_CAPABILITIES_INTEL) {
|
||||
pCommandQueue->queueCapabilities = pDevice->getQueueFamilyCapabilitiesAll();
|
||||
}
|
||||
|
||||
|
@ -1253,7 +1253,15 @@ TEST(CommandQueue, givenSupportForOutEventAndOutEventIsPassedWhenValidatingSuppo
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, nullptr));
|
||||
EXPECT_FALSE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, &outEvent));
|
||||
|
||||
queue.queueCapabilities |= CL_QUEUE_CAPABILITY_EVENTS_INTEL;
|
||||
queue.queueCapabilities |= CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL;
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, nullptr));
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, &outEvent));
|
||||
|
||||
queue.queueCapabilities |= CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENTS_INTEL;
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, nullptr));
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, &outEvent));
|
||||
|
||||
queue.queueCapabilities &= ~CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL;
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, nullptr));
|
||||
EXPECT_TRUE(queue.validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL, nullptr, &outEvent));
|
||||
}
|
||||
|
@ -469,7 +469,8 @@ TEST(DeviceGenEngineTest, givenEmptyGroupsWhenGettingNonEmptyGroupsThenReturnCor
|
||||
|
||||
TEST(DeviceGenEngineTest, whenGettingQueueFamilyCapabilitiesAllThenReturnCorrectValue) {
|
||||
const cl_command_queue_capabilities_intel expectedProperties = CL_QUEUE_CAPABILITY_EVENT_WAIT_LIST_INTEL |
|
||||
CL_QUEUE_CAPABILITY_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENTS_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL |
|
||||
@ -477,6 +478,8 @@ TEST(DeviceGenEngineTest, whenGettingQueueFamilyCapabilitiesAllThenReturnCorrect
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL |
|
||||
CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_MARKER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_BARRIER_INTEL |
|
||||
CL_QUEUE_CAPABILITY_KERNEL_INTEL;
|
||||
@ -489,7 +492,7 @@ TEST(DeviceGenEngineTest, givenCopyQueueWhenGettingQueueFamilyCapabilitiesThenDo
|
||||
|
||||
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get()));
|
||||
|
||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::Compute));
|
||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::RenderCompute));
|
||||
EXPECT_EQ(CL_QUEUE_DEFAULT_CAPABILITIES_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::Compute));
|
||||
EXPECT_EQ(CL_QUEUE_DEFAULT_CAPABILITIES_INTEL, device->getQueueFamilyCapabilities(NEO::EngineGroupType::RenderCompute));
|
||||
EXPECT_EQ(propertiesWithoutKernel, device->getQueueFamilyCapabilities(NEO::EngineGroupType::Copy));
|
||||
}
|
||||
|
@ -720,18 +720,14 @@ HWTEST_F(GetDeviceInfoQueueFamilyTest, givenSingleDeviceWhenInitializingCapsThen
|
||||
UltClDeviceFactory deviceFactory{1, 0};
|
||||
ClDevice &clDevice = *deviceFactory.rootDevices[0];
|
||||
size_t paramRetSize{};
|
||||
|
||||
cl_uint numQueueFamilies{};
|
||||
auto retVal = clDevice.getDeviceInfo(CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL, sizeof(numQueueFamilies), &numQueueFamilies, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(2u, numQueueFamilies);
|
||||
cl_int retVal{};
|
||||
|
||||
cl_queue_family_properties_intel families[static_cast<int>(EngineGroupType::MaxEngineGroups)];
|
||||
retVal = clDevice.getDeviceInfo(CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL, sizeof(families), families, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(2u, paramRetSize / sizeof(cl_queue_family_properties_intel));
|
||||
|
||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(CL_QUEUE_DEFAULT_CAPABILITIES_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(3u, families[0].count);
|
||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
||||
|
||||
@ -745,18 +741,14 @@ HWTEST_F(GetDeviceInfoQueueFamilyTest, givenSubDeviceWhenInitializingCapsThenRet
|
||||
UltClDeviceFactory deviceFactory{1, 2};
|
||||
ClDevice &clDevice = *deviceFactory.subDevices[1];
|
||||
size_t paramRetSize{};
|
||||
|
||||
cl_uint numQueueFamilies{};
|
||||
auto retVal = clDevice.getDeviceInfo(CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL, sizeof(numQueueFamilies), &numQueueFamilies, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(2u, numQueueFamilies);
|
||||
cl_int retVal{};
|
||||
|
||||
cl_queue_family_properties_intel families[static_cast<int>(EngineGroupType::MaxEngineGroups)];
|
||||
retVal = clDevice.getDeviceInfo(CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL, sizeof(families), families, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(2u, paramRetSize / sizeof(cl_queue_family_properties_intel));
|
||||
|
||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(CL_QUEUE_DEFAULT_CAPABILITIES_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(3u, families[0].count);
|
||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
||||
|
||||
@ -769,18 +761,14 @@ HWTEST_F(GetDeviceInfoQueueFamilyTest, givenDeviceRootDeviceWhenInitializingCaps
|
||||
UltClDeviceFactory deviceFactory{1, 2};
|
||||
ClDevice &clDevice = *deviceFactory.rootDevices[0];
|
||||
size_t paramRetSize{};
|
||||
|
||||
cl_uint numQueueFamilies{};
|
||||
auto retVal = clDevice.getDeviceInfo(CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL, sizeof(numQueueFamilies), &numQueueFamilies, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(1u, numQueueFamilies);
|
||||
cl_int retVal{};
|
||||
|
||||
cl_queue_family_properties_intel families[static_cast<int>(EngineGroupType::MaxEngineGroups)];
|
||||
retVal = clDevice.getDeviceInfo(CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL, sizeof(families), families, ¶mRetSize);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_EQ(1u, paramRetSize / sizeof(cl_queue_family_properties_intel));
|
||||
|
||||
EXPECT_EQ(CL_QUEUE_CAPABILITY_ALL_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(CL_QUEUE_DEFAULT_CAPABILITIES_INTEL, families[0].capabilities);
|
||||
EXPECT_EQ(1u, families[0].count);
|
||||
EXPECT_EQ(clDevice.getDeviceInfo().queueOnHostProperties, families[0].properties);
|
||||
}
|
||||
@ -877,7 +865,6 @@ cl_device_info deviceInfoParams[] = {
|
||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG,
|
||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT,
|
||||
CL_DEVICE_NUMERIC_VERSION,
|
||||
CL_DEVICE_NUM_QUEUE_FAMILIES_INTEL,
|
||||
CL_DEVICE_OPENCL_C_ALL_VERSIONS,
|
||||
CL_DEVICE_OPENCL_C_FEATURES,
|
||||
CL_DEVICE_OPENCL_C_VERSION,
|
||||
|
Reference in New Issue
Block a user