Skip to content

Commit 23ab096

Browse files
authored
CMD-Buf supported queue properties (#126)
Updates to the command-buffer emulation layer to support changes from KhronosGroup/OpenCL-Docs#850 Requires using KhronosGroup/OpenCL-Headers#265 in `external/OpenCL-Headers` and can be used to test CTS changes from KhronosGroup/OpenCL-CTS#2101
1 parent 64c5adb commit 23ab096

File tree

6 files changed

+65
-23
lines changed

6 files changed

+65
-23
lines changed

include/CL/opencl.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1776,6 +1776,7 @@ CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_
17761776
#if defined(cl_khr_command_buffer)
17771777
CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR, cl_device_command_buffer_capabilities_khr)
17781778
CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR, cl_command_queue_properties)
1779+
CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR, cl_command_queue_properties)
17791780
CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_QUEUES_KHR, cl::vector<CommandQueue>)
17801781
CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, cl_uint)
17811782
CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR, cl_uint)

layers/10_cmdbufemu/emulate.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "emulate.h"
2121

2222
static constexpr cl_version version_cl_khr_command_buffer =
23-
CL_MAKE_VERSION(0, 9, 5);
23+
CL_MAKE_VERSION(0, 9, 6);
2424
static constexpr cl_version version_cl_khr_command_buffer_mutable_dispatch =
2525
CL_MAKE_VERSION(0, 9, 3);
2626

@@ -3047,22 +3047,45 @@ bool clGetDeviceInfo_override(
30473047
caps |= CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR;
30483048
}
30493049

3050+
auto ptr = (cl_device_command_buffer_capabilities_khr*)param_value;
3051+
cl_int errorCode = writeParamToMemory(
3052+
param_value_size,
3053+
caps,
3054+
param_value_size_ret,
3055+
ptr );
3056+
3057+
if( errcode_ret )
3058+
{
3059+
errcode_ret[0] = errorCode;
3060+
}
3061+
return true;
3062+
}
3063+
break;
3064+
case CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR:
3065+
{
30503066
cl_command_queue_properties cqProps = 0;
30513067
g_pNextDispatch->clGetDeviceInfo(
30523068
device,
30533069
CL_DEVICE_QUEUE_PROPERTIES,
30543070
sizeof(cqProps),
30553071
&cqProps,
30563072
nullptr );
3057-
if( cqProps & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE )
3073+
3074+
cl_command_queue_properties cbProps = 0;
3075+
if(cqProps & CL_QUEUE_PROFILING_ENABLE)
30583076
{
3059-
caps |= CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR;
3077+
cbProps |= CL_QUEUE_PROFILING_ENABLE;
30603078
}
30613079

3062-
auto ptr = (cl_device_command_buffer_capabilities_khr*)param_value;
3080+
if(cqProps & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)
3081+
{
3082+
cbProps |= CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE;
3083+
}
3084+
3085+
auto ptr = (cl_command_queue_properties*)param_value;
30633086
cl_int errorCode = writeParamToMemory(
30643087
param_value_size,
3065-
caps,
3088+
cbProps,
30663089
param_value_size_ret,
30673090
ptr );
30683091

samples/12_commandbuffers/main.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,17 @@ static void PrintCommandBufferCapabilities(
3333
if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n");
3434
if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n");
3535
if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n");
36-
if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n");
3736

3837
cl_device_command_buffer_capabilities_khr extra = caps & ~(
3938
CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR |
4039
CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR |
41-
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR |
42-
CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR );
40+
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR );
4341
if (extra) {
4442
printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra);
4543
}
4644
}
4745

