• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2017 The vulkano developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or
4 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT
5 // license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
6 // at your option. All files in the project carrying such
7 // notice may not be copied, modified, or distributed except
8 // according to those terms.
9 
10 use std::sync::Arc;
11 
12 use crate::buffer::BufferAccess;
13 use crate::command_buffer::submit::SubmitAnyBuilder;
14 use crate::device::Device;
15 use crate::device::DeviceOwned;
16 use crate::device::Queue;
17 use crate::image::ImageAccess;
18 use crate::image::ImageLayout;
19 use crate::sync::AccessCheckError;
20 use crate::sync::AccessFlags;
21 use crate::sync::FlushError;
22 use crate::sync::GpuFuture;
23 use crate::sync::PipelineStages;
24 
25 /// Builds a future that represents "now".
26 #[inline]
now(device: Arc<Device>) -> NowFuture27 pub fn now(device: Arc<Device>) -> NowFuture {
28     NowFuture { device: device }
29 }
30 
31 /// A dummy future that represents "now".
32 pub struct NowFuture {
33     device: Arc<Device>,
34 }
35 
36 unsafe impl GpuFuture for NowFuture {
37     #[inline]
cleanup_finished(&mut self)38     fn cleanup_finished(&mut self) {}
39 
40     #[inline]
build_submission(&self) -> Result<SubmitAnyBuilder, FlushError>41     unsafe fn build_submission(&self) -> Result<SubmitAnyBuilder, FlushError> {
42         Ok(SubmitAnyBuilder::Empty)
43     }
44 
45     #[inline]
flush(&self) -> Result<(), FlushError>46     fn flush(&self) -> Result<(), FlushError> {
47         Ok(())
48     }
49 
50     #[inline]
signal_finished(&self)51     unsafe fn signal_finished(&self) {}
52 
53     #[inline]
queue_change_allowed(&self) -> bool54     fn queue_change_allowed(&self) -> bool {
55         true
56     }
57 
58     #[inline]
queue(&self) -> Option<Arc<Queue>>59     fn queue(&self) -> Option<Arc<Queue>> {
60         None
61     }
62 
63     #[inline]
check_buffer_access( &self, buffer: &dyn BufferAccess, _: bool, _: &Queue, ) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>64     fn check_buffer_access(
65         &self,
66         buffer: &dyn BufferAccess,
67         _: bool,
68         _: &Queue,
69     ) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError> {
70         Err(AccessCheckError::Unknown)
71     }
72 
73     #[inline]
check_image_access( &self, _: &dyn ImageAccess, _: ImageLayout, _: bool, _: &Queue, ) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError>74     fn check_image_access(
75         &self,
76         _: &dyn ImageAccess,
77         _: ImageLayout,
78         _: bool,
79         _: &Queue,
80     ) -> Result<Option<(PipelineStages, AccessFlags)>, AccessCheckError> {
81         Err(AccessCheckError::Unknown)
82     }
83 }
84 
85 unsafe impl DeviceOwned for NowFuture {
86     #[inline]
device(&self) -> &Arc<Device>87     fn device(&self) -> &Arc<Device> {
88         &self.device
89     }
90 }
91