bevy/crates/bevy_pbr/src/prepass
James Liu 12032cd296
Directly copy data into uniform buffers (#9865)
# 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`.
2023-09-25 19:15:37 +00:00
..
mod.rs Directly copy data into uniform buffers (#9865) 2023-09-25 19:15:37 +00:00
prepass_bindings.wgsl Use a single line for of large binding lists (#9849) 2023-09-19 22:17:44 +00:00
prepass_utils.wgsl Fix black spots appearing due to NANs when SSAO is enabled (#8926) 2023-07-01 21:29:13 +00:00
prepass.wgsl Reduce the size of MeshUniform to improve performance (#9416) 2023-08-15 06:00:23 +00:00