}
impl<'a> ImageBarrier<'a> {
- pub fn layout_optimal(
- prev_access: &'a [Access],
- next_access: &'a [Access],
+ pub fn optimal(
+ prev_access: &'a Access,
+ next_access: &'a Access,
+ image: Image,
+ ) -> ImageBarrier<'a> {
+ Self {
+ prev_access: std::slice::from_ref(prev_access),
+ next_access: std::slice::from_ref(next_access),
+ prev_layout: ImageLayout::Optimal,
+ next_layout: ImageLayout::Optimal,
+ image,
+ subresource_range: default(),
+ discard_contents: false,
+ }
+ }
+
+ pub fn optimal_discard(
+ prev_access: &'a Access,
+ next_access: &'a Access,
+ image: Image,
+ ) -> ImageBarrier<'a> {
+ Self {
+ prev_access: std::slice::from_ref(prev_access),
+ next_access: std::slice::from_ref(next_access),
+ prev_layout: ImageLayout::Optimal,
+ next_layout: ImageLayout::Optimal,
+ image,
+ subresource_range: default(),
+ discard_contents: true,
+ }
+ }
+
+ pub fn optimal_aspect(
+ prev_access: &'a Access,
+ next_access: &'a Access,
image: Image,
aspect: ImageAspectFlags,
) -> ImageBarrier<'a> {
Self {
- prev_access,
- next_access,
+ prev_access: std::slice::from_ref(prev_access),
+ next_access: std::slice::from_ref(next_access),
prev_layout: ImageLayout::Optimal,
next_layout: ImageLayout::Optimal,
image,
discard_contents: false,
}
}
+
+ pub fn general(
+ prev_access: &'a Access,
+ next_access: &'a Access,
+ image: Image,
+ ) -> ImageBarrier<'a> {
+ Self {
+ prev_access: std::slice::from_ref(prev_access),
+ next_access: std::slice::from_ref(next_access),
+ prev_layout: ImageLayout::General,
+ next_layout: ImageLayout::General,
+ image,
+ subresource_range: default(),
+ discard_contents: false,
+ }
+ }
+
+ pub fn general_discard(
+ prev_access: &'a Access,
+ next_access: &'a Access,
+ image: Image,
+ ) -> ImageBarrier<'a> {
+ Self {
+ prev_access: std::slice::from_ref(prev_access),
+ next_access: std::slice::from_ref(next_access),
+ prev_layout: ImageLayout::General,
+ next_layout: ImageLayout::General,
+ image,
+ subresource_range: default(),
+ discard_contents: true,
+ }
+ }
}
thread_token_def!(ThreadToken, GpuConcurrent, 8);
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier {
- prev_access: &[Access::General],
- next_access: &[Access::TransferWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
- subresource_range: ImageSubresourceRange::default(),
+ &[ImageBarrier::optimal_discard(
+ &Access::General,
+ &Access::TransferWrite,
image,
- discard_contents: true,
- }],
+ )],
);
let buffer = gpu.request_transient_buffer_with_data(
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier::layout_optimal(
- &[Access::TransferWrite],
- &[Access::FragmentShaderSampledImageRead],
+ &[ImageBarrier::optimal(
+ &Access::TransferWrite,
+ &Access::FragmentShaderSampledImageRead,
image,
- ImageAspectFlags::COLOR,
)],
);
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier {
- prev_access: &[Access::General],
- next_access: &[Access::TransferWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
- subresource_range: ImageSubresourceRange::default(),
+ &[ImageBarrier::optimal_discard(
+ &Access::General,
+ &Access::TransferWrite,
image,
- discard_contents: true,
- }],
+ )],
);
let buffer = gpu.request_transient_buffer_with_data(
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier::layout_optimal(
- &[Access::TransferWrite],
- &[Access::ShaderSampledImageRead],
+ &[ImageBarrier::optimal(
+ &Access::TransferWrite,
+ &Access::ShaderSampledImageRead,
image,
- ImageAspectFlags::COLOR,
)],
);
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier::layout_optimal(
- &[Access::None],
- &[Access::FragmentShaderSampledImageRead],
+ &[ImageBarrier::optimal_discard(
+ &Access::None,
+ &Access::FragmentShaderSampledImageRead,
*glyph_atlas_image,
- ImageAspectFlags::COLOR,
)],
);
}
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier::layout_optimal(
- &[Access::None],
- &[Access::DepthStencilAttachmentWrite],
+ &[ImageBarrier::optimal_aspect(
+ &Access::None,
+ &Access::DepthStencilAttachmentWrite,
self.depth_image,
ImageAspectFlags::DEPTH,
)],
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier {
- prev_access: &[Access::ShaderSampledImageRead],
- prev_layout: ImageLayout::Optimal,
- next_access: &[Access::TransferWrite],
- next_layout: ImageLayout::Optimal,
- image: self.glyph_atlas_images[self.glyph_atlas_image_index & 1],
- subresource_range: default(),
- discard_contents: true,
- }],
+ &[ImageBarrier::optimal_discard(
+ &Access::ShaderSampledImageRead,
+ &Access::TransferWrite,
+ self.glyph_atlas_images[self.glyph_atlas_image_index & 1],
+ )],
);
gpu.cmd_copy_buffer_to_image(
gpu.cmd_barrier(
cmd_encoder,
None,
- &[ImageBarrier::layout_optimal(
- &[Access::TransferWrite],
- &[Access::ShaderSampledImageRead],
+ &[ImageBarrier::optimal(
+ &Access::TransferWrite,
+ &Access::ShaderSampledImageRead,
self.glyph_atlas_images[self.glyph_atlas_image_index & 1],
- ImageAspectFlags::COLOR,
)],
);
cmd_encoder,
None,
&[
- ImageBarrier {
- prev_access: &[Access::ShaderOtherRead],
- next_access: &[Access::ColorAttachmentWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
- image: self.color_image,
- subresource_range: default(),
- discard_contents: true,
- },
- ImageBarrier {
- prev_access: &[Access::ShaderOtherRead],
- next_access: &[Access::ComputeWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::General,
- image: self.ui_image,
- subresource_range: default(),
- discard_contents: true,
- },
+ ImageBarrier::optimal_discard(
+ &Access::ShaderOtherRead,
+ &Access::ColorAttachmentWrite,
+ self.color_image,
+ ),
+ ImageBarrier::general_discard(
+ &Access::ShaderOtherRead,
+ &Access::ComputeWrite,
+ self.ui_image,
+ ),
],
);
&[
ImageBarrier {
prev_access: &[Access::ColorAttachmentWrite],
- prev_layout: ImageLayout::Optimal,
next_access: &[Access::ShaderOtherRead],
+ prev_layout: ImageLayout::Optimal,
next_layout: ImageLayout::General,
image: self.color_image,
subresource_range: ImageSubresourceRange::default(),
discard_contents: false,
},
- ImageBarrier {
- prev_access: &[Access::ComputeWrite],
- prev_layout: ImageLayout::General,
- next_access: &[Access::ComputeOtherRead],
- next_layout: ImageLayout::General,
- image: self.ui_image,
- subresource_range: ImageSubresourceRange::default(),
- discard_contents: false,
- },
+ ImageBarrier::general(
+ &Access::ComputeWrite,
+ &Access::ComputeOtherRead,
+ self.ui_image,
+ ),
],
);