Skip to content

Commit 0f640cd

Browse files
committed
Fix offsets and sizes in buffer barriers
1 parent 8d251a6 commit 0f640cd

File tree

5 files changed

+29
-4
lines changed

5 files changed

+29
-4
lines changed

Diff for: vulkano/src/buffer/cpu_access.rs

+5
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ unsafe impl<T: ?Sized> Buffer for CpuAccessibleBuffer<T> {
135135
vec![0]
136136
}
137137

138+
#[inline]
139+
fn block_memory_range(&self, _: usize) -> Range<usize> {
140+
0 .. self.size()
141+
}
142+
138143
fn needs_fence(&self, _: bool, _: Range<usize>) -> Option<bool> {
139144
Some(true)
140145
}

Diff for: vulkano/src/buffer/immutable.rs

+5
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ unsafe impl<T: ?Sized> Buffer for ImmutableBuffer<T> {
116116
vec![0]
117117
}
118118

119+
#[inline]
120+
fn block_memory_range(&self, _: usize) -> Range<usize> {
121+
0 .. self.size()
122+
}
123+
119124
fn needs_fence(&self, _: bool, _: Range<usize>) -> Option<bool> {
120125
Some(true)
121126
}

Diff for: vulkano/src/buffer/staging.rs

+5
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ unsafe impl<T: ?Sized> Buffer for StagingBuffer<T> {
7979
vec![0]
8080
}
8181

82+
#[inline]
83+
fn block_memory_range(&self, _: usize) -> Range<usize> {
84+
0 .. self.size()
85+
}
86+
8287
fn needs_fence(&self, _: bool, _: Range<usize>) -> Option<bool> {
8388
Some(true)
8489
}

Diff for: vulkano/src/buffer/traits.rs

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ pub unsafe trait Buffer {
2929
/// The return value must not be empty.
3030
fn blocks(&self, range: Range<usize>) -> Vec<usize>;
3131

32+
/// Returns the range of bytes of the memory used by a block.
33+
///
34+
/// **Important**: This is not the range in the buffer, but the range in the memory that is
35+
/// backing the buffer.
36+
fn block_memory_range(&self, block: usize) -> Range<usize>;
37+
3238
///
3339
///
3440
/// If the host is still accessing the buffer, this function implementation should block

Diff for: vulkano/src/command_buffer/inner.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,8 @@ impl InnerCommandBufferBuilder {
10561056
src_stages |= vk::PIPELINE_STAGE_HOST_BIT;
10571057
dst_stages |= access.stages;
10581058

1059+
let range = (buffer.0).0.block_memory_range(buffer.1);
1060+
10591061
buffer_barriers.push(vk::BufferMemoryBarrier {
10601062
sType: vk::STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
10611063
pNext: ptr::null(),
@@ -1064,8 +1066,8 @@ impl InnerCommandBufferBuilder {
10641066
srcQueueFamilyIndex: vk::QUEUE_FAMILY_IGNORED,
10651067
dstQueueFamilyIndex: vk::QUEUE_FAMILY_IGNORED,
10661068
buffer: (buffer.0).0.inner_buffer().internal_object(),
1067-
offset: 0, // FIXME:
1068-
size: 10, // FIXME:
1069+
offset: range.start as u64,
1070+
size: (range.end - range.start) as u64,
10691071
});
10701072
}
10711073

@@ -1078,6 +1080,8 @@ impl InnerCommandBufferBuilder {
10781080
src_stages |= entry.stages;
10791081
dst_stages |= access.stages;
10801082

1083+
let range = (buffer.0).0.block_memory_range(buffer.1);
1084+
10811085
buffer_barriers.push(vk::BufferMemoryBarrier {
10821086
sType: vk::STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
10831087
pNext: ptr::null(),
@@ -1086,8 +1090,8 @@ impl InnerCommandBufferBuilder {
10861090
srcQueueFamilyIndex: vk::QUEUE_FAMILY_IGNORED,
10871091
dstQueueFamilyIndex: vk::QUEUE_FAMILY_IGNORED,
10881092
buffer: (buffer.0).0.inner_buffer().internal_object(),
1089-
offset: 0, // FIXME:
1090-
size: 10, // FIXME:
1093+
offset: range.start as u64,
1094+
size: (range.end - range.start) as u64,
10911095
});
10921096

10931097
entry.stages = access.stages;

0 commit comments

Comments
 (0)