Struct ocl::builders::BufferCmd
[−]
[src]
#[must_use = "commands do nothing unless enqueued"]pub struct BufferCmd<'c, T> where
T: 'c, { /* fields omitted */ }
A buffer command builder used to enqueue reads, writes, fills, and copies.
Create one by using Buffer::cmd
or with shortcut methods such as
Buffer::read
and Buffer::write
.
Examples
// Copies one buffer to another:
src_buffer.cmd().copy(&dst_buffer, 0, dst_buffer.len()).enq().unwrap();
// Writes from a vector to an buffer, waiting on an event:
buffer.write(&src_vec).ewait(&event).enq().unwrap();
// Reads from a buffer into a vector, waiting on an event list and
// filling a new empty event:
buffer.read(&dst_vec).ewait(&event_list).enew(&empty_event).enq().unwrap();
// Reads without blocking:
buffer.cmd().read_async(&dst_vec).enew(&empty_event).enq().unwrap();
Methods
impl<'c, T> BufferCmd<'c, T> where
T: 'c + OclPrm,
[src]
T: 'c + OclPrm,
[UNSTABLE]: All methods still in a state of flux.
fn new(
queue: Option<&'c Queue>,
obj_core: &'c MemCore,
mem_len: usize
) -> BufferCmd<'c, T>
queue: Option<&'c Queue>,
obj_core: &'c MemCore,
mem_len: usize
) -> BufferCmd<'c, T>
Returns a new buffer command builder associated with with the
memory object obj_core
along with a default queue
and mem_len
(the length of the device side buffer).
fn read<'d, R>(self, dst_data: R) -> BufferReadCmd<'c, 'd, T> where
R: Into<ReadDst<'d, T>>,
R: Into<ReadDst<'d, T>>,
Specifies that this command will be a blocking read operation.
After calling this method, the blocking state of this command will
be locked to true and a call to ::block
will cause a panic.
Panics
The command operation kind must not have already been specified.
More Information
See SDK docs for more details.
unsafe fn read_async<'d>(
self,
dst_data: &'d mut [T]
) -> BufferReadCmd<'c, 'd, T>
self,
dst_data: &'d mut [T]
) -> BufferReadCmd<'c, 'd, T>
: Use '::read' with '::block(false)' for unsafe asynchronous reads.
Specifies that this command will be a non-blocking, asynchronous read operation. [DEPRICATED]
Sets the block mode to false automatically but it may still be freely
toggled back. If set back to true
this method call becomes equivalent
to calling ::read
.
Safety
Caller must ensure that the container referred to by dst_data
lives
until the call completes.
Panics
The command operation kind must not have already been specified
fn write<'d, W>(self, src_data: W) -> BufferWriteCmd<'c, 'd, T> where
W: Into<WriteSrc<'d, T>>,
W: Into<WriteSrc<'d, T>>,
Specifies that this command will be a write operation.
Panics
The command operation kind must not have already been specified
More Information
See SDK docs for more details.
fn map(self) -> BufferMapCmd<'c, T>
Specifies that this command will be a map operation.
If .block(..)
has been set it will be ignored. Non-blocking map
commands are enqueued using ::enq_async
.
Panics
The command operation kind must not have already been specified
More Information
See SDK docs for more details.
fn copy<'d, M>(
self,
dst_buffer: &'d M,
dst_offset: Option<usize>,
len: Option<usize>
) -> BufferCmd<'c, T> where
'd: 'c,
M: AsMem<T>,
self,
dst_buffer: &'d M,
dst_offset: Option<usize>,
len: Option<usize>
) -> BufferCmd<'c, T> where
'd: 'c,
M: AsMem<T>,
Specifies that this command will be a copy operation.
If .block(..)
has been set it will be ignored.
dst_offset
defaults to 0
, len
defaults to the full length of the
source buffer.
Errors
If this is a rectangular copy, dst_offset
and len
must be None.
Panics
The command operation kind must not have already been specified
More Information
See SDK docs for more details.
fn copy_to_image<'d>(
self,
image: &'d MemCore,
dst_origin: [usize; 3],
region: [usize; 3]
) -> BufferCmd<'c, T> where
'd: 'c,
self,
image: &'d MemCore,
dst_origin: [usize; 3],
region: [usize; 3]
) -> BufferCmd<'c, T> where
'd: 'c,
Specifies that this command will be a copy to image operation.
If .block(..)
has been set it will be ignored.
Panics
The command operation kind must not have already been specified
fn gl_acquire(self) -> BufferCmd<'c, T>
Specifies that this command will acquire a GL buffer.
If .block(..)
has been set it will be ignored.
Panics
The command operation kind must not have already been specified
fn gl_release(self) -> BufferCmd<'c, T>
Specifies that this command will release a GL buffer.
If .block(..)
has been set it will be ignored.
Panics
The command operation kind must not have already been specified
fn fill(self, pattern: T, len: Option<usize>) -> BufferCmd<'c, T>
Specifies that this command will be a fill operation.
If .block(..)
has been set it will be ignored.
pattern
is the vector or scalar value to repeat contiguously. len
is the overall size expressed in units of sizeof(T) If len
is None
,
the pattern will fill the entire buffer, otherwise, len
must be
divisible by sizeof(pattern
).
As an example if you want to fill the first 100 cl_float4
sized
elements of a buffer, pattern
would be a cl_float4
and len
would
be 400.
Panics
The command operation kind must not have already been specified
fn queue(self, queue: &'c Queue) -> BufferCmd<'c, T>
Specifies a queue to use for this call only.
unsafe fn block(self, block: bool) -> BufferCmd<'c, T>
Specifies whether or not to block the current thread until completion.
Ignored if this is not a read or write operation.
Default is block = true
.
Safety
When performing non-blocking reads or writes, the caller must ensure
that the data being read from or written to is not accessed improperly
until the command completes. Use events (Event::wait_for
) or the
command queue (Queue::finish
) to synchronize.
If possible, prefer instead to use ::map
with ::enq_async
for
optimal performance and data integrity.
fn offset(self, offset: usize) -> BufferCmd<'c, T>
Sets the linear offset for an operation.
Panics
The 'shape' may not have already been set to rectangular by the
::rect
function.
fn rect(
self,
src_origin: [usize; 3],
dst_origin: [usize; 3],
region: [usize; 3],
src_row_pitch_bytes: usize,
src_slc_pitch_bytes: usize,
dst_row_pitch_bytes: usize,
dst_slc_pitch_bytes: usize
) -> BufferCmd<'c, T>
self,
src_origin: [usize; 3],
dst_origin: [usize; 3],
region: [usize; 3],
src_row_pitch_bytes: usize,
src_slc_pitch_bytes: usize,
dst_row_pitch_bytes: usize,
dst_slc_pitch_bytes: usize
) -> BufferCmd<'c, T>
Specifies that this will be a rectangularly shaped operation (the default being linear).
Row and slice pitches must all be expressed in bytes.
Only valid for 'read', 'write', and 'copy' modes. Will error if used with any other mode.
fn ewait<'e, Ewl>(self, ewait: Ewl) -> BufferCmd<'c, T> where
'e: 'c,
Ewl: Into<ClWaitListPtrEnum<'e>>,
'e: 'c,
Ewl: Into<ClWaitListPtrEnum<'e>>,
Specifies a list of events to wait on before the command will run.
fn ewait_opt<'e, Ewl>(self, ewait: Option<Ewl>) -> BufferCmd<'c, T> where
'e: 'c,
Ewl: Into<ClWaitListPtrEnum<'e>>,
'e: 'c,
Ewl: Into<ClWaitListPtrEnum<'e>>,
Specifies a list of events to wait on before the command will run or
resets it to None
.
fn enew<'e, En>(self, enew: En) -> BufferCmd<'c, T> where
'e: 'c,
En: Into<ClNullEventPtrEnum<'e>>,
'e: 'c,
En: Into<ClNullEventPtrEnum<'e>>,
Specifies the destination for a new, optionally created event associated with this command.
fn enew_opt<'e, En>(self, enew: Option<En>) -> BufferCmd<'c, T> where
'e: 'c,
En: Into<ClNullEventPtrEnum<'e>>,
'e: 'c,
En: Into<ClNullEventPtrEnum<'e>>,
Specifies a destination for a new, optionally created event
associated with this command or resets it to None
.
fn enq(self) -> OclResult<()>
Enqueues this command.