@@ -366,16 +366,16 @@ void OpenCLPlatform::launch_kernel(DeviceId dev, const LaunchParams& launch_para
366366 auto kernel = load_kernel (dev, launch_params.file_name , launch_params.kernel_name );
367367
368368 // set up arguments
369- std::vector<cl_mem> kernel_structs (launch_params. num_args ) ;
369+ std::vector<cl_mem> kernel_structs;
370370 for (uint32_t i = 0 ; i < launch_params.num_args ; i++) {
371371 if (launch_params.args .types [i] == KernelArgType::Struct) {
372372 // create a buffer for each structure argument
373373 cl_int err = CL_SUCCESS;
374374 cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR;
375375 cl_mem struct_buf = clCreateBuffer (devices_[dev].ctx , flags, launch_params.args .sizes [i], launch_params.args .data [i], &err);
376376 CHECK_OPENCL (err, " clCreateBuffer()" );
377- kernel_structs[i] = struct_buf;
378- clSetKernelArg (kernel, i, sizeof (cl_mem), &kernel_structs[i] );
377+ kernel_structs. push_back ( struct_buf) ;
378+ clSetKernelArg (kernel, i, sizeof (cl_mem), &struct_buf );
379379 } else {
380380 #ifdef CL_VERSION_2_0
381381 if (launch_params.args .types [i] == KernelArgType::Ptr && devices_[dev].version_major == 2 ) {
@@ -421,11 +421,9 @@ void OpenCLPlatform::launch_kernel(DeviceId dev, const LaunchParams& launch_para
421421 dynamic_profile (dev, launch_params.file_name );
422422
423423 // release temporary buffers for struct arguments
424- for (uint32_t i = 0 ; i < launch_params.num_args ; i++) {
425- if (launch_params.args .types [i] == KernelArgType::Struct) {
426- cl_int err = clReleaseMemObject (kernel_structs[i]);
427- CHECK_OPENCL (err, " clReleaseMemObject()" );
428- }
424+ for (auto tmp : kernel_structs) {
425+ cl_int err = clReleaseMemObject (tmp);
426+ CHECK_OPENCL (err, " clReleaseMemObject()" );
429427 }
430428}
431429
0 commit comments