pub trait GpuDevice {
type Buffer;
const PRELUDE: &'static str;
// Required methods
fn name(&self) -> String;
fn max_threads_per_group(&self) -> u32;
fn alloc(&self, bytes: usize) -> Result<Self::Buffer>;
fn upload(
&self,
buffer: &Self::Buffer,
offset: usize,
data: &[u8],
) -> Result<()>;
fn download(
&self,
buffer: &Self::Buffer,
offset: usize,
out: &mut [u8],
) -> Result<()>;
fn compile(&mut self, source: &str, kernels: &[&str]) -> Result<()>;
fn launch(
&self,
kernel: usize,
grid: [u32; 3],
block: [u32; 3],
args: &[Arg<'_, Self::Buffer>],
) -> Result<()>;
fn sync(&self) -> Result<()>;
// Provided method
fn flush(&self) -> Result<()> { ... }
}Required Associated Constants§
Required Associated Types§
Required Methods§
Sourcefn max_threads_per_group(&self) -> u32
fn max_threads_per_group(&self) -> u32
The largest threadgroup (block) the compiled kernels may be launched with.
Sourcefn alloc(&self, bytes: usize) -> Result<Self::Buffer>
fn alloc(&self, bytes: usize) -> Result<Self::Buffer>
A zero-filled buffer of bytes bytes (at least 4).
Sourcefn upload(
&self,
buffer: &Self::Buffer,
offset: usize,
data: &[u8],
) -> Result<()>
fn upload( &self, buffer: &Self::Buffer, offset: usize, data: &[u8], ) -> Result<()>
Copies data into buffer at byte offset.
Sourcefn download(
&self,
buffer: &Self::Buffer,
offset: usize,
out: &mut [u8],
) -> Result<()>
fn download( &self, buffer: &Self::Buffer, offset: usize, out: &mut [u8], ) -> Result<()>
Copies out.len() bytes from buffer at byte offset, after every earlier launch completed.
Sourcefn compile(&mut self, source: &str, kernels: &[&str]) -> Result<()>
fn compile(&mut self, source: &str, kernels: &[&str]) -> Result<()>
Compiles source and loads kernels; later launches name a kernel by its index in kernels.
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".