pub struct Gpu {
pub device: Device,
pub queue: Queue,
}Expand description
Handle to a GPU device
Fields§
§device: DeviceGPU device
queue: QueueGPU queue
Implementations§
Source§impl Gpu
impl Gpu
Sourcepub async fn init() -> Result<Gpu, InitError>
pub async fn init() -> Result<Gpu, InitError>
Returns a Gpu object with customized settings
Non-default settings are as follows:
- We request a
wgpu::PowerPreference::HighPerformanceadapter - We enable the
wgpu::Features::TIMESTAMP_QUERYfeature
This is a helper function for simplicity; more sophisticated systems will likely construct the adapter, device, and queue themselves.
Sourcepub fn read_buffer_for<T>(&self, buf: &FlexBuffer<T>) -> ReadBuffer<T>where
T: BufferTag,
pub fn read_buffer_for<T>(&self, buf: &FlexBuffer<T>) -> ReadBuffer<T>where
T: BufferTag,
Sourcepub fn read_buffer<T>(&self, name: &str) -> ReadBuffer<T>
pub fn read_buffer<T>(&self, name: &str) -> ReadBuffer<T>
Builds a new readable buffer
The buffer has an arbitrary starting size and will be resized when used
in copy.
If the target buffer is known, use
read_buffer_for to avoid this reallocation.
Sourcepub fn read_vec<T: BufferTag>(&self, buf: &FlexBuffer<T>) -> Vec<T::T>
pub fn read_vec<T: BufferTag>(&self, buf: &FlexBuffer<T>) -> Vec<T::T>
Helper function to read from a buffer to a Vec
Under the hood, this function simply calls
read_buffer_for,
copy, map, and
to_vec.
Note that this function allocates a GPU buffer; if the same source
buffer is being read repeatedly, it’s recommended to build the read
buffer once and then call copy, map, to_vec repeatedly.
Sourcepub fn copy<A>(&self, src: &FlexBuffer<A>, dst: &mut ReadBuffer<A>)where
A: BufferTag,
pub fn copy<A>(&self, src: &FlexBuffer<A>, dst: &mut ReadBuffer<A>)where
A: BufferTag,
Copies from a GPU-resident buffer to a host-mappable buffer
The host-mappable destination buffer is resized to fit the data.
Sourcepub fn encode_copy<A>(
&self,
src: &FlexBuffer<A>,
dst: &mut ReadBuffer<A>,
encoder: &mut CommandEncoder,
)where
A: BufferTag,
pub fn encode_copy<A>(
&self,
src: &FlexBuffer<A>,
dst: &mut ReadBuffer<A>,
encoder: &mut CommandEncoder,
)where
A: BufferTag,
Low-level command to submit a buffer copy to a command encoder
See copy for details
Sourcepub fn map<'a, T>(&self, image: &'a mut ReadBuffer<T>) -> MappedBuffer<'a, T>
pub fn map<'a, T>(&self, image: &'a mut ReadBuffer<T>) -> MappedBuffer<'a, T>
Blocking function to build a new mapped buffer
Sourcepub async fn map_async<'a, T>(
&self,
data: &'a mut ReadBuffer<T>,
) -> MappedBuffer<'a, T>
pub async fn map_async<'a, T>( &self, data: &'a mut ReadBuffer<T>, ) -> MappedBuffer<'a, T>
Async function to build a new mapped buffer
This can be called on either native or web platforms. On native
platforms, the single await is trivial (guaranteed to always be
ready); on the web, the mapping sends us back to the event loop until
it’s ready.
Sourcepub fn map_image<'a, T>(
&self,
data: &'a mut ReadBuffer<T>,
) -> MappedImage<'a, T>
pub fn map_image<'a, T>( &self, data: &'a mut ReadBuffer<T>, ) -> MappedImage<'a, T>
Blocking function to build a new mapped image
Sourcepub async fn map_image_async<'a, T>(
&self,
data: &'a mut ReadBuffer<T>,
) -> MappedImage<'a, T>
pub async fn map_image_async<'a, T>( &self, data: &'a mut ReadBuffer<T>, ) -> MappedImage<'a, T>
Async function to build a new mapped image
This can be called on either native or web platforms. On native
platforms, the single await is trivial (guaranteed to always be
ready); on the web, the mapping sends us back to the event loop until
it’s ready.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Gpu
impl !UnwindSafe for Gpu
impl Freeze for Gpu
impl Send for Gpu
impl Sync for Gpu
impl Unpin for Gpu
impl UnsafeUnpin for Gpu
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.