pub struct Resolver { /* private fields */ }
Expand description
A structure which can read and execute render graphs. This pattern was derived from:
http://themaister.net/blog/2017/08/15/render-graphs-and-vulkan-a-deep-dive/ https://github.com/EmbarkStudios/kajiya
Implementations§
source§impl Resolver
impl Resolver
sourcepub fn is_resolved(&self) -> bool
pub fn is_resolved(&self) -> bool
Returns true
when all recorded passes have been submitted to a driver command buffer.
A fully-resolved graph contains no additional work and may be discarded, although doing so will stall the GPU while the fences are waited on. It is preferrable to wait a few frame so that the fences will have already been signalled.
sourcepub fn node_pipeline_stages(&self, node: impl Node) -> PipelineStageFlags
pub fn node_pipeline_stages(&self, node: impl Node) -> PipelineStageFlags
Returns the stages that process the given node.
Note that this value must be retrieved before resolving a node as there will be no data left to inspect afterwards!
sourcepub fn record_node_dependencies<P>(
&mut self,
pool: &mut P,
cmd_buf: &mut CommandBuffer,
node: impl Node
) -> Result<(), DriverError>
pub fn record_node_dependencies<P>( &mut self, pool: &mut P, cmd_buf: &mut CommandBuffer, node: impl Node ) -> Result<(), DriverError>
Records any pending render graph passes that are required by the given node, but does not record any passes that actually contain the given node.
As a side effect, the graph is optimized for the given node. Future calls may further optimize the graph, but only on top of the existing optimizations. This only matters if you are pulling multiple images out and you care - in that case pull the “most important” image first.
sourcepub fn record_node<P>(
&mut self,
pool: &mut P,
cmd_buf: &mut CommandBuffer,
node: impl Node
) -> Result<(), DriverError>
pub fn record_node<P>( &mut self, pool: &mut P, cmd_buf: &mut CommandBuffer, node: impl Node ) -> Result<(), DriverError>
Records any pending render graph passes that the given node requires.
sourcepub fn record_unscheduled_passes<P>(
&mut self,
pool: &mut P,
cmd_buf: &mut CommandBuffer
) -> Result<(), DriverError>
pub fn record_unscheduled_passes<P>( &mut self, pool: &mut P, cmd_buf: &mut CommandBuffer ) -> Result<(), DriverError>
Records any pending render graph passes that have not been previously scheduled.
sourcepub fn submit<P>(
self,
pool: &mut P,
queue_family_index: usize,
queue_index: usize
) -> Result<Lease<CommandBuffer>, DriverError>where
P: Pool<CommandBufferInfo, CommandBuffer> + Pool<DescriptorPoolInfo, DescriptorPool> + Pool<RenderPassInfo, RenderPass>,
pub fn submit<P>(
self,
pool: &mut P,
queue_family_index: usize,
queue_index: usize
) -> Result<Lease<CommandBuffer>, DriverError>where
P: Pool<CommandBufferInfo, CommandBuffer> + Pool<DescriptorPoolInfo, DescriptorPool> + Pool<RenderPassInfo, RenderPass>,
Submits the remaining commands stored in this instance.
Trait Implementations§
source§impl Unbind<Resolver, SwapchainImage> for SwapchainImageNode
impl Unbind<Resolver, SwapchainImage> for SwapchainImageNode
Auto Trait Implementations§
impl !RefUnwindSafe for Resolver
impl Send for Resolver
impl !Sync for Resolver
impl Unpin for Resolver
impl !UnwindSafe for Resolver
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.