aboutsummaryrefslogtreecommitdiff
path: root/src/image/swapchain.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/image/swapchain.rs')
-rw-r--r--src/image/swapchain.rs189
1 files changed, 0 insertions, 189 deletions
diff --git a/src/image/swapchain.rs b/src/image/swapchain.rs
deleted file mode 100644
index 9cd3fe5..0000000
--- a/src/image/swapchain.rs
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright (c) 2016 The vulkano developers
-// Licensed under the Apache License, Version 2.0
-// <LICENSE-APACHE or
-// https://www.apache.org/licenses/LICENSE-2.0> or the MIT
-// license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
-// at your option. All files in the project carrying such
-// notice may not be copied, modified, or distributed except
-// according to those terms.
-
-use crate::format::ClearValue;
-use crate::image::traits::ImageAccess;
-use crate::image::traits::ImageClearValue;
-use crate::image::traits::ImageContent;
-use crate::image::ImageDescriptorLayouts;
-use crate::image::ImageInner;
-use crate::image::ImageLayout;
-use crate::swapchain::Swapchain;
-use crate::sync::AccessError;
-use crate::OomError;
-use std::hash::Hash;
-use std::hash::Hasher;
-use std::sync::Arc;
-
-/// An image that is part of a swapchain.
-///
-/// Creating a `SwapchainImage` is automatically done when creating a swapchain.
-///
-/// A swapchain image is special in the sense that it can only be used after being acquired by
-/// calling the `acquire` method on the swapchain. You have no way to know in advance which
-/// swapchain image is going to be acquired, so you should keep all of them alive.
-///
-/// After a swapchain image has been acquired, you are free to perform all the usual operations
-/// on it. When you are done you can then *present* the image (by calling the corresponding
-/// method on the swapchain), which will have the effect of showing the content of the image to
-/// the screen. Once an image has been presented, it can no longer be used unless it is acquired
-/// again.
-// TODO: #[derive(Debug)]
-pub struct SwapchainImage<W> {
- swapchain: Arc<Swapchain<W>>,
- image_offset: usize,
-}
-
-impl<W> SwapchainImage<W> {
- /// Builds a `SwapchainImage` from raw components.
- ///
- /// This is an internal method that you shouldn't call.
- pub unsafe fn from_raw(
- swapchain: Arc<Swapchain<W>>,
- id: usize,
- ) -> Result<Arc<SwapchainImage<W>>, OomError> {
- let image = swapchain.raw_image(id).unwrap();
-
- Ok(Arc::new(SwapchainImage {
- swapchain: swapchain.clone(),
- image_offset: id,
- }))
- }
-
- /// Returns the dimensions of the image.
- ///
- /// A `SwapchainImage` is always two-dimensional.
- #[inline]
- pub fn dimensions(&self) -> [u32; 2] {
- let dims = self.my_image().image.dimensions();
- [dims.width(), dims.height()]
- }
-
- /// Returns the swapchain this image belongs to.
- #[inline]
- pub fn swapchain(&self) -> &Arc<Swapchain<W>> {
- &self.swapchain
- }
-
- #[inline]
- fn my_image(&self) -> ImageInner {
- self.swapchain.raw_image(self.image_offset).unwrap()
- }
-
- #[inline]
- fn layout_initialized(&self) {
- self.swapchain.image_layout_initialized(self.image_offset);
- }
-
- #[inline]
- fn is_layout_initialized(&self) -> bool {
- self.swapchain
- .is_image_layout_initialized(self.image_offset)
- }
-}
-
-unsafe impl<W> ImageAccess for SwapchainImage<W> {
- #[inline]
- fn inner(&self) -> ImageInner {
- self.my_image()
- }
-
- #[inline]
- fn initial_layout_requirement(&self) -> ImageLayout {
- ImageLayout::PresentSrc
- }
-
- #[inline]
- fn final_layout_requirement(&self) -> ImageLayout {
- ImageLayout::PresentSrc
- }
-
- #[inline]
- fn descriptor_layouts(&self) -> Option<ImageDescriptorLayouts> {
- Some(ImageDescriptorLayouts {
- storage_image: ImageLayout::ShaderReadOnlyOptimal,
- combined_image_sampler: ImageLayout::ShaderReadOnlyOptimal,
- sampled_image: ImageLayout::ShaderReadOnlyOptimal,
- input_attachment: ImageLayout::ShaderReadOnlyOptimal,
- })
- }
-
- #[inline]
- fn conflict_key(&self) -> u64 {
- self.my_image().image.key()
- }
-
- #[inline]
- fn try_gpu_lock(&self, _: bool, _: bool, _: ImageLayout) -> Result<(), AccessError> {
- if self.swapchain.is_fullscreen_exclusive() {
- Ok(())
- } else {
- // Swapchain image are only accessible after being acquired.
- Err(AccessError::SwapchainImageAcquireOnly)
- }
- }
-
- #[inline]
- unsafe fn layout_initialized(&self) {
- self.layout_initialized();
- }
-
- #[inline]
- fn is_layout_initialized(&self) -> bool {
- self.is_layout_initialized()
- }
-
- #[inline]
- unsafe fn increase_gpu_lock(&self) {}
-
- #[inline]
- unsafe fn unlock(&self, _: Option<ImageLayout>) {
- // TODO: store that the image was initialized
- }
-
- #[inline]
- fn current_miplevels_access(&self) -> std::ops::Range<u32> {
- 0..self.mipmap_levels()
- }
-
- #[inline]
- fn current_layer_levels_access(&self) -> std::ops::Range<u32> {
- 0..1
- }
-}
-
-unsafe impl<W> ImageClearValue<ClearValue> for SwapchainImage<W> {
- #[inline]
- fn decode(&self, value: ClearValue) -> Option<ClearValue> {
- Some(self.swapchain.format().decode_clear_value(value))
- }
-}
-
-unsafe impl<P, W> ImageContent<P> for SwapchainImage<W> {
- #[inline]
- fn matches_format(&self) -> bool {
- true // FIXME:
- }
-}
-
-impl<W> PartialEq for SwapchainImage<W> {
- #[inline]
- fn eq(&self, other: &Self) -> bool {
- ImageAccess::inner(self) == ImageAccess::inner(other)
- }
-}
-
-impl<W> Eq for SwapchainImage<W> {}
-
-impl<W> Hash for SwapchainImage<W> {
- #[inline]
- fn hash<H: Hasher>(&self, state: &mut H) {
- ImageAccess::inner(self).hash(state);
- }
-}