37 cl_int status = CL_SUCCESS;
39 cl_command_buffer_properties_khr properties[] = {
40 CL_COMMAND_BUFFER_FLAGS_KHR,
41 CL_COMMAND_BUFFER_MUTABLE_KHR,
52 if (status != CL_SUCCESS)
54 const std::string error_message =
"clReleaseCommandBufferKHR - Error code: " +
std::to_string(status);
61 const cl::NDRange &global,
62 const cl::NDRange &local)
66 cl_mutable_command_khr mutable_handle =
nullptr;
68 cl_ndrange_kernel_command_properties_khr properties[] = {
69 CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR,
70 CL_MUTABLE_DISPATCH_ARGUMENTS_KHR,
75 _cb,
nullptr, properties, kernel, global.dimensions(),
offset.dimensions() != 0 ?
offset.get() :
nullptr,
76 global.get(), local.dimensions() != 0 ? local.get() :
nullptr, 0,
nullptr,
nullptr, &mutable_handle);
80 cl_mutable_dispatch_config_khr mut_dispatch_cfg{};
81 mut_dispatch_cfg.type = CL_STRUCTURE_TYPE_MUTABLE_DISPATCH_CONFIG_KHR;
82 mut_dispatch_cfg.command = mutable_handle;
84 _mut_dispatch_cfgs.emplace_back(mut_dispatch_cfg);
87 void CLMutableCommandBuffer::add_mutable_argument_generic(cl_uint arg_idx,
const void *value,
size_t size)
91 cl_mutable_dispatch_arg_khr cfg{};
92 cfg.arg_index = arg_idx;
94 cfg.arg_value = value;
96 _mut_arg_cfgs.emplace_back(cfg);
97 ++_mut_dispatch_cfgs.back().num_args;
107 state(State::Finalized);
109 _mut_dispatch_cfgs.shrink_to_fit();
110 _mut_arg_cfgs.shrink_to_fit();
114 for (
auto &mut_dispatch_cfg : _mut_dispatch_cfgs)
117 mut_dispatch_cfg.arg_list = &_mut_arg_cfgs[arg_no];
119 arg_no += mut_dispatch_cfg.num_args;
122 _mut_cfg.type = CL_STRUCTURE_TYPE_MUTABLE_BASE_CONFIG_KHR;
123 _mut_cfg.next =
nullptr;
124 _mut_cfg.num_mutable_dispatch = _mut_dispatch_cfgs.size();
125 _mut_cfg.mutable_dispatch_list = &_mut_dispatch_cfgs[0];
148 return state() == State::Finalized;