mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-22 10:04:39 +00:00
buffer_cache: Split updateBuffer calls into 65536 byte chunks. (#2915)
This commit is contained in:
parent
9baa58dd92
commit
b23f6fdc1d
@ -238,7 +238,15 @@ void BufferCache::InlineData(VAddr address, const void* value, u32 num_bytes, bo
|
|||||||
.bufferMemoryBarrierCount = 1,
|
.bufferMemoryBarrierCount = 1,
|
||||||
.pBufferMemoryBarriers = &pre_barrier,
|
.pBufferMemoryBarriers = &pre_barrier,
|
||||||
});
|
});
|
||||||
cmdbuf.updateBuffer(buffer->Handle(), buffer->Offset(address), num_bytes, value);
|
// vkCmdUpdateBuffer can only copy up to 65536 bytes at a time.
|
||||||
|
static constexpr u32 UpdateBufferMaxSize = 65536;
|
||||||
|
const auto dst_offset = buffer->Offset(address);
|
||||||
|
for (u32 offset = 0; offset < num_bytes; offset += UpdateBufferMaxSize) {
|
||||||
|
const auto* update_src = static_cast<const u8*>(value) + offset;
|
||||||
|
const auto update_dst = dst_offset + offset;
|
||||||
|
const auto update_size = std::min(num_bytes - offset, UpdateBufferMaxSize);
|
||||||
|
cmdbuf.updateBuffer(buffer->Handle(), update_dst, update_size, update_src);
|
||||||
|
}
|
||||||
cmdbuf.pipelineBarrier2(vk::DependencyInfo{
|
cmdbuf.pipelineBarrier2(vk::DependencyInfo{
|
||||||
.dependencyFlags = vk::DependencyFlagBits::eByRegion,
|
.dependencyFlags = vk::DependencyFlagBits::eByRegion,
|
||||||
.bufferMemoryBarrierCount = 1,
|
.bufferMemoryBarrierCount = 1,
|
||||||
|
Loading…
Reference in New Issue
Block a user