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