48-
static void PrintCommandBufferRequiredQueueProperties(
46+
static void PrintCommandBufferQueueProperties(
4947
cl_command_queue_properties props )
5048
{
5149
if (props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) printf("\t\tCL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE\n");
@@ -137,7 +135,17 @@ int main(
137135
&requiredProps,
138136
NULL );
139137
printf("\tCommand Buffer Required Queue Properties:\n");
140-
PrintCommandBufferRequiredQueueProperties(requiredProps);
138+
PrintCommandBufferQueueProperties(requiredProps);
139+
140+
cl_command_queue_properties supportedProps = 0;
141+
clGetDeviceInfo(
142+
devices[deviceIndex](),
143+
CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR,
144+
sizeof(supportedProps),
145+
&supportedProps,
146+
NULL );
147+
printf("\tCommand Buffer Supported Queue Properties:\n");
148+
PrintCommandBufferQueueProperties(supportedProps);
141149

142150
cl::Context context{devices[deviceIndex]};
143151
cl::CommandQueue commandQueue{context, devices[deviceIndex]};

samples/12_commandbufferspp/main.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,17 @@ static void PrintCommandBufferCapabilities(
2828
if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n");
2929
if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n");
3030
if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n");
31-
if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n");
3231

3332
cl_device_command_buffer_capabilities_khr extra = caps & ~(
3433
CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR |
3534
CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR |
36-
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR |
37-
CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR );
35+
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR );
3836
if (extra) {
3937
printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra);
4038
}
4139
}
4240

43-
static void PrintCommandBufferRequiredQueueProperties(
41+
static void PrintCommandBufferQueueProperties(
4442
cl_command_queue_properties props )
4543
{
4644
if (props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) printf("\t\tCL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE\n");
@@ -119,9 +117,13 @@ int main(
119117
devices[deviceIndex].getInfo<CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR>());
120118

121119
printf("\tCommand Buffer Required Queue Properties:\n");
122-
PrintCommandBufferRequiredQueueProperties(
120+
PrintCommandBufferQueueProperties(
123121
devices[deviceIndex].getInfo<CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR>());
124122

123+
printf("\tCommand Buffer Supported Queue Properties:\n");
124+
PrintCommandBufferQueueProperties(
125+
devices[deviceIndex].getInfo<CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR>());
126+
125127
cl::Context context{devices[deviceIndex]};
126128
cl::CommandQueue commandQueue{context, devices[deviceIndex]};
127129

samples/13_mutablecommandbuffers/main.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,17 @@ static void PrintCommandBufferCapabilities(
3030
if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n");
3131
if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n");
3232
if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n");
33-
if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n");
3433

3534
cl_device_command_buffer_capabilities_khr extra = caps & ~(
3635
CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR |
3736
CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR |
38-
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR |
39-
CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR );
37+
CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR );
4038
if (extra) {
4139
printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra);
4240
}
4341
}
4442

45-
static void PrintCommandBufferRequiredQueueProperties(
43+
static void PrintCommandBufferQueueProperties(
4644
cl_command_queue_properties props )
4745
{
4846
if (props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) printf("\t\tCL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE\n");
@@ -162,7 +160,17 @@ int main(
162160
&requiredProps,
163161
NULL );
164162
printf("\tCommand Buffer Required Queue Properties:\n");
165-
PrintCommandBufferRequiredQueueProperties(requiredProps);
163+
PrintCommandBufferQueueProperties(requiredProps);
164+
165+
cl_command_queue_properties supportedProps = 0;
166+
clGetDeviceInfo(
167+
devices[deviceIndex](),
168+
CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR,
169+
sizeof(supportedProps),
170+
&supportedProps,
171+
NULL );
172+
printf("\tCommand Buffer Supported Queue Properties:\n");
173+
PrintCommandBufferQueueProperties(supportedProps);
166174

167175
cl_mutable_dispatch_fields_khr mutableCaps = 0;
168176
clGetDeviceInfo(

samples/14_ooqcommandbuffers/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ int main(
9595
return -1;
9696
}
9797

98-
cl_device_command_buffer_capabilities_khr cmdbufcaps =
99-
devices[deviceIndex].getInfo<CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR>();
100-
if (cmdbufcaps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR) {
98+
cl_command_queue_properties cmdbufqueueprops =
99+
devices[deviceIndex].getInfo<CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR>();
100+
if (cmdbufqueueprops & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) {
101101
printf("Device supports out-of-order command buffers.\n");
102102
} else {
103103
printf("Device does not support out-of-order command buffers, exiting.\n");

0 commit comments

Comments
 (0)