Skip to main content

GpuContext

Struct GpuContext 

Source
pub struct GpuContext {
    pub tuner: WorkgroupTuner,
    /* private fields */
}
Expand description

GPU context holding device and queue.

This is the main entry point for GPU operations. It manages the WGPU device and queue, and provides methods for creating buffers, pipelines, and executing compute shaders.

Fields§

§tuner: WorkgroupTuner

Workgroup sizes tuned to this adapter’s limits.

Implementations§

Source§

impl GpuContext

Source

pub async fn new() -> GpuResult<Self>

Create a new GPU context with default configuration.

§Errors

Returns an error if no suitable GPU adapter is found or device request fails.

Source

pub async fn with_config(config: GpuContextConfig) -> GpuResult<Self>

Create a new GPU context with custom configuration.

§Errors

Returns an error if no suitable GPU adapter is found or device request fails.

Source

pub fn device(&self) -> &Device

Get the WGPU device.

Source

pub fn queue(&self) -> &Queue

Get the WGPU queue.

Source

pub fn adapter(&self) -> &Adapter

Get the WGPU adapter.

Source

pub fn instance(&self) -> &Instance

Get the WGPU instance.

Source

pub fn adapter_info(&self) -> &AdapterInfo

Get adapter information.

Source

pub fn limits(&self) -> &Limits

Get device limits.

Source

pub fn backend(&self) -> Backend

Get the backend being used.

Source

pub fn supports_feature(&self, feature: Features) -> bool

Check if the device supports a specific feature.

Source

pub fn max_workgroup_size(&self) -> (u32, u32, u32)

Get maximum workgroup size for compute shaders.

Source

pub fn poll(&self, _wait: bool)

Poll the device for completed operations.

This should be called periodically to process GPU operations.

Source

pub fn spawn_poll_task(&self) -> JoinHandle<()>

Spawn a background thread that keeps the wgpu device polled.

This is an advanced helper intended for callers that run async GPU readbacks without a runtime that issues device polls automatically (e.g. bare pollster or custom executors).

The spawned thread calls device.poll(wgpu::PollType::Poll) in a tight loop with a 1 ms sleep between iterations. Call std::thread::JoinHandle::join when the thread is no longer needed (the caller is responsible for signalling termination through a shared flag or by dropping all Arc<Device> clones and letting the thread detect the closed handle).

In most tokio/async-std environments the runtime’s built-in submission loop makes this unnecessary.

Source

pub fn is_valid(&self) -> bool

Check if the device is still valid.

Source

pub fn with_tuner(self, tuner: WorkgroupTuner) -> Self

Override the workgroup tuner (useful in tests or for custom tuning).

Returns self so it can be chained in a builder-style pattern:

let gpu = GpuContext::new().await?.with_tuner(WorkgroupTuner::unlimited());
Source

pub fn is_device_lost(&self) -> bool

Returns true if the GPU device has been lost and operations will fail.

The flag is set atomically by the wgpu device-lost callback registered during GpuContext::new / GpuContext::with_config.

Source

pub fn check_device_lost(&self) -> GpuResult<()>

Checks whether the device has been lost and returns an error if so.

Call this before every queue.submit to short-circuit operations on a defunct device instead of generating silent GPU errors.

Source

pub fn pipeline_cache(&self) -> &SharedPipelineCache

Returns a reference to the shared pipeline cache.

The cache maps (shader_hash, entry_point, layout_tag) keys to previously compiled wgpu::ComputePipelines wrapped in Arc.

Kernel implementations can call PipelineCache::get_or_insert_with on the inner crate::pipeline_cache::PipelineCache to avoid recompiling the same WGSL shader on every kernel construction.

§Examples
use oxigdal_gpu::{GpuContext, pipeline_cache::PipelineCacheKey};

let cache = ctx.pipeline_cache();
if let Ok(mut guard) = cache.lock() {
    println!("cached pipelines: {}", guard.len());
}
Source

pub fn with_device_lost_flag(self, flag: Arc<AtomicBool>) -> Self

Replaces the internal device-lost flag with an externally-supplied one.

This builder method is intended for testing only — it allows a test to inject a shared Arc<AtomicBool> whose state it controls directly, exercising the check_device_lost / is_device_lost paths without requiring a real GPU device.

use std::sync::{Arc, atomic::{AtomicBool, Ordering}};
// NB: GpuContext::new() requires a GPU; this is conceptual.
// let ctx = ctx.with_device_lost_flag(Arc::new(AtomicBool::new(true)));
Source

pub async fn reinitialize(&self) -> GpuResult<GpuContext>

Attempts to recreate the GPU device on the same adapter.

This creates a fresh GpuContext via the same wgpu instance, selecting an adapter with matching properties to the one this context was built on. The old context must be dropped after calling this method; continuing to use it will only generate further device-lost errors.

§Errors

Returns an error if adapter enumeration fails or the device cannot be re-created (e.g., the GPU has been physically removed).

Trait Implementations§

Source§

impl Clone for GpuContext

Source§

fn clone(&self) -> GpuContext

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for GpuContext

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more