mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-03-02 19:16:56 +00:00
Vulkan: Defrag buffers when growing.
This commit is contained in:
parent
f2513ffcd6
commit
9e4389cbf5
@ -76,3 +76,17 @@ void VulkanPushBuffer::NextBuffer() {
|
||||
offset_ = 0;
|
||||
Map(device);
|
||||
}
|
||||
|
||||
void VulkanPushBuffer::Defragment() {
|
||||
if (buffers_.size() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Okay, we have more than one. Destroy them all and start over with a larger one.
|
||||
size_t newSize = size_ * buffers_.size();
|
||||
Destroy(ctx_);
|
||||
|
||||
size_ = newSize;
|
||||
bool res = AddBuffer();
|
||||
assert(res);
|
||||
}
|
||||
|
@ -14,8 +14,6 @@
|
||||
// has completed.
|
||||
//
|
||||
// TODO: Make it possible to suballocate pushbuffers from a large DeviceMemory block.
|
||||
// TODO: Make this auto-grow and shrink. Need to be careful about returning and using the new
|
||||
// buffer handle on overflow.
|
||||
class VulkanPushBuffer {
|
||||
struct BufInfo {
|
||||
VkBuffer buffer;
|
||||
@ -43,6 +41,7 @@ public:
|
||||
void Begin(VkDevice device) {
|
||||
buf_ = 0;
|
||||
offset_ = 0;
|
||||
Defragment();
|
||||
Map(device);
|
||||
}
|
||||
|
||||
@ -117,6 +116,7 @@ public:
|
||||
private:
|
||||
bool AddBuffer();
|
||||
void NextBuffer();
|
||||
void Defragment();
|
||||
|
||||
VulkanContext *ctx_;
|
||||
std::vector<BufInfo> buffers_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user