Struct vulkano::command_buffer::synced::SyncCommandBufferBuilder [−][src]
pub struct SyncCommandBufferBuilder { /* fields omitted */ }
Expand description
Wrapper around UnsafeCommandBufferBuilder
that handles synchronization for you.
Each method of the UnsafeCommandBufferBuilder
has an equivalent in this wrapper, except
for pipeline_layout
which is automatically handled. This wrapper automatically builds
pipeline barriers, keeps used resources alive and implements the CommandBuffer
trait.
Since the implementation needs to cache commands in a Vec
, most methods have additional
Send + Sync + 'static
trait requirements on their generics.
If this builder finds out that a command isn’t valid because of synchronization reasons (eg. trying to copy from a buffer to an image which share the same memory), then an error is returned. Note that all methods are still unsafe, because this builder doesn’t check the validity of the commands except for synchronization purposes. The builder may panic if you pass invalid commands.
Implementations
pub unsafe fn new<F>(
pool_alloc: &UnsafeCommandPoolAlloc,
level: CommandBufferLevel<F>,
usage: CommandBufferUsage
) -> Result<SyncCommandBufferBuilder, OomError> where
F: FramebufferAbstract,
pub unsafe fn new<F>(
pool_alloc: &UnsafeCommandPoolAlloc,
level: CommandBufferLevel<F>,
usage: CommandBufferUsage
) -> Result<SyncCommandBufferBuilder, OomError> where
F: FramebufferAbstract,
Builds a new SyncCommandBufferBuilder
. The parameters are the same as the
UnsafeCommandBufferBuilder::new
function.
Safety
See UnsafeCommandBufferBuilder::new()
.
pub unsafe fn from_unsafe_cmd(
cmd: UnsafeCommandBufferBuilder,
is_secondary: bool,
inside_render_pass: bool
) -> SyncCommandBufferBuilder
pub unsafe fn from_unsafe_cmd(
cmd: UnsafeCommandBufferBuilder,
is_secondary: bool,
inside_render_pass: bool
) -> SyncCommandBufferBuilder
Builds a SyncCommandBufferBuilder
from an existing UnsafeCommandBufferBuilder
.
Safety
See UnsafeCommandBufferBuilder::new()
.
In addition to this, the UnsafeCommandBufferBuilder
should be empty. If it isn’t, then
you must take into account the fact that the SyncCommandBufferBuilder
won’t be aware of
any existing resource usage.
Builds the command buffer and turns it into a SyncCommandBuffer
.
pub unsafe fn begin_query(
&mut self,
query_pool: Arc<QueryPool>,
query: u32,
flags: QueryControlFlags
)
pub unsafe fn begin_query(
&mut self,
query_pool: Arc<QueryPool>,
query: u32,
flags: QueryControlFlags
)
Calls vkCmdBeginQuery
on the builder.
pub unsafe fn begin_render_pass<F, I>(
&mut self,
framebuffer: F,
subpass_contents: SubpassContents,
clear_values: I
) -> Result<(), SyncCommandBufferBuilderError> where
F: FramebufferAbstract + Send + Sync + 'static,
I: Iterator<Item = ClearValue> + Send + Sync + 'static,
pub unsafe fn begin_render_pass<F, I>(
&mut self,
framebuffer: F,
subpass_contents: SubpassContents,
clear_values: I
) -> Result<(), SyncCommandBufferBuilderError> where
F: FramebufferAbstract + Send + Sync + 'static,
I: Iterator<Item = ClearValue> + Send + Sync + 'static,
Calls vkBeginRenderPass
on the builder.
pub unsafe fn bind_index_buffer<B>(
&mut self,
buffer: B,
index_ty: IndexType
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
pub unsafe fn bind_index_buffer<B>(
&mut self,
buffer: B,
index_ty: IndexType
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
Calls vkCmdBindIndexBuffer
on the builder.
pub unsafe fn bind_pipeline_graphics<Gp>(&mut self, pipeline: Gp) where
Gp: GraphicsPipelineAbstract + Send + Sync + 'static,
pub unsafe fn bind_pipeline_graphics<Gp>(&mut self, pipeline: Gp) where
Gp: GraphicsPipelineAbstract + Send + Sync + 'static,
Calls vkCmdBindPipeline
on the builder with a graphics pipeline.
pub unsafe fn bind_pipeline_compute<Cp>(&mut self, pipeline: Cp) where
Cp: ComputePipelineAbstract + Send + Sync + 'static,
pub unsafe fn bind_pipeline_compute<Cp>(&mut self, pipeline: Cp) where
Cp: ComputePipelineAbstract + Send + Sync + 'static,
Calls vkCmdBindPipeline
on the builder with a compute pipeline.
Starts the process of binding descriptor sets. Returns an intermediate struct which can be used to add the sets.
Starts the process of binding vertex buffers. Returns an intermediate struct which can be used to add the buffers.
pub unsafe fn copy_image<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
destination_layout: ImageLayout,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderImageCopy> + Send + Sync + 'static,
pub unsafe fn copy_image<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
destination_layout: ImageLayout,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderImageCopy> + Send + Sync + 'static,
Calls vkCmdCopyImage
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn blit_image<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
destination_layout: ImageLayout,
regions: R,
filter: Filter
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderImageBlit> + Send + Sync + 'static,
pub unsafe fn blit_image<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
destination_layout: ImageLayout,
regions: R,
filter: Filter
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderImageBlit> + Send + Sync + 'static,
Calls vkCmdBlitImage
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn clear_color_image<I, R>(
&mut self,
image: I,
layout: ImageLayout,
color: ClearValue,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
I: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderColorImageClear> + Send + Sync + 'static,
pub unsafe fn clear_color_image<I, R>(
&mut self,
image: I,
layout: ImageLayout,
color: ClearValue,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
I: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderColorImageClear> + Send + Sync + 'static,
Calls vkCmdClearColorImage
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn copy_buffer<S, D, R>(
&mut self,
source: S,
destination: D,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: BufferAccess + Send + Sync + 'static,
D: BufferAccess + Send + Sync + 'static,
R: Iterator<Item = (usize, usize, usize)> + Send + Sync + 'static,
pub unsafe fn copy_buffer<S, D, R>(
&mut self,
source: S,
destination: D,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: BufferAccess + Send + Sync + 'static,
D: BufferAccess + Send + Sync + 'static,
R: Iterator<Item = (usize, usize, usize)> + Send + Sync + 'static,
Calls vkCmdCopyBuffer
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn copy_buffer_to_image<S, D, R>(
&mut self,
source: S,
destination: D,
destination_layout: ImageLayout,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: BufferAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderBufferImageCopy> + Send + Sync + 'static,
pub unsafe fn copy_buffer_to_image<S, D, R>(
&mut self,
source: S,
destination: D,
destination_layout: ImageLayout,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: BufferAccess + Send + Sync + 'static,
D: ImageAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderBufferImageCopy> + Send + Sync + 'static,
Calls vkCmdCopyBufferToImage
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn copy_image_to_buffer<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: BufferAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderBufferImageCopy> + Send + Sync + 'static,
pub unsafe fn copy_image_to_buffer<S, D, R>(
&mut self,
source: S,
source_layout: ImageLayout,
destination: D,
regions: R
) -> Result<(), SyncCommandBufferBuilderError> where
S: ImageAccess + Send + Sync + 'static,
D: BufferAccess + Send + Sync + 'static,
R: Iterator<Item = UnsafeCommandBufferBuilderBufferImageCopy> + Send + Sync + 'static,
Calls vkCmdCopyImageToBuffer
on the builder.
Does nothing if the list of regions is empty, as it would be a no-op and isn’t a valid usage of the command anyway.
pub unsafe fn copy_query_pool_results<D, T>(
&mut self,
query_pool: Arc<QueryPool>,
queries: Range<u32>,
destination: D,
stride: usize,
flags: QueryResultFlags
) -> Result<(), SyncCommandBufferBuilderError> where
D: BufferAccess + TypedBufferAccess<Content = [T]> + Send + Sync + 'static,
T: QueryResultElement,
pub unsafe fn copy_query_pool_results<D, T>(
&mut self,
query_pool: Arc<QueryPool>,
queries: Range<u32>,
destination: D,
stride: usize,
flags: QueryResultFlags
) -> Result<(), SyncCommandBufferBuilderError> where
D: BufferAccess + TypedBufferAccess<Content = [T]> + Send + Sync + 'static,
T: QueryResultElement,
Calls vkCmdCopyQueryPoolResults
on the builder.
Safety
stride
must be at least the number of bytes that will be written by each query.
Calls vkCmdBeginDebugUtilsLabelEXT
on the builder.
Safety
The command pool that this command buffer was allocated from must support graphics or compute operations
Calls vkCmdEndDebugUtilsLabelEXT
on the builder.
Safety
- The command pool that this command buffer was allocated from must support graphics or compute operations
- There must be an outstanding
debug_marker_begin
command prior to thedebug_marker_end
on the queue.
Calls vkCmdInsertDebugUtilsLabelEXT
on the builder.
Safety
The command pool that this command buffer was allocated from must support graphics or compute operations
pub unsafe fn dispatch_indirect<B>(
&mut self,
buffer: B
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
pub unsafe fn dispatch_indirect<B>(
&mut self,
buffer: B
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
Calls vkCmdDispatchIndirect
on the builder.
Calls vkCmdDraw
on the builder.
Calls vkCmdDrawIndexed
on the builder.
pub unsafe fn draw_indirect<B>(
&mut self,
buffer: B,
draw_count: u32,
stride: u32
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
pub unsafe fn draw_indirect<B>(
&mut self,
buffer: B,
draw_count: u32,
stride: u32
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
Calls vkCmdDrawIndirect
on the builder.
pub unsafe fn draw_indexed_indirect<B>(
&mut self,
buffer: B,
draw_count: u32,
stride: u32
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
pub unsafe fn draw_indexed_indirect<B>(
&mut self,
buffer: B,
draw_count: u32,
stride: u32
) -> Result<(), SyncCommandBufferBuilderError> where
B: BufferAccess + Send + Sync + 'static,
Calls vkCmdDrawIndexedIndirect
on the builder.
Calls vkCmdEndQuery
on the builder.
Calls vkCmdEndRenderPass
on the builder.
Starts the process of executing secondary command buffers. Returns an intermediate struct which can be used to add the command buffers.
pub unsafe fn fill_buffer<B>(&mut self, buffer: B, data: u32) where
B: BufferAccess + Send + Sync + 'static,
pub unsafe fn fill_buffer<B>(&mut self, buffer: B, data: u32) where
B: BufferAccess + Send + Sync + 'static,
Calls vkCmdFillBuffer
on the builder.
Calls vkCmdNextSubpass
on the builder.
pub unsafe fn push_constants<D: ?Sized>(
&mut self,
pipeline_layout: Arc<PipelineLayout>,
stages: ShaderStages,
offset: u32,
size: u32,
data: &D
) where
D: Send + Sync + 'static,
pub unsafe fn push_constants<D: ?Sized>(
&mut self,
pipeline_layout: Arc<PipelineLayout>,
stages: ShaderStages,
offset: u32,
size: u32,
data: &D
) where
D: Send + Sync + 'static,
Calls vkCmdPushConstants
on the builder.
Calls vkCmdResetEvent
on the builder.
Calls vkCmdResetQueryPool
on the builder.
Calls vkCmdSetBlendConstants
on the builder.
Calls vkCmdSetDepthBias
on the builder.
Calls vkCmdSetDepthBounds
on the builder.
Calls vkCmdSetEvent
on the builder.
Calls vkCmdSetLineWidth
on the builder.
Calls vkCmdSetStencilCompareMask
on the builder.
Calls vkCmdSetStencilReference
on the builder.
Calls vkCmdSetStencilWriteMask
on the builder.
Calls vkCmdSetScissor
on the builder.
If the list is empty then the command is automatically ignored.
Calls vkCmdSetViewport
on the builder.
If the list is empty then the command is automatically ignored.
pub unsafe fn update_buffer<B, D, Dd>(&mut self, buffer: B, data: Dd) where
B: BufferAccess + Send + Sync + 'static,
D: ?Sized,
Dd: SafeDeref<Target = D> + Send + Sync + 'static,
pub unsafe fn update_buffer<B, D, Dd>(&mut self, buffer: B, data: Dd) where
B: BufferAccess + Send + Sync + 'static,
D: ?Sized,
Dd: SafeDeref<Target = D> + Send + Sync + 'static,
Calls vkCmdUpdateBuffer
on the builder.
pub unsafe fn write_timestamp(
&mut self,
query_pool: Arc<QueryPool>,
query: u32,
stage: PipelineStage
)
pub unsafe fn write_timestamp(
&mut self,
query_pool: Arc<QueryPool>,
query: u32,
stage: PipelineStage
)
Calls vkCmdWriteTimestamp
on the builder.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for SyncCommandBufferBuilder
impl !Send for SyncCommandBufferBuilder
impl !Sync for SyncCommandBufferBuilder
impl Unpin for SyncCommandBufferBuilder
impl UnwindSafe for SyncCommandBufferBuilder
Blanket Implementations
Mutably borrows from an owned value. Read more
Builds a pointer to this type from a raw pointer.
Returns true if the size is suitable to store a type like this.
Returns the size of an individual element.