Actually add objects to the scene buffers in sorted render phases. (#17849)

There was nonsense code in `batch_and_prepare_sorted_render_phase` that
created temporary buffers to add objects to instead of using the correct
ones. I think this was debug code. This commit removes that code in
favor of writing to the actual buffers.

Closes #17846.

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
This commit is contained in:
Patrick Walton 2025-02-14 07:01:27 -08:00 committed by GitHub
parent 6b837dd297
commit 3c9e696faa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1314,7 +1314,8 @@ pub fn delete_old_work_item_buffers<GFBD>(
/// is in use. This means comparing metadata needed to draw each phase item and /// is in use. This means comparing metadata needed to draw each phase item and
/// trying to combine the draws into a batch. /// trying to combine the draws into a batch.
pub fn batch_and_prepare_sorted_render_phase<I, GFBD>( pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
indirect_parameters_buffers: Res<IndirectParametersBuffers>, mut phase_batched_instance_buffers: ResMut<PhaseBatchedInstanceBuffers<I, GFBD::BufferData>>,
mut phase_indirect_parameters_buffers: ResMut<PhaseIndirectParametersBuffers<I>>,
mut sorted_render_phases: ResMut<ViewSortedRenderPhases<I>>, mut sorted_render_phases: ResMut<ViewSortedRenderPhases<I>>,
mut views: Query<( mut views: Query<(
&ExtractedView, &ExtractedView,
@ -1326,19 +1327,13 @@ pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
I: CachedRenderPipelinePhaseItem + SortedPhaseItem, I: CachedRenderPipelinePhaseItem + SortedPhaseItem,
GFBD: GetFullBatchData, GFBD: GetFullBatchData,
{ {
let mut phase_batched_instance_buffers =
UntypedPhaseBatchedInstanceBuffers::<GFBD::BufferData>::new();
let mut phase_indirect_parameters_buffers = UntypedPhaseIndirectParametersBuffers::new(
indirect_parameters_buffers.allow_copies_from_indirect_parameter_buffers,
);
// We only process GPU-built batch data in this function. // We only process GPU-built batch data in this function.
let UntypedPhaseBatchedInstanceBuffers { let UntypedPhaseBatchedInstanceBuffers {
ref mut data_buffer, ref mut data_buffer,
ref mut work_item_buffers, ref mut work_item_buffers,
ref mut late_indexed_indirect_parameters_buffer, ref mut late_indexed_indirect_parameters_buffer,
ref mut late_non_indexed_indirect_parameters_buffer, ref mut late_non_indexed_indirect_parameters_buffer,
} = phase_batched_instance_buffers; } = phase_batched_instance_buffers.buffers;
for (extracted_view, no_indirect_drawing, gpu_occlusion_culling) in &mut views { for (extracted_view, no_indirect_drawing, gpu_occlusion_culling) in &mut views {
let Some(phase) = sorted_render_phases.get_mut(&extracted_view.retained_view_entity) else { let Some(phase) = sorted_render_phases.get_mut(&extracted_view.retained_view_entity) else {
@ -1382,7 +1377,7 @@ pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
batch.flush( batch.flush(
data_buffer.len() as u32, data_buffer.len() as u32,
phase, phase,
&mut phase_indirect_parameters_buffers, &mut phase_indirect_parameters_buffers.buffers,
); );
} }
@ -1408,15 +1403,27 @@ pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
if !can_batch { if !can_batch {
// Break a batch if we need to. // Break a batch if we need to.
if let Some(batch) = batch.take() { if let Some(batch) = batch.take() {
batch.flush(output_index, phase, &mut phase_indirect_parameters_buffers); batch.flush(
output_index,
phase,
&mut phase_indirect_parameters_buffers.buffers,
);
} }
let indirect_parameters_index = if no_indirect_drawing { let indirect_parameters_index = if no_indirect_drawing {
None None
} else if item_is_indexed { } else if item_is_indexed {
Some(phase_indirect_parameters_buffers.allocate_indexed(1)) Some(
phase_indirect_parameters_buffers
.buffers
.allocate_indexed(1),
)
} else { } else {
Some(phase_indirect_parameters_buffers.allocate_non_indexed(1)) Some(
phase_indirect_parameters_buffers
.buffers
.allocate_non_indexed(1),
)
}; };
// Start a new batch. // Start a new batch.
@ -1426,7 +1433,7 @@ pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
item_is_indexed, item_is_indexed,
output_index, output_index,
None, None,
&mut phase_indirect_parameters_buffers, &mut phase_indirect_parameters_buffers.buffers,
indirect_parameters_index, indirect_parameters_index,
); );
}; };
@ -1467,7 +1474,7 @@ pub fn batch_and_prepare_sorted_render_phase<I, GFBD>(
batch.flush( batch.flush(
data_buffer.len() as u32, data_buffer.len() as u32,
phase, phase,
&mut phase_indirect_parameters_buffers, &mut phase_indirect_parameters_buffers.buffers,
); );
} }
} }