Use vulkan synchronization2

main
Andrew O'Neil 1 week ago
parent 54a846f9f1
commit f013badc22

@ -53,23 +53,20 @@ impl<'a> CommandBufferRecorder<'a> {
pub fn pipeline_barrier(
&self,
src_stage_mask: vk::PipelineStageFlags,
dst_stage_mask: vk::PipelineStageFlags,
dependency_flags: vk::DependencyFlags,
memory_barriers: &[vk::MemoryBarrier],
buffer_memory_barriers: &[vk::BufferMemoryBarrier],
image_memory_barriers: &[vk::ImageMemoryBarrier],
memory_barriers: &[vk::MemoryBarrier2],
buffer_memory_barriers: &[vk::BufferMemoryBarrier2],
image_memory_barriers: &[vk::ImageMemoryBarrier2],
) {
let dependency_info = vk::DependencyInfo::builder()
.dependency_flags(dependency_flags)
.memory_barriers(memory_barriers)
.buffer_memory_barriers(buffer_memory_barriers)
.image_memory_barriers(image_memory_barriers);
unsafe {
self.device().raw().cmd_pipeline_barrier(
self.buffer.raw(),
src_stage_mask,
dst_stage_mask,
dependency_flags,
memory_barriers,
buffer_memory_barriers,
image_memory_barriers,
);
self.device()
.raw()
.cmd_pipeline_barrier2(self.buffer.raw(), &dependency_info);
}
}

@ -48,12 +48,13 @@ pub fn create_device(
let extension_names: Vec<*const c_char> = extensions.iter().map(|ext| ext.name()).collect();
info!("Requested device extensions: {:?}", extensions);
let features = vk::PhysicalDeviceFeatures::builder()
.shader_int64(true);
let features = vk::PhysicalDeviceFeatures::builder().shader_int64(true);
let mut features_12 = vk::PhysicalDeviceVulkan12Features::builder()
.buffer_device_address(true)
.vulkan_memory_model(true);
let mut features_13 = vk::PhysicalDeviceVulkan13Features::builder().dynamic_rendering(true);
let mut features_13 = vk::PhysicalDeviceVulkan13Features::builder()
.dynamic_rendering(true)
.synchronization2(true);
let mut features_rt =
vk::PhysicalDeviceRayTracingPipelineFeaturesKHR::builder().ray_tracing_pipeline(true);
let mut features_as =

@ -28,13 +28,15 @@ impl<'a> CommandBufferRecorder<'a> {
image: &Image,
old_layout: vk::ImageLayout,
new_layout: vk::ImageLayout,
src_access_mask: vk::AccessFlags,
dst_access_mask: vk::AccessFlags,
src_stage_mask: vk::PipelineStageFlags,
dst_stage_mask: vk::PipelineStageFlags,
src_access_mask: vk::AccessFlags2,
dst_access_mask: vk::AccessFlags2,
src_stage_mask: vk::PipelineStageFlags2,
dst_stage_mask: vk::PipelineStageFlags2,
) {
let barrier = vk::ImageMemoryBarrier::builder()
let barrier = vk::ImageMemoryBarrier2::builder()
.src_stage_mask(src_stage_mask)
.src_access_mask(src_access_mask)
.dst_stage_mask(dst_stage_mask)
.dst_access_mask(dst_access_mask)
.old_layout(old_layout)
.new_layout(new_layout)
@ -48,8 +50,6 @@ impl<'a> CommandBufferRecorder<'a> {
);
self.pipeline_barrier(
src_stage_mask,
dst_stage_mask,
vk::DependencyFlags::empty(),
&[],
&[],

@ -108,10 +108,10 @@ impl PathTracer {
&image_view.image(),
vk::ImageLayout::UNDEFINED,
vk::ImageLayout::GENERAL,
vk::AccessFlags::empty(),
vk::AccessFlags::empty(),
vk::PipelineStageFlags::TOP_OF_PIPE,
vk::PipelineStageFlags::TOP_OF_PIPE,
vk::AccessFlags2::empty(),
vk::AccessFlags2::empty(),
vk::PipelineStageFlags2::TOP_OF_PIPE,
vk::PipelineStageFlags2::TOP_OF_PIPE,
)
},
);
@ -163,20 +163,20 @@ impl PathTracer {
&swapchain_image.image(),
vk::ImageLayout::UNDEFINED,
vk::ImageLayout::TRANSFER_DST_OPTIMAL,
vk::AccessFlags::empty(),
vk::AccessFlags::TRANSFER_WRITE,
vk::PipelineStageFlags::TOP_OF_PIPE,
vk::PipelineStageFlags::TRANSFER,
vk::AccessFlags2::empty(),
vk::AccessFlags2::TRANSFER_WRITE,
vk::PipelineStageFlags2::TOP_OF_PIPE,
vk::PipelineStageFlags2::TRANSFER,
);
cmd.transition_image_layout(
&self.storage_image.image(),
vk::ImageLayout::GENERAL,
vk::ImageLayout::TRANSFER_SRC_OPTIMAL,
vk::AccessFlags::empty(),
vk::AccessFlags::TRANSFER_READ,
vk::PipelineStageFlags::TOP_OF_PIPE,
vk::PipelineStageFlags::TRANSFER,
vk::AccessFlags2::empty(),
vk::AccessFlags2::TRANSFER_READ,
vk::PipelineStageFlags2::TOP_OF_PIPE,
vk::PipelineStageFlags2::TRANSFER,
);
let copy_region = vk::ImageCopy::builder()
@ -209,20 +209,20 @@ impl PathTracer {
swapchain_image.image(),
vk::ImageLayout::TRANSFER_DST_OPTIMAL,
vk::ImageLayout::PRESENT_SRC_KHR,
vk::AccessFlags::TRANSFER_WRITE,
vk::AccessFlags::COLOR_ATTACHMENT_READ,
vk::PipelineStageFlags::TRANSFER,
vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT,
vk::AccessFlags2::TRANSFER_WRITE,
vk::AccessFlags2::COLOR_ATTACHMENT_READ,
vk::PipelineStageFlags2::TRANSFER,
vk::PipelineStageFlags2::COLOR_ATTACHMENT_OUTPUT,
);
cmd.transition_image_layout(
&self.storage_image.image(),
vk::ImageLayout::TRANSFER_SRC_OPTIMAL,
vk::ImageLayout::GENERAL,
vk::AccessFlags::TRANSFER_WRITE,
vk::AccessFlags::empty(),
vk::PipelineStageFlags::TRANSFER,
vk::PipelineStageFlags::TOP_OF_PIPE,
vk::AccessFlags2::TRANSFER_WRITE,
vk::AccessFlags2::empty(),
vk::PipelineStageFlags2::TRANSFER,
vk::PipelineStageFlags2::TOP_OF_PIPE,
);
});

Loading…
Cancel
Save