struct State {
trackers: RenderBundleScope,
pipeline: Option<PipelineState>,
vertex: [Option<VertexState>; 16],
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,
}Expand description
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<PipelineState>The currently set pipeline, if any.
vertex: [Option<VertexState>; 16]The 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: BinderImplementations§
Source§impl State
impl State
Sourcefn pipeline(&self) -> Result<&PipelineState, RenderBundleErrorInner>
fn pipeline(&self) -> Result<&PipelineState, RenderBundleErrorInner>
Return the current pipeline state. Return an error if none is set.
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_vertices(&mut self)
Sourcefn is_ready(&mut self) -> Result<(), DrawError>
fn is_ready(&mut self) -> 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.