Fix buffer init in bundle.rs with mem::size_of::<wgt::DrawIndirectArgs>

This commit is contained in:
Andreas Reich 2021-01-31 22:01:52 +01:00
parent 4f5acba5fb
commit 822424e519

View File

@ -57,7 +57,7 @@ use crate::{
Label, LabelHelpers, LifeGuard, Stored, MAX_BIND_GROUPS, Label, LabelHelpers, LifeGuard, Stored, MAX_BIND_GROUPS,
}; };
use arrayvec::ArrayVec; use arrayvec::ArrayVec;
use std::{borrow::Cow, iter, ops::Range}; use std::{borrow::Cow, iter, mem, ops::Range};
use thiserror::Error; use thiserror::Error;
/// Describes a [`RenderBundleEncoder`]. /// Describes a [`RenderBundleEncoder`].
@ -393,7 +393,7 @@ impl RenderBundleEncoder {
} }
RenderCommand::MultiDrawIndirect { RenderCommand::MultiDrawIndirect {
buffer_id, buffer_id,
offset: _, offset,
count: None, count: None,
indexed: false, indexed: false,
} => { } => {
@ -410,11 +410,18 @@ impl RenderBundleEncoder {
check_buffer_usage(buffer.usage, wgt::BufferUsage::INDIRECT) check_buffer_usage(buffer.usage, wgt::BufferUsage::INDIRECT)
.map_pass_err(scope)?; .map_pass_err(scope)?;
buffer_memory_init_actions.push(MemoryInitTrackerAction { buffer_memory_init_actions.extend(
id: buffer_id, buffer
range: 0..buffer.size, .initialization_status
kind: MemoryInitKind::NeedsInitializedMemory, .check(
}); offset..(offset + mem::size_of::<wgt::DrawIndirectArgs>() as u64),
)
.map(|range| MemoryInitTrackerAction {
id: buffer_id,
range,
kind: MemoryInitKind::NeedsInitializedMemory,
}),
);
commands.extend(state.flush_vertices()); commands.extend(state.flush_vertices());
commands.extend(state.flush_binds()); commands.extend(state.flush_binds());
@ -422,7 +429,7 @@ impl RenderBundleEncoder {
} }
RenderCommand::MultiDrawIndirect { RenderCommand::MultiDrawIndirect {
buffer_id, buffer_id,
offset: _, offset,
count: None, count: None,
indexed: true, indexed: true,
} => { } => {
@ -440,12 +447,18 @@ impl RenderBundleEncoder {
check_buffer_usage(buffer.usage, wgt::BufferUsage::INDIRECT) check_buffer_usage(buffer.usage, wgt::BufferUsage::INDIRECT)
.map_pass_err(scope)?; .map_pass_err(scope)?;
let stride = 4 * 4; // 4 integers, vertexCount, instanceCount, firstVertex, firstInstance buffer_memory_init_actions.extend(
buffer_memory_init_actions.push(MemoryInitTrackerAction { buffer
id: buffer_id, .initialization_status
range: 0..stride, .check(
kind: MemoryInitKind::NeedsInitializedMemory, offset..(offset + mem::size_of::<wgt::DrawIndirectArgs>() as u64),
}); )
.map(|range| MemoryInitTrackerAction {
id: buffer_id,
range,
kind: MemoryInitKind::NeedsInitializedMemory,
}),
);
commands.extend(state.index.flush()); commands.extend(state.index.flush());
commands.extend(state.flush_vertices()); commands.extend(state.flush_vertices());