pub struct RayTracePipeline {
    pub info: RayTracePipelineInfo,
    pub name: Option<String>,
    /* private fields */
}
Expand description

Smart pointer handle to a pipeline object.

Also contains information about the object.

§Deref behavior

RayTracePipeline automatically dereferences to vk::Pipeline (via the Deref trait), so you can call vk::Pipeline’s methods on a value of type RayTracePipeline. To avoid name clashes with vk::Pipeline’s methods, the methods of RayTracePipeline itself are associated functions, called using fully qualified syntax:

Fields§

§info: RayTracePipelineInfo

Information used to create this object.

§name: Option<String>

A descriptive name used in debugging messages.

Implementations§

source§

impl RayTracePipeline

source

pub fn create<S>( device: &Arc<Device>, info: impl Into<RayTracePipelineInfo>, shaders: impl IntoIterator<Item = S>, shader_groups: impl IntoIterator<Item = RayTraceShaderGroup> ) -> Result<Self, DriverError>
where S: Into<Shader>,

Creates a new ray trace pipeline on the given device.

The correct pipeline stages will be enabled based on the provided shaders. See Shader for details on all available stages.

The number and composition of the shader_groups parameter must match the actual shaders provided.

§Panics

If shader code is not a multiple of four bytes.

§Examples

Basic usage:

// shader code is raw SPIR-V code as bytes
let info = RayTracePipelineInfo::new().max_ray_recursion_depth(1);
let pipeline = RayTracePipeline::create(
    &device,
    info,
    [
        Shader::new_ray_gen(my_rgen_code.as_slice()),
        Shader::new_closest_hit(my_chit_code.as_slice()),
        Shader::new_miss(my_miss_code.as_slice()),
        Shader::new_miss(my_shadow_code.as_slice()),
    ],
    [
        RayTraceShaderGroup::new_general(0),
        RayTraceShaderGroup::new_triangles(1, None),
        RayTraceShaderGroup::new_general(2),
        RayTraceShaderGroup::new_general(3),
    ],
)?;

assert_ne!(*pipeline, vk::Pipeline::null());
assert_eq!(pipeline.info.max_ray_recursion_depth, 1);
source

pub fn group_handle(this: &Self, idx: usize) -> Result<&[u8], DriverError>

Function returning a handle to a shader group of this pipeline. This can be used to construct a sbt.

§Examples

See ray_trace.rs for a detail example which constructs a shader binding table buffer using this function.

source

pub fn group_stack_size( this: &Self, group: u32, group_shader: ShaderGroupShaderKHR ) -> DeviceSize

Query ray trace pipeline shader group shader stack size.

The return value is the ray tracing pipeline stack size in bytes for the specified shader as called from the specified shader group.

source

pub fn with_name(this: Self, name: impl Into<String>) -> Self

Sets the debugging name assigned to this pipeline.

Trait Implementations§

source§

impl Access for RayTracePipeline

source§

const DEFAULT_READ: AccessType = AccessType::RayTracingShaderReadSampledImageOrUniformTexelBuffer

The default AccessType for read operations, if not specified explicitly.
source§

const DEFAULT_WRITE: AccessType = AccessType::AnyShaderWrite

The default AccessType for write operations, if not specified explicitly.
source§

impl Debug for RayTracePipeline

source§

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

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

impl Deref for RayTracePipeline

§

type Target = Pipeline

The resulting type after dereferencing.
source§

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

Dereferences the value.
source§

impl Drop for RayTracePipeline

source§

fn drop(&mut self)

Executes the destructor for this type. 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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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, U> TryFrom<U> for T
where 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 T
where 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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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