pub unsafe trait PrimaryCommandBufferAbstract: VulkanObject<Handle = CommandBuffer> + DeviceOwned + Send + Sync {
fn usage(&self) -> CommandBufferUsage;
fn check_buffer_access(
&self,
buffer: &Buffer,
range: Range<DeviceSize>,
exclusive: bool,
queue: &Queue
) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>;
fn check_image_access(
&self,
image: &Image,
range: Range<DeviceSize>,
exclusive: bool,
expected_layout: ImageLayout,
queue: &Queue
) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>;
fn execute(
self,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<NowFuture>, CommandBufferExecError>
where
Self: Sized + 'static,
{ ... }
fn execute_after<F>(
self,
future: F,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<F>, CommandBufferExecError>
where
Self: Sized + 'static,
F: GpuFuture,
{ ... }
}
Required Methods§
sourcefn usage(&self) -> CommandBufferUsage
fn usage(&self) -> CommandBufferUsage
Returns the usage of this command buffer.
fn check_buffer_access(
&self,
buffer: &Buffer,
range: Range<DeviceSize>,
exclusive: bool,
queue: &Queue
) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>
fn check_image_access(
&self,
image: &Image,
range: Range<DeviceSize>,
exclusive: bool,
expected_layout: ImageLayout,
queue: &Queue
) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>
Provided Methods§
sourcefn execute(
self,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<NowFuture>, CommandBufferExecError>where
Self: Sized + 'static,
fn execute(
self,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<NowFuture>, CommandBufferExecError>where
Self: Sized + 'static,
Executes this command buffer on a queue.
This function returns an object that implements the GpuFuture
trait. See the
documentation of the sync
module for more information.
The command buffer is not actually executed until you call flush()
on the object.
You are encouraged to chain together as many futures as possible before calling flush()
,
and call .then_signal_future()
before doing so. Note however that once you called
execute()
there is no way to cancel the execution, even if you didn’t flush yet.
Note: In the future this function may return
-> impl GpuFuture
instead of a concrete type.
Note: This is just a shortcut for
execute_after(vulkano::sync::now(), queue)
.
Panics
- Panics if the device of the command buffer is not the same as the device of the future.
sourcefn execute_after<F>(
self,
future: F,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<F>, CommandBufferExecError>where
Self: Sized + 'static,
F: GpuFuture,
fn execute_after<F>(
self,
future: F,
queue: Arc<Queue>
) -> Result<CommandBufferExecFuture<F>, CommandBufferExecError>where
Self: Sized + 'static,
F: GpuFuture,
Executes the command buffer after an existing future.
This function returns an object that implements the GpuFuture
trait. See the
documentation of the sync
module for more information.
The command buffer is not actually executed until you call flush()
on the object.
You are encouraged to chain together as many futures as possible before calling flush()
,
and call .then_signal_future()
before doing so. Note however that once you called
execute()
there is no way to cancel the execution, even if you didn’t flush yet.
Note: In the future this function may return
-> impl GpuFuture
instead of a concrete type.
This function requires the 'static
lifetime to be on the command buffer. This is because
this function returns a CommandBufferExecFuture
whose job is to lock resources and keep
them alive while they are in use by the GPU. If 'static
wasn’t required, you could call
std::mem::forget
on that object and “unlock” these resources. For more information about
this problem, search the web for “rust thread scoped leakpocalypse”.
Panics
- Panics if the device of the command buffer is not the same as the device of the future.