diff --git a/include/CL/opencl.hpp b/include/CL/opencl.hpp index 2d21cf5..4b267a8 100644 --- a/include/CL/opencl.hpp +++ b/include/CL/opencl.hpp @@ -1776,6 +1776,7 @@ CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_ #if defined(cl_khr_command_buffer) CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR, cl_device_command_buffer_capabilities_khr) CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR, cl_command_queue_properties) +CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR, cl_command_queue_properties) CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_QUEUES_KHR, cl::vector) CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, cl_uint) CL_HPP_DECLARE_PARAM_TRAITS_(cl_command_buffer_info_khr, CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR, cl_uint) diff --git a/layers/10_cmdbufemu/emulate.cpp b/layers/10_cmdbufemu/emulate.cpp index edc8484..5a871b4 100644 --- a/layers/10_cmdbufemu/emulate.cpp +++ b/layers/10_cmdbufemu/emulate.cpp @@ -20,7 +20,7 @@ #include "emulate.h" static constexpr cl_version version_cl_khr_command_buffer = - CL_MAKE_VERSION(0, 9, 5); + CL_MAKE_VERSION(0, 9, 6); static constexpr cl_version version_cl_khr_command_buffer_mutable_dispatch = CL_MAKE_VERSION(0, 9, 3); @@ -3047,6 +3047,22 @@ bool clGetDeviceInfo_override( caps |= CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR; } + auto ptr = (cl_device_command_buffer_capabilities_khr*)param_value; + cl_int errorCode = writeParamToMemory( + param_value_size, + caps, + param_value_size_ret, + ptr ); + + if( errcode_ret ) + { + errcode_ret[0] = errorCode; + } + return true; + } + break; + case CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR: + { cl_command_queue_properties cqProps = 0; g_pNextDispatch->clGetDeviceInfo( device, @@ -3054,15 +3070,22 @@ bool clGetDeviceInfo_override( sizeof(cqProps), &cqProps, nullptr ); - if( cqProps & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE ) + + cl_command_queue_properties cbProps = 0; + if(cqProps & CL_QUEUE_PROFILING_ENABLE) { - caps |= CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR; + cbProps |= CL_QUEUE_PROFILING_ENABLE; } - auto ptr = (cl_device_command_buffer_capabilities_khr*)param_value; + if(cqProps & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) + { + cbProps |= CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE; + } + + auto ptr = (cl_command_queue_properties*)param_value; cl_int errorCode = writeParamToMemory( param_value_size, - caps, + cbProps, param_value_size_ret, ptr ); diff --git a/samples/12_commandbuffers/main.cpp b/samples/12_commandbuffers/main.cpp index cb9fab2..9838c5b 100644 --- a/samples/12_commandbuffers/main.cpp +++ b/samples/12_commandbuffers/main.cpp @@ -33,19 +33,17 @@ static void PrintCommandBufferCapabilities( if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n"); - if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n"); cl_device_command_buffer_capabilities_khr extra = caps & ~( CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR | CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ); + CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ); if (extra) { printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra); } } -static void PrintCommandBufferRequiredQueueProperties( +static void PrintCommandBufferQueueProperties( cl_command_queue_properties props ) { 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( &requiredProps, NULL ); printf("\tCommand Buffer Required Queue Properties:\n"); - PrintCommandBufferRequiredQueueProperties(requiredProps); + PrintCommandBufferQueueProperties(requiredProps); + + cl_command_queue_properties supportedProps = 0; + clGetDeviceInfo( + devices[deviceIndex](), + CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR, + sizeof(supportedProps), + &supportedProps, + NULL ); + printf("\tCommand Buffer Supported Queue Properties:\n"); + PrintCommandBufferQueueProperties(supportedProps); cl::Context context{devices[deviceIndex]}; cl::CommandQueue commandQueue{context, devices[deviceIndex]}; diff --git a/samples/12_commandbufferspp/main.cpp b/samples/12_commandbufferspp/main.cpp index eabfa51..91f55b7 100644 --- a/samples/12_commandbufferspp/main.cpp +++ b/samples/12_commandbufferspp/main.cpp @@ -28,19 +28,17 @@ static void PrintCommandBufferCapabilities( if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n"); - if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n"); cl_device_command_buffer_capabilities_khr extra = caps & ~( CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR | CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ); + CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ); if (extra) { printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra); } } -static void PrintCommandBufferRequiredQueueProperties( +static void PrintCommandBufferQueueProperties( cl_command_queue_properties props ) { 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( devices[deviceIndex].getInfo()); printf("\tCommand Buffer Required Queue Properties:\n"); - PrintCommandBufferRequiredQueueProperties( + PrintCommandBufferQueueProperties( devices[deviceIndex].getInfo()); + printf("\tCommand Buffer Supported Queue Properties:\n"); + PrintCommandBufferQueueProperties( + devices[deviceIndex].getInfo()); + cl::Context context{devices[deviceIndex]}; cl::CommandQueue commandQueue{context, devices[deviceIndex]}; diff --git a/samples/13_mutablecommandbuffers/main.cpp b/samples/13_mutablecommandbuffers/main.cpp index 43c477e..92952c7 100644 --- a/samples/13_mutablecommandbuffers/main.cpp +++ b/samples/13_mutablecommandbuffers/main.cpp @@ -30,19 +30,17 @@ static void PrintCommandBufferCapabilities( if (caps & CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR\n"); if (caps & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR\n"); - if (caps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ) printf("\t\tCL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR\n"); cl_device_command_buffer_capabilities_khr extra = caps & ~( CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR | CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR | - CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR ); + CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR ); if (extra) { printf("\t\t(Unknown capability: %016" PRIx64 ")\n", extra); } } -static void PrintCommandBufferRequiredQueueProperties( +static void PrintCommandBufferQueueProperties( cl_command_queue_properties props ) { 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( &requiredProps, NULL ); printf("\tCommand Buffer Required Queue Properties:\n"); - PrintCommandBufferRequiredQueueProperties(requiredProps); + PrintCommandBufferQueueProperties(requiredProps); + + cl_command_queue_properties supportedProps = 0; + clGetDeviceInfo( + devices[deviceIndex](), + CL_DEVICE_COMMAND_BUFFER_SUPPORTED_QUEUE_PROPERTIES_KHR, + sizeof(supportedProps), + &supportedProps, + NULL ); + printf("\tCommand Buffer Supported Queue Properties:\n"); + PrintCommandBufferQueueProperties(supportedProps); cl_mutable_dispatch_fields_khr mutableCaps = 0; clGetDeviceInfo( diff --git a/samples/14_ooqcommandbuffers/main.cpp b/samples/14_ooqcommandbuffers/main.cpp index a48d039..ddc745a 100644 --- a/samples/14_ooqcommandbuffers/main.cpp +++ b/samples/14_ooqcommandbuffers/main.cpp @@ -95,9 +95,9 @@ int main( return -1; } - cl_device_command_buffer_capabilities_khr cmdbufcaps = - devices[deviceIndex].getInfo(); - if (cmdbufcaps & CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR) { + cl_command_queue_properties cmdbufqueueprops = + devices[deviceIndex].getInfo(); + if (cmdbufqueueprops & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) { printf("Device supports out-of-order command buffers.\n"); } else { printf("Device does not support out-of-order command buffers, exiting.\n");