struct State {
trackers: RenderBundleScope,
pipeline: Option<Arc<RenderPipeline>>,
vertex: VertexState,
index: Option<IndexState>,
flat_dynamic_offsets: Vec<DynamicOffset>,
device: Arc<Device>,
commands: Vec<ArcRenderCommand>,
buffer_memory_init_actions: Vec<BufferInitTrackerAction>,
texture_memory_init_actions: Vec<TextureInitTrackerAction>,
next_dynamic_offset: usize,
binder: Binder,
immediate_slots_set: ImmediateSlots,
}Expand description
The state of a single vertex buffer slot during render bundle encoding.
RenderBundleEncoder::finish uses this to drop redundant
SetVertexBuffer commands from the final RenderBundle. It
records one vertex buffer slot’s state changes here, and then
calls this type’s flush method just before any draw command to
produce a SetVertexBuffer commands if one is necessary.
Binding ranges must be validated against the size of the buffer before
being stored in VertexState.
State for analyzing and cleaning up bundle command streams.
To minimize state updates, RenderBundleEncoder::finish
actually just applies commands like SetBindGroup and
SetIndexBuffer to the simulated state stored here, and then
calls the flush_foo methods before draw calls to produce the
update commands we actually need.
Fields§
§trackers: RenderBundleScopeResources used by this bundle. This will become RenderBundle::used.
pipeline: Option<Arc<RenderPipeline>>The currently set pipeline, if any.
vertex: VertexStateThe state of each vertex buffer slot.
index: Option<IndexState>The current index buffer, if one has been set. We flush this state before indexed draw commands.
flat_dynamic_offsets: Vec<DynamicOffset>Dynamic offset values used by the cleaned-up command sequence.
This becomes the final RenderBundle’s [BasePass]’s
dynamic_offsets list.
device: Arc<Device>§commands: Vec<ArcRenderCommand>§buffer_memory_init_actions: Vec<BufferInitTrackerAction>§texture_memory_init_actions: Vec<TextureInitTrackerAction>§next_dynamic_offset: usize§binder: Binder§immediate_slots_set: ImmediateSlotsA bitmask, tracking which 4-byte slots have been written via set_immediates.
Checked against the pipeline’s required slots before each draw call.
Implementations§
Source§impl State
impl State
Sourcefn set_index_buffer(
&mut self,
buffer: Arc<Buffer>,
format: IndexFormat,
range: Range<BufferAddress>,
)
fn set_index_buffer( &mut self, buffer: Arc<Buffer>, format: IndexFormat, range: Range<BufferAddress>, )
Set the bundle’s current index buffer and its associated parameters.
Sourcefn flush_index(&mut self)
fn flush_index(&mut self)
Generate a SetIndexBuffer command to prepare for an indexed draw
command, if needed.
fn flush_vertex_buffers(&mut self)
Sourcefn is_ready(&mut self, family: DrawCommandFamily) -> Result<(), DrawError>
fn is_ready(&mut self, family: DrawCommandFamily) -> Result<(), DrawError>
Validation for a draw command.
This should be further deduplicated with similar validation on render/compute passes.
Sourcefn flush_bindings(&mut self)
fn flush_bindings(&mut self)
Generate SetBindGroup commands for any bind groups that need to be updated.
This should be further deduplicated with similar code on render/compute passes.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for State
impl !RefUnwindSafe for State
impl Send for State
impl Sync for State
impl Unpin for State
impl !UnwindSafe for State
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more