mirror of
https://github.com/bevyengine/bevy
synced 2025-01-13 05:38:54 +00:00
12032cd296
# Objective This is a minimally disruptive version of #8340. I attempted to update it, but failed due to the scope of the changes added in #8204. Fixes #8307. Partially addresses #4642. As seen in https://github.com/bevyengine/bevy/issues/8284, we're actually copying data twice in Prepare stage systems. Once into a CPU-side intermediate scratch buffer, and once again into a mapped buffer. This is inefficient and effectively doubles the time spent and memory allocated to run these systems. ## Solution Skip the scratch buffer entirely and use `wgpu::Queue::write_buffer_with` to directly write data into mapped buffers. Separately, this also directly uses `wgpu::Limits::min_uniform_buffer_offset_alignment` to set up the alignment when writing to the buffers. Partially addressing the issue raised in #4642. Storage buffers and the abstractions built on top of `DynamicUniformBuffer` will need to come in followup PRs. This may not have a noticeable performance difference in this PR, as the only first-party systems affected by this are view related, and likely are not going to be particularly heavy. --- ## Changelog Added: `DynamicUniformBuffer::get_writer`. Added: `DynamicUniformBufferWriter`. |
||
---|---|---|
.. | ||
batched_uniform_buffer.rs | ||
bind_group.rs | ||
bind_group_layout.rs | ||
buffer.rs | ||
buffer_vec.rs | ||
gpu_array_buffer.rs | ||
mod.rs | ||
pipeline.rs | ||
pipeline_cache.rs | ||
pipeline_specializer.rs | ||
resource_macros.rs | ||
shader.rs | ||
storage_buffer.rs | ||
texture.rs | ||
uniform_buffer.rs |