Struct screen_13::driver::ray_trace::RayTracePipeline
source · pub struct RayTracePipeline {
pub info: RayTracePipelineInfo,
/* 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: RayTracePipelineInfoInformation used to create this object.
Implementations
sourceimpl RayTracePipeline
impl RayTracePipeline
sourcepub 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>,
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);sourcepub fn group_handle(this: &Self, idx: usize) -> Result<&[u8], DriverError>
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.
Trait Implementations
sourceimpl Access for RayTracePipeline
impl Access for RayTracePipeline
sourceconst DEFAULT_READ: AccessType = AccessType::RayTracingShaderReadSampledImageOrUniformTexelBuffer
const DEFAULT_READ: AccessType = AccessType::RayTracingShaderReadSampledImageOrUniformTexelBuffer
AccessType for read operations, if not specified explicitly.sourceconst DEFAULT_WRITE: AccessType = AccessType::AnyShaderWrite
const DEFAULT_WRITE: AccessType = AccessType::AnyShaderWrite
AccessType for write operations, if not specified explicitly.