Struct blaze_rs::context::Global

source ·
pub struct Global;
Expand description

Global Context

Inspired by Rust’s Allocator syntax, Global is a ZST that will be treated as the default context for most operations requiring of an OpenCL context or command queue.

Like with the Allocator API, you can specify a global context with the #[global_context] macro.

use blaze_rs::prelude::*;

#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();

#[test]
fn with_global () -> Result<()> {
    // Initialize two buffers
    let buffer : Buffer<i32> = Buffer::new(&[1, 2, 3, 4, 5], MemAccess::READ_ONLY, false)?;
    let buffer2 : Buffer<i32> = Buffer::new(&[5, 4, 3, 2, 1], MemAccess::WRITE_ONLY, false)?;

    // Read the full contents of both buffers
    let read = buffer.read_blocking(.., None)?;
    let read2 = buffer2.read_blocking(.., Some(core::slice::from_ref(&read)))?;

    assert_eq!(read.as_slice(), &[5, 4, 3, 2, 1]);
    assert_eq!(read2.as_slice(), &[1, 2, 3, 4, 5]);
    Ok(())
}

#[test]
fn without_global () -> Result<()> {
    // Initialize a context.
    let ctx = SimpleContext::default()?;
    
    // Initialize two buffers
    let buffer : Buffer<i32, &SimpleContext> = Buffer::new_in(&ctx, &[1, 2, 3, 4, 5], MemAccess::READ_ONLY, false)?;
    let buffer2 : Buffer<i32, &SimpleContext> = Buffer::new_in(&ctx, &[5, 4, 3, 2, 1], MemAccess::WRITE_ONLY, false)?;

    // Read the full contents of both buffers
    let read = buffer.read_blocking(.., None)?;
    let read2 = buffer2.read_blocking(.., Some(core::slice::from_ref(&read)))?;

    assert_eq!(read.as_slice(), &[5, 4, 3, 2, 1]);
    assert_eq!(read2.as_slice(), &[1, 2, 3, 4, 5]);
    Ok(())
}

Note that unlike with the Allocator API, no default global context is set, so you’ll need to specify one explicitly if you want to use it.

Implementations§

source§

impl Global

source

pub fn get() -> &'static Global

Returns a reference to a static global allocator. This is a convenience function for when needing to pass a reference to a Context.

Methods from Deref<Target = RawContext>§

source

pub fn id(&self) -> cl_context

source

pub unsafe fn retain(&self) -> Result<()>

source

pub fn reference_count(&self) -> Result<u32>

Return the context reference count.

source

pub fn num_devices(&self) -> Result<u32>

Return the number of devices in context.

source

pub fn devices(&self) -> Result<Vec<RawDevice>>

Return the list of devices and sub-devices in context.

source

pub fn greatest_common_version(&self) -> Result<Version>

Returns the greatest common OpenCL version of this context’s devices.

source

pub fn properties(&self) -> Result<ContextProperties>

Return the properties argument specified in creation

source

pub fn on_destruct(&self, f: impl 'static + FnOnce() + Send) -> Result<()>

Available on crate feature cl3 only.
source

pub unsafe fn on_destruct_raw( &self, f: unsafe extern "C" fn(context: cl_context, user_data: *mut c_void), user_data: *mut c_void ) -> Result<()>

Available on crate feature cl3 only.

Trait Implementations§

source§

impl Clone for Global

source§

fn clone(&self) -> Global

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Context for Global

source§

fn next_queue(&self) -> &CommandQueue

Returns the next CommandQueue, as per context implementation
source§

fn as_raw(&self) -> &RawContext

Returns a reference to the underlying RawContext
source§

fn queues(&self) -> &[CommandQueue]

Returns a slice with all of the Context’s command queues
source§

fn flush_all(&self) -> Result<()>

Flushes all the CommandQueues in the context.
source§

fn finish_all(&self) -> Result<()>

Finishes all the CommandQueues in the context.
source§

impl Debug for Global

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Global

source§

fn default() -> Global

Returns the “default value” for a type. Read more
source§

impl Deref for Global

§

type Target = RawContext

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Copy for Global

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.