BufferVec: always allocate a GPU buffer #10457
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective
When
BufferVec::write_buffer
is called without any data in the buffer, it does not allocate a GPU buffer, which then causes draw calls using that buffer to get skipped (usually). If the draw call does important work even with zero elements in theBufferVec
, such as clearing the render target, this work is skipped as well, resulting in incorrect output.Solution
It is unintuitive that
BufferVec
behaves like this, so this PR changes it to always allocate a GPU-side buffer whenwrite_buffer
orreserve
is called, even when that buffer ends up with a size of 0.Changelog
Fixed
Fixed
BufferVec::write_buffer
andBufferVec::reserve
not allocating a GPU-side buffer when empty.