pub struct Graph { /* private fields */ }Expand description
A composable graph of Vulkan command buffer operations.
Graph instances are intended for one-time use.
The design of this code originated with a combination of
PassBuilder
and
graph.cpp.
Implementations§
Source§impl Graph
impl Graph
Sourcepub fn insert_cmd_stream<'a, A>(
&'a mut self,
stream: &'a CommandStream<A>,
) -> CommandStreamRun<'a, A>
pub fn insert_cmd_stream<'a, A>( &'a mut self, stream: &'a CommandStream<A>, ) -> CommandStreamRun<'a, A>
Inserts a command stream into this graph.
Prepared streams reduce repeated preparation work, but insertion still has argument binding, dependency reconciliation, scheduling, and recording costs.
Source§impl Graph
impl Graph
Sourcepub fn builder() -> GraphBuilder
pub fn builder() -> GraphBuilder
Creates an empty graph builder.
Sourcepub fn into_builder(self) -> GraphBuilder
pub fn into_builder(self) -> GraphBuilder
Converts this graph into a builder.
Sourcepub fn bind_resource<R>(&mut self, resource: R) -> R::Nodewhere
R: Resource,
pub fn bind_resource<R>(&mut self, resource: R) -> R::Nodewhere
R: Resource,
Binds a Vulkan buffer, image, or acceleration structure resource to this graph.
Bound resource nodes may be used in commands for shader pipeline operations and other general functions.
Sourcepub fn blit_image(
&mut self,
src: impl Into<AnyImageNode>,
dst: impl Into<AnyImageNode>,
filter: Filter,
) -> &mut Self
pub fn blit_image( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyImageNode>, filter: Filter, ) -> &mut Self
Copies an image, potentially performing format conversion.
Records a vkCmdBlitImage operation covering the full extent of the source and
destination images.
Sourcepub fn clear_color_image(
&mut self,
image: impl Into<AnyImageNode>,
color: impl Into<ClearColorValue>,
) -> &mut Self
pub fn clear_color_image( &mut self, image: impl Into<AnyImageNode>, color: impl Into<ClearColorValue>, ) -> &mut Self
Clears a color image.
Records a vkCmdClearColorImage operation for the full image subresource range described
by the image’s ImageInfo.
Sourcepub fn clear_depth_stencil_image(
&mut self,
image: impl Into<AnyImageNode>,
depth: f32,
stencil: u32,
) -> &mut Self
pub fn clear_depth_stencil_image( &mut self, image: impl Into<AnyImageNode>, depth: f32, stencil: u32, ) -> &mut Self
Clears a depth/stencil image.
Records a vkCmdClearDepthStencilImage operation for the full image subresource range
described by the image’s ImageInfo.
Sourcepub fn copy_buffer(
&mut self,
src: impl Into<AnyBufferNode>,
dst: impl Into<AnyBufferNode>,
) -> &mut Self
pub fn copy_buffer( &mut self, src: impl Into<AnyBufferNode>, dst: impl Into<AnyBufferNode>, ) -> &mut Self
Copies data between buffers.
Records a vkCmdCopyBuffer operation covering the common size of the source and
destination buffers.
Sourcepub fn copy_buffer_to_image(
&mut self,
src: impl Into<AnyBufferNode>,
dst: impl Into<AnyImageNode>,
) -> &mut Self
pub fn copy_buffer_to_image( &mut self, src: impl Into<AnyBufferNode>, dst: impl Into<AnyImageNode>, ) -> &mut Self
Copies data from a buffer into an image.
Records a vkCmdCopyBufferToImage operation covering the full destination image.
Sourcepub fn copy_image(
&mut self,
src: impl Into<AnyImageNode>,
dst: impl Into<AnyImageNode>,
) -> &mut Self
pub fn copy_image( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyImageNode>, ) -> &mut Self
Copies all layers of a source image to a destination image.
Records a vkCmdCopyImage operation covering the common extent of the source and
destination images.
Sourcepub fn copy_image_to_buffer(
&mut self,
src: impl Into<AnyImageNode>,
dst: impl Into<AnyBufferNode>,
) -> &mut Self
pub fn copy_image_to_buffer( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyBufferNode>, ) -> &mut Self
Copies image data into a buffer.
Records a vkCmdCopyImageToBuffer operation covering the full source image.
Sourcepub fn fill_buffer(
&mut self,
buffer: impl Into<AnyBufferNode>,
region: Range<DeviceSize>,
data: u32,
) -> &mut Self
pub fn fill_buffer( &mut self, buffer: impl Into<AnyBufferNode>, region: Range<DeviceSize>, data: u32, ) -> &mut Self
Fills a region of a buffer with a fixed value.
Records a vkCmdFillBuffer operation.
Sourcepub fn finalize(self) -> Submission
pub fn finalize(self) -> Submission
Finalizes the graph and provides an object with functions for submitting the resulting commands.
Sourcepub fn resource<N>(&self, resource_node: N) -> &N::Resourcewhere
N: Node,
pub fn resource<N>(&self, resource_node: N) -> &N::Resourcewhere
N: Node,
Returns a borrow of the Vulkan resource represented by resource_node.
The exact return type depends on the node type:
- Concrete nodes such as
BufferNodeandImageNodereturn the exact stored handle type, such as&Arc<Buffer>or&Arc<Image>. - Erased nodes such as
AnyBufferNodeandAnyImageNodereturn a borrow of the underlying resource, such as&Bufferor&Image.
This distinction lets erased node enums unify owned, leased, and swapchain-backed resources behind a single resource view.
Node ownership is validated here when the checked feature is enabled. With checked
disabled, callers must ensure resource_node came from this graph.
Sourcepub fn update_buffer(
&mut self,
buffer: impl Into<AnyBufferNode>,
offset: DeviceSize,
data: impl AsRef<[u8]> + 'static + Send,
) -> &mut Self
pub fn update_buffer( &mut self, buffer: impl Into<AnyBufferNode>, offset: DeviceSize, data: impl AsRef<[u8]> + 'static + Send, ) -> &mut Self
Records a vkCmdUpdateBuffer
command.
Vulkan requires data to be at most 65536 bytes.
These constraints are validated by the Vulkan Validation Layer (VVL) when it is active.
When the checked feature is enabled, vk-graph also validates the data size and bounds
before recording the command.