Backends: DX12: Reuse upload buffer and grow it only when necessary #9002
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.
This PR follows up on #8963 (comment). It reuses the upload buffer whenever possible, recreating it only when necessary. It also leaves it mapped until destruction to avoid the overhead of repeated Map()/Unmap() calls. This is both safe and a recommended best practice:
I benchmarked it with the following code, and verified that the texture was reuploaded every frame:
Before:

After:

I know this benchmark is unrealistic, and in real use the performance difference is likely negligible since the texture doesn’t change that often. But it's still more efficient, and since it doesn’t really make the code more complex, I think this is a worthwhile improvement.