use std::{ffi::CStr, marker::PhantomData};
use narcissus_app::{App, Window};
-use narcissus_core::{flags_def, thread_token_def, Handle, PhantomUnsend};
+use narcissus_core::{default, flags_def, thread_token_def, Handle, PhantomUnsend};
mod delay_queue;
mod vulkan;
pub subresource_range: ImageSubresourceRange,
}
+impl<'a> ImageBarrier<'a> {
+ pub fn with_access_optimal(
+ prev_access: &'a [Access],
+ next_access: &'a [Access],
+ image: Image,
+ ) -> ImageBarrier<'a> {
+ Self {
+ prev_access,
+ next_access,
+ prev_layout: ImageLayout::Optimal,
+ next_layout: ImageLayout::Optimal,
+ image,
+ subresource_range: default(),
+ }
+ }
+}
+
thread_token_def!(ThreadToken, GpuConcurrent, 8);
pub struct Frame<'a> {
device.cmd_barrier(
&mut cmd_buffer,
None,
- &[ImageBarrier {
- prev_access: &[Access::None],
- next_access: &[Access::TransferWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
+ &[ImageBarrier::with_access_optimal(
+ &[Access::None],
+ &[Access::TransferWrite],
image,
- subresource_range: default(),
- }],
+ )],
);
device.cmd_copy_buffer_to_image(
device.cmd_barrier(
&mut cmd_buffer,
None,
- &[ImageBarrier {
- prev_access: &[Access::TransferWrite],
- next_access: &[Access::FragmentShaderSampledImageRead],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
+ &[ImageBarrier::with_access_optimal(
+ &[Access::TransferWrite],
+ &[Access::FragmentShaderSampledImageRead],
image,
- subresource_range: default(),
- }],
+ )],
);
device.submit(&frame, cmd_buffer);