mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2025-02-20 02:52:33 +00:00
Add buffer&image transition functions
This commit is contained in:
parent
74eec7f92b
commit
a255fb3e83
@ -12,6 +12,7 @@ use std::ptr;
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::sync::Arc;
|
||||
|
||||
use buffer::TrackedBuffer;
|
||||
use command_buffer::pool::AllocatedCommandBuffer;
|
||||
use command_buffer::pool::CommandPool;
|
||||
use command_buffer::CommandsList;
|
||||
@ -24,6 +25,8 @@ use device::Device;
|
||||
use framebuffer::RenderPass;
|
||||
use framebuffer::Subpass;
|
||||
use framebuffer::traits::Framebuffer;
|
||||
use image::Layout;
|
||||
use image::TrackedImage;
|
||||
|
||||
use OomError;
|
||||
use VulkanObject;
|
||||
@ -224,9 +227,22 @@ impl<'a> CommandsListSink<'a> for Sink<'a> {
|
||||
f.call(self.0)
|
||||
}
|
||||
|
||||
/*#[inline]
|
||||
fn add_buffer_transition(&mut self) {}
|
||||
#[inline]
|
||||
fn add_buffer_transition(&mut self, buffer: &TrackedBuffer, offset: usize, size: usize,
|
||||
write: bool)
|
||||
{
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn add_image_transition(&mut self) {}*/
|
||||
fn add_image_transition(&mut self, image: &TrackedImage, first_layer: u32, num_layers: u32,
|
||||
first_mipmap: u32, num_mipmaps: u32, layout: Layout)
|
||||
{
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn add_image_transition_notification(&mut self, image: &TrackedImage, first_layer: u32,
|
||||
num_layers: u32, first_mipmap: u32, num_mipmaps: u32,
|
||||
layout: Layout)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ use device::Queue;
|
||||
use framebuffer::traits::TrackedFramebuffer;
|
||||
use framebuffer::RenderPass;
|
||||
use framebuffer::RenderPassClearValues;
|
||||
use image::Layout;
|
||||
use image::TrackedImage;
|
||||
use instance::QueueFamily;
|
||||
use pipeline::ComputePipeline;
|
||||
use pipeline::GraphicsPipeline;
|
||||
@ -257,8 +259,19 @@ pub trait CommandsListSink<'a> {
|
||||
/// Note that the lifetime means that we hold a reference to the content of
|
||||
/// the commands list in that closure.
|
||||
fn add_command(&mut self, Box<CommandsListSinkCaller<'a> + 'a>);
|
||||
/*fn add_buffer_transition(&mut self /*, ... */);
|
||||
fn add_image_transition(&mut self /*, ... */);*/
|
||||
|
||||
fn add_buffer_transition(&mut self, buffer: &TrackedBuffer, offset: usize, size: usize,
|
||||
write: bool);
|
||||
|
||||
///
|
||||
///
|
||||
/// If necessary, you must transition the image to the `layout`.
|
||||
fn add_image_transition(&mut self, image: &TrackedImage, first_layer: u32, num_layers: u32,
|
||||
first_mipmap: u32, num_mipmaps: u32, layout: Layout);
|
||||
|
||||
fn add_image_transition_notification(&mut self, image: &TrackedImage, first_layer: u32,
|
||||
num_layers: u32, first_mipmap: u32, num_mipmaps: u32,
|
||||
layout: Layout);
|
||||
}
|
||||
|
||||
pub trait CommandsListSinkCaller<'a> {
|
||||
|
@ -389,7 +389,7 @@ unsafe impl<States, A, R> AttachmentsList<States> for List<A, R>
|
||||
{
|
||||
let mut rest_infos = self.rest.on_submit(states, queue, &mut fence);
|
||||
|
||||
let first_infos = self.first.image().on_submit(states, queue, fence);
|
||||
let first_infos = self.first.image().on_submit(states, queue, &mut fence);
|
||||
if let Some(s) = first_infos.pre_semaphore { rest_infos.semaphores_wait.push(s); }
|
||||
if let Some(s) = first_infos.post_semaphore { rest_infos.semaphores_signal.push(s); }
|
||||
if let Some(rq) = first_infos.pre_barrier {
|
||||
|
@ -254,8 +254,8 @@ unsafe impl TrackedImage<StatesManager> for SwapchainImage {
|
||||
Some(transition)
|
||||
}
|
||||
|
||||
fn on_submit<F>(&self, _: &StatesManager, queue: &Arc<Queue>, fence: F) -> TrackedImageSubmitInfos
|
||||
where F: FnOnce() -> Arc<Fence>
|
||||
fn on_submit(&self, _: &StatesManager, queue: &Arc<Queue>, fence: &mut FnMut() -> Arc<Fence>)
|
||||
-> TrackedImageSubmitInfos
|
||||
{
|
||||
TrackedImageSubmitInfos {
|
||||
pre_semaphore: None, // FIXME:
|
||||
|
@ -130,9 +130,8 @@ pub unsafe trait TrackedImage<States = StatesManager>: Image {
|
||||
|
||||
/// Called right before the command buffer is submitted.
|
||||
// TODO: function should be unsafe because it must be guaranteed that a cb is submitted
|
||||
fn on_submit<F>(&self, states: &States, queue: &Arc<Queue>, fence: F)
|
||||
-> TrackedImageSubmitInfos
|
||||
where F: FnOnce() -> Arc<Fence>;
|
||||
fn on_submit(&self, states: &States, queue: &Arc<Queue>, fence: &mut FnMut() -> Arc<Fence>)
|
||||
-> TrackedImageSubmitInfos;
|
||||
}
|
||||
|
||||
unsafe impl<I: ?Sized, S> TrackedImage<S> for Arc<I> where I: TrackedImage<S> {
|
||||
@ -154,9 +153,8 @@ unsafe impl<I: ?Sized, S> TrackedImage<S> for Arc<I> where I: TrackedImage<S> {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn on_submit<F>(&self, states: &S, queue: &Arc<Queue>, fence: F)
|
||||
-> TrackedImageSubmitInfos
|
||||
where F: FnOnce() -> Arc<Fence>
|
||||
fn on_submit(&self, states: &S, queue: &Arc<Queue>, fence: &mut FnMut() -> Arc<Fence>)
|
||||
-> TrackedImageSubmitInfos
|
||||
{
|
||||
(**self).on_submit(states, queue, fence)
|
||||
}
|
||||
@ -181,9 +179,8 @@ unsafe impl<'a, I: ?Sized + 'a, S> TrackedImage<S> for &'a I where I: TrackedIma
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn on_submit<F>(&self, states: &S, queue: &Arc<Queue>, fence: F)
|
||||
-> TrackedImageSubmitInfos
|
||||
where F: FnOnce() -> Arc<Fence>
|
||||
fn on_submit(&self, states: &S, queue: &Arc<Queue>, fence: &mut FnMut() -> Arc<Fence>)
|
||||
-> TrackedImageSubmitInfos
|
||||
{
|
||||
(**self).on_submit(states, queue, fence)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user