opencl3 0.10.0

A Rust implementation of the Khronos OpenCL 3.0 API and extensions.
Documentation
# Releases

## Version 0.10.0 (2024-12-21)

### Bug fixes

* Issue [#69]https://github.com/kenba/opencl3/issues/69 Unsound issue in SvmVec.

### New Features

* Issue [#70]https://github.com/kenba/opencl3/issues/70 UpdSupport dynamic linking.


## Version 0.9.5 (2023-12-22)

### New Features

* Issue [#64]https://github.com/kenba/opencl3/issues/64 Update with new features in OpenCL-Headers repo.

## Version 0.9.4 (2023-11-05)

### New Features

* Issue [#64]https://github.com/kenba/opencl3/issues/64 Update with new functions in OpenCL-Headers repo.

## Version 0.9.3 (2023-05-11)

### New Features

* PR [#60]https://github.com/kenba/opencl3/pull/60 Support querying PCIE information for Intel devices.

## Version 0.9.2 (2022-12-30)

### Bug fixes

* Issue [#58]https://github.com/kenba/opencl3/issues/58 Compile failure due to unmarked unsafe function call in program.rs.

## Version 0.9.1 (2022-09-20)

### Bug fixes

* PR [#54]https://github.com/kenba/opencl3/pull/54 Unshadow device re-exports.

### New Features

* Issue [#55]https://github.com/kenba/opencl3/issues/55 Add Khronos `cl_khr_command_buffer_mutable_dispatch` extension.

## Version 0.9.0 (2022-09-10)

### Breaking Changes

* Issue [#51]https://github.com/kenba/opencl3/issues/51 Undefined behaviour when using underlying OpenCL pointers without any unsafe.
* Issue [#52]https://github.com/kenba/opencl3/issues/52 `CL_MEM_USE_HOST_PTR` can result in undefined behaviour.

### New Features

* PR [#53]https://github.com/kenba/opencl3/pull/53 added `sync` for all threadsafe OpenCL objects.

## Version 0.8.1 (2022-07-23)

### Bug fixes

* Issue [#49]https://github.com/kenba/opencl3/issues/49 Better Error messages for
`ExecuteKernel::set_arg`.

### New Features

* Update for OpenCL extension `cl_ext_image_requirements_info`.

* PR [#50]https://github.com/kenba/opencl3/issues/50 Introduce `track_caller` for panicing methods of `ExecuteKernel`.

## Version 0.8.0 (2022-05-02)

### Breaking Changes

* Issue [#47]https://github.com/kenba/opencl3/issues/47 Base `opencl3` on [opencl-sys]https://crates.io/crates/opencl-sys crate.
* Issue [#48]https://github.com/kenba/opencl3/issues/48 Put deprecation notices behind conditional attributes.

## Version 0.7.0 (2022-04-10)

### Breaking Changes

* Transition to Rust 2021 Edition.

## Version 0.6.3 (2021-12-30)

### New Features

* Issue [#44]https://github.com/kenba/opencl3/issues/44 Add provisional command-buffer extension. See: [cl_khr_command_buffer]https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#cl_khr_command_buffer.

## Version 0.6.2 (2021-12-19)

### New Features

* Issue [#37]https://github.com/kenba/opencl3/issues/37 Implement DeserializeSeed for ExtendSvmVec to enable `serde` to deserialize directly into an `SvmVec`.

### Bug fixes

* Issue [#45]https://github.com/kenba/opencl3/issues/45 Examples and tests have `CL_MEM_READ_ONLY` and `CL_MEM_WRITE_ONLY` swapped over.

## Version 0.6.1 (2021-11-12)

### New Features

* Issue [#43]https://github.com/kenba/opencl3/issues/43 Update for new OpenCL extensions: `cl_khr_external_memory`, `cl_khr_external_semaphore` and `cl_khr_semaphore`.

## Version 0.6.0 (2021-10-16)

### Breaking Changes

* Issue [#41]https://github.com/kenba/opencl3/issues/41 Remove cl3 Info enums to support new OpenCL versions and extensions.
* Add UUID and LUID types. See cl3 Issue [#13]https://github.com/kenba/cl3/issues/13 Remove Info enums to support new OpenCL versions and extensions.
* Remove example from README.md.

## Version 0.5.3 (2021-10-10)

### New Features

* Issue [#38]https://github.com/kenba/opencl3/issues/38 Add SVM fine grain system support.
* Issue [#40]https://github.com/kenba/opencl3/issues/40 Replace all calls to `to_string` with `from` or `into`.
* Issue [#42]https://github.com/kenba/opencl3/issues/42 add `From` traits.
* Add `get_all_devices` function.

## Version 0.5.2 (2021-09-19)

```toml
[dependencies]
libc = "0.2"
cl3 = { version = "0.4", default-features = false }
serde = { version = "1.0", optional = true }
```

### New Features

* Issue [#39]https://github.com/kenba/opencl3/issues/39 Update for latest OpenCL-Headers.
* Add CONTRIBUTING and CODE_OF_CONDUCT documents.

## Version 0.5.1 (2021-09-17)

```toml
[dependencies]
libc = "0.2"
cl3 = { version = "0.4.2", default-features = false }
serde = { version = "1.0", optional = true }
```

### New Features

* Issue [#37]https://github.com/kenba/opencl3/issues/37 Implement Serde's Serialize, Deserialize for SvmVec.

### Bug fixes

* Issue [#32]https://github.com/kenba/opencl3/issues/32 Example from readme has zero output on GTX 1060 Max-Q.
* Issue [#35]https://github.com/kenba/opencl3/issues/35 Superfluous/Misleading generic parameter in `ExecuteKernel::set_arg_local_buffer`.

## Version 0.5.0 (2021-09-12)

### Breaking Changes

* Improve `SVM` interface and documentation.
* Remove svm_capabilities parameter from `SvmVec` methods.

### Bug fixes

* Issue [#33]https://github.com/kenba/opencl3/issues/33 Coarse-grained SVM has to be mapped before usage!

## Version 0.4.1 (2021-08-21)

Depends on:  
`cl3 = { version = "0.4.2", default-features = false }`

### New Features

* Issue [#30]https://github.com/kenba/opencl3/issues/30 opencl3 cannot be compiled with OpenCl 1.2 features only.

## Version 0.4.0 (2021-08-20)

Depends on `cl3` = "0.4.2".

### Breaking Changes

* Issue [#26]https://github.com/kenba/opencl3/issues/26 Should `CommandQueue.html::enqueue_write_buffer` take a mutable buffer reference.
* PR [#27]https://github.com/kenba/opencl3/pull/27 Make mutability explicit.

### New Features

* Issue [#25]https://github.com/kenba/opencl3/issues/25 Using `set_event_callback`.

## Version 0.3.1 (2021-08-06)

Depends on `cl3` = "0.4.1".

### New Features

* Add Device method for `cl_khr_integer_dot_product` extension.

## Version 0.3.0 (2021-07-10)

### Breaking Changes

* Issue [#21]https://github.com/kenba/opencl3/issues/21 `Device::available()` should return a boolean.
* PR [#22]https://github.com/kenba/opencl3/pull/22 Return booleans for device information where applicable.
* Issue [#24]https://github.com/kenba/opencl3/issues/24 Use `bool` instead of `cl_bool`.
* Use CL_BLOCKING and CL_NON_BLOCKING in enqueue calls.

## Version 0.2.4 (2021-07-03)

### New Features

* Issue [#18]https://github.com/kenba/opencl3/issues/18 Return UUID as array.
* PR [#19]https://github.com/kenba/opencl3/pull/19 Export sizes of UUID and LUID.

### Bug fixes

* Issue [#20]https://github.com/kenba/opencl3/issues/20 Restore `c_void` to program.rs.

## Version 0.2.3 (2021-05-30)

Depends on `cl3` = "0.4.0".

### New Features

* Issue [#15]https://github.com/kenba/opencl3/issues/15 It's safe to implement `Send` for most of the types.
* PR [#16]https://github.com/kenba/opencl3/pull/16 Implement Send for most of the types.
* PR [#17]https://github.com/kenba/opencl3/pull/17 Implement Send for some of the types.

## Version 0.2.2 (2021-05-22)

Depends on `cl3` = "0.3.1".

### New Features

* Issue [#13]https://github.com/kenba/opencl3/issues/13 Higher level create_sub_buffer call.
* Issue [#14]https://github.com/kenba/opencl3/issues/14 Adding Debug derives.
* Add OpenCL `cl_ext.h` functions.
* Add `Direct3D` extension methods.
* Add feature `cl_apple_setmemobjectdestructor` for `cl3`.

## Version 0.2.1 (2021-05-16)

Depends on `cl3` = "0.3".

### New Features

* Add extension `device_info` values.
* Add `OpenGL` extension functions.
* Add `OpenGL ES` extension functions.

## Version 0.2.0 (2021-04-18)

Depends on `cl3` = "0.2".

### Breaking Changes

* Issue [#10]https://github.com/kenba/opencl3/issues/10 Change the API to use String instead of ffi::CString.
* Change `set_wait_event` to take `Event` reference.

### New Features

* Issue [#9]https://github.com/kenba/opencl3/issues/9 Support running multiple instances of the same kernel simultaneously.
* Issue [#12]https://github.com/kenba/opencl3/issues/12 Improve OpenCL error handling.
* Add `from_device_type` method for `Context`.
* Add `ClMem` trait object.
* Add `CommandExecutionStatus` and `EventCommandType`.

## Version 0.1.4 (2021-03-26)

### Changes

* PR [#4]https://github.com/kenba/opencl3/pull/4 Implement Clone for CommandQueue
* Issue [#5]https://github.com/kenba/opencl3/issues/5 Consider replacing unwrap with expect for error handling.
* PR [#6]https://github.com/kenba/opencl3/pull/6 Make types Send and Sync where applicable.
* PR [#7]https://github.com/kenba/opencl3/pull/7 Implement Clone for most of the types.
* Issue [#8]https://github.com/kenba/opencl3/issues/8 Retrieving a program build log might be impossible.
* PR [#10]https://github.com/kenba/opencl3/pull/10 Replace calls to to_str with to_string for issue [#10]https://github.com/kenba/opencl3/issues/10.

## Version 0.1.3 (2021-01-16)

### Changes

* PR [#1]https://github.com/kenba/opencl3/pull/1 Add Buffer type field as PhantomData.
* Issue [#2]https://github.com/kenba/opencl3/issues/2 Consider adding PhantomData to Image and Pipe memory objects.
* PR [#3]https://github.com/kenba/opencl3/pull/3 Remove Buffer cast method.
* Remove unnecessary templates from methods.

## Version 0.1.2 (2021-01-12)

### Changes

* Remove `event_wait_list` from the `enqueue_nd_range` method.
* Add `wait` method to `event`.
* Add `opencl2_kernel_test.rs`.
* Add example to README.
* Don't raise error in `integration_test` if device is not SVM capable

## Version 0.1.1 (2021-01-04)

### Bug fixes

* Fix build on OpenCL 2.0 ICD.
* Fix integration tests on Intel Skylake.
* Get the max_work_item_dimensions from the device CommandQueue.

## Version 0.1.0 (2020-12-31)

Depends on `cl3` = "0.1".

### Features

* OpenCL objects implemented by Rust structs that manage their resources by implementing the `Drop` trait to perform [RAII]https://doc.rust-lang.org/rust-by-example/scope/raii.html, e.g. Context, Program, CommandQueue, etc.
* `safe` Rust functions that call OpenCL C API functions and return Rust Result types.
* A `Vec` implemented using OpenCL Shared Virtual Memory (SVM), see [svm]src/svm.rs.