Add buffer&image transition functions

This commit is contained in:
Pierre Krieger 2016-11-03 20:42:23 +01:00
parent 74eec7f92b
commit a255fb3e83
5 changed files with 43 additions and 17 deletions

View File

@ -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)
{
}
}

View File

@ -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> {

View File

@ -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 {

View File

@ -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:

View File

@ -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)
}