Skip to content

Commit

Permalink
Fix panic if previous barrier is looked up and it's an initial barrier (
Browse files Browse the repository at this point in the history
  • Loading branch information
marc0246 authored Feb 11, 2025
1 parent dd358a7 commit 75f005a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
33 changes: 26 additions & 7 deletions vulkano-taskgraph/src/graph/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,15 @@ impl IntermediateRepresentationBuilder {
.start_barriers
.iter_mut()
.find(|barrier| barrier.resource == id)
.unwrap();
.unwrap_or_else(|| {
self.submissions
.last_mut()
.unwrap()
.initial_barriers
.iter_mut()
.find(|barrier| barrier.resource == id)
.unwrap()
});
prev_barrier.dst_stage_mask |= access.stage_mask;
prev_barrier.dst_access_mask |= access.access_mask;
}
Expand Down Expand Up @@ -2039,15 +2047,25 @@ mod tests {
let mut graph = TaskGraph::<()>::new(&resources, 10, 10);
let buffer = graph.add_buffer(&BufferCreateInfo::default());
let image = graph.add_image(&ImageCreateInfo::default());
let node = graph
let node1 = graph
.create_task_node("", QueueFamilyType::Graphics, PhantomData)
.buffer_access(buffer, AccessTypes::VERTEX_SHADER_UNIFORM_READ)
.image_access(
image,
AccessTypes::FRAGMENT_SHADER_SAMPLED_READ,
ImageLayoutType::Optimal,
ImageLayoutType::General,
)
.build();
let node2 = graph
.create_task_node("", QueueFamilyType::Graphics, PhantomData)
.buffer_access(buffer, AccessTypes::VERTEX_SHADER_SAMPLED_READ)
.image_access(
image,
AccessTypes::FRAGMENT_SHADER_STORAGE_READ,
ImageLayoutType::General,
)
.build();
graph.add_edge(node1, node2).unwrap();

let graph = unsafe {
graph.compile(&CompileInfo {
Expand All @@ -2063,19 +2081,20 @@ mod tests {
barriers: [
{
dst_stage_mask: VERTEX_SHADER,
dst_access_mask: UNIFORM_READ,
dst_access_mask: UNIFORM_READ | SHADER_SAMPLED_READ,
new_layout: Undefined,
resource: buffer,
},
{
dst_stage_mask: FRAGMENT_SHADER,
dst_access_mask: SHADER_SAMPLED_READ,
new_layout: ShaderReadOnlyOptimal,
dst_access_mask: SHADER_SAMPLED_READ | SHADER_STORAGE_READ,
new_layout: General,
resource: image,
},
],
},
ExecuteTask { node: node },
ExecuteTask { node: node1 },
ExecuteTask { node: node2 },
FlushSubmit,
Submit,
);
Expand Down
1 change: 1 addition & 0 deletions vulkano-taskgraph/src/resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1706,6 +1706,7 @@ impl AccessTypes {
.union(AccessFlags::TRANSFER_WRITE)
.union(AccessFlags::MEMORY_READ)
.union(AccessFlags::MEMORY_WRITE)
.union(AccessFlags::SHADER_SAMPLED_READ)
.union(AccessFlags::SHADER_STORAGE_READ)
.union(AccessFlags::SHADER_STORAGE_WRITE)
.union(AccessFlags::VIDEO_DECODE_READ)
Expand Down

0 comments on commit 75f005a

Please sign in to comment.