Skip to main content

Graph

Struct Graph 

Source
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

Source

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

Source

pub fn new() -> Self

Constructs a default Graph.

Source

pub fn begin_cmd(&mut self) -> Command<'_>

Allocates and begins writing a new command.

Source

pub fn bind_resource<R>(&mut self, resource: R) -> R::Node
where 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.

Source

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.

Source

pub fn blit_image_region( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyImageNode>, filter: Filter, regions: impl AsRef<[ImageBlit]> + 'static + Send, ) -> &mut Self

Copies regions of an image, potentially performing format conversion.

Records a vkCmdBlitImage operation. The caller supplies the Vulkan blit regions and filter exactly as they will be passed to Vulkan.

Source

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.

Source

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.

Source

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.

Source

pub fn copy_buffer_region( &mut self, src: impl Into<AnyBufferNode>, dst: impl Into<AnyBufferNode>, regions: impl AsRef<[BufferCopy]> + 'static + Send, ) -> &mut Self

Copies data between buffer regions.

Records a vkCmdCopyBuffer operation. The caller supplies the Vulkan copy regions exactly as they will be passed to Vulkan.

Source

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.

Source

pub fn copy_buffer_to_image_region( &mut self, src: impl Into<AnyBufferNode>, dst: impl Into<AnyImageNode>, regions: impl AsRef<[BufferImageCopy]> + 'static + Send, ) -> &mut Self

Copies data from a buffer into image regions.

Records a vkCmdCopyBufferToImage operation. The caller supplies the Vulkan copy regions exactly as they will be passed to Vulkan.

Source

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.

Source

pub fn copy_image_region( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyImageNode>, regions: impl AsRef<[ImageCopy]> + 'static + Send, ) -> &mut Self

Copies data between image regions.

Records a vkCmdCopyImage operation. The caller supplies the Vulkan copy regions exactly as they will be passed to Vulkan.

Source

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.

Source

pub fn copy_image_to_buffer_region( &mut self, src: impl Into<AnyImageNode>, dst: impl Into<AnyBufferNode>, regions: impl AsRef<[BufferImageCopy]> + 'static + Send, ) -> &mut Self

Copies image region data into a buffer.

Records a vkCmdCopyImageToBuffer operation. The caller supplies the Vulkan copy regions exactly as they will be passed to Vulkan.

Source

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.

Source

pub fn finalize(self) -> Submission

Finalizes the graph and provides an object with functions for submitting the resulting commands.

Source

pub fn resource<N>(&self, resource_node: N) -> &N::Resource
where 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 BufferNode and ImageNode return the exact stored handle type, such as &Arc<Buffer> or &Arc<Image>.
  • Erased nodes such as AnyBufferNode and AnyImageNode return a borrow of the underlying resource, such as &Buffer or &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.

Source

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.

Trait Implementations§

Source§

impl Debug for Graph

Source§

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

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

impl Default for Graph

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Graph

§

impl !Sync for Graph

§

impl !UnwindSafe for Graph

§

impl Freeze for Graph

§

impl Send for Graph

§

impl Unpin for Graph

§

impl UnsafeUnpin for Graph

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, 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.