aboutsummaryrefslogtreecommitdiff
path: root/stockton-skeleton/src/builders/renderpass.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stockton-skeleton/src/builders/renderpass.rs')
-rw-r--r--stockton-skeleton/src/builders/renderpass.rs35
1 files changed, 23 insertions, 12 deletions
diff --git a/stockton-skeleton/src/builders/renderpass.rs b/stockton-skeleton/src/builders/renderpass.rs
index 43f0eb2..7a01412 100644
--- a/stockton-skeleton/src/builders/renderpass.rs
+++ b/stockton-skeleton/src/builders/renderpass.rs
@@ -3,14 +3,24 @@ use crate::types::*;
use std::iter::{empty, once};
use anyhow::Result;
-use hal::pass::{Attachment, AttachmentRef, SubpassDesc};
+use hal::pass::{Attachment, AttachmentLayout, AttachmentRef, SubpassDesc};
+
+/// An attachment for a renderpass
+#[derive(Debug, Clone)]
+pub struct AttachmentSpec {
+ /// The attachment description for gfx-hal
+ pub attachment: Attachment,
+
+ /// The layout that the image should be transitioned to while this pass is in use.
+ pub used_layout: AttachmentLayout,
+}
#[derive(Debug, Clone)]
pub struct RenderpassSpec {
- pub colors: Vec<Attachment>,
- pub depth: Option<Attachment>,
- pub inputs: Vec<Attachment>,
- pub resolves: Vec<Attachment>,
+ pub colors: Vec<AttachmentSpec>,
+ pub depth: Option<AttachmentSpec>,
+ pub inputs: Vec<AttachmentSpec>,
+ pub resolves: Vec<AttachmentSpec>,
pub preserves: Vec<Attachment>,
}
@@ -22,11 +32,11 @@ impl RenderpassSpec {
.colors
.iter()
.enumerate()
- .map(|(i, a)| (next_offset + i, a.layouts.end))
+ .map(|(i, a)| (next_offset + i, a.used_layout))
.collect();
next_offset = colors.len();
- let depth_stencil = self.depth.as_ref().map(|x| (next_offset, x.layouts.end));
+ let depth_stencil = self.depth.as_ref().map(|x| (next_offset, x.used_layout));
if depth_stencil.is_some() {
next_offset += 1;
}
@@ -35,7 +45,7 @@ impl RenderpassSpec {
.inputs
.iter()
.enumerate()
- .map(|(i, a)| (next_offset + i, a.layouts.end))
+ .map(|(i, a)| (next_offset + i, a.used_layout))
.collect();
next_offset += inputs.len();
@@ -43,7 +53,7 @@ impl RenderpassSpec {
.resolves
.iter()
.enumerate()
- .map(|(i, a)| (next_offset + i, a.layouts.end))
+ .map(|(i, a)| (next_offset + i, a.used_layout))
.collect();
next_offset += resolves.len();
@@ -65,9 +75,10 @@ impl RenderpassSpec {
let all_attachments = self
.colors
.into_iter()
- .chain(self.depth.into_iter())
- .chain(self.inputs.into_iter())
- .chain(self.resolves.into_iter())
+ .map(|x| x.attachment)
+ .chain(self.depth.into_iter().map(|x| x.attachment))
+ .chain(self.inputs.into_iter().map(|x| x.attachment))
+ .chain(self.resolves.into_iter().map(|x| x.attachment))
.chain(self.preserves.into_iter());
Ok(unsafe { device.create_render_pass(all_attachments, once(sp_desc), empty())? })