mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-07-11 02:44:45 -06:00
Add GPU modification checks for buffer barriers
This commit is contained in:
parent
4045fcd358
commit
7e478aabc6
@ -202,15 +202,18 @@ void BufferCache::BindVertexBuffers(
|
||||
}
|
||||
}
|
||||
|
||||
// Map buffers for merged ranges; barrier any compute-written buffer for vertex input.
|
||||
// Map buffers for merged ranges
|
||||
for (auto& range : ranges_merged) {
|
||||
const u64 size = memory->ClampRangeSize(range.base_address, range.GetSize());
|
||||
const auto [buffer, offset] = ObtainBuffer(range.base_address, size, false);
|
||||
range.vk_buffer = buffer->buffer;
|
||||
range.offset = offset;
|
||||
if (auto barrier = buffer->GetBarrier(vk::AccessFlagBits2::eVertexAttributeRead,
|
||||
vk::PipelineStageFlagBits2::eVertexAttributeInput)) {
|
||||
barriers.emplace_back(*barrier);
|
||||
if (IsRegionGpuModified(range.base_address, size)) {
|
||||
if (auto barrier =
|
||||
buffer->GetBarrier(vk::AccessFlagBits2::eVertexAttributeRead,
|
||||
vk::PipelineStageFlagBits2::eVertexAttributeInput)) {
|
||||
barriers.emplace_back(*barrier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -264,9 +267,11 @@ void BufferCache::BindIndexBuffer(
|
||||
// Bind index buffer.
|
||||
const u32 index_buffer_size = regs.num_indices * index_size;
|
||||
const auto [vk_buffer, offset] = ObtainBuffer(index_address, index_buffer_size, false);
|
||||
if (auto barrier = vk_buffer->GetBarrier(vk::AccessFlagBits2::eIndexRead,
|
||||
vk::PipelineStageFlagBits2::eIndexInput)) {
|
||||
barriers.emplace_back(*barrier);
|
||||
if (IsRegionGpuModified(index_address, index_buffer_size)) {
|
||||
if (auto barrier = vk_buffer->GetBarrier(vk::AccessFlagBits2::eIndexRead,
|
||||
vk::PipelineStageFlagBits2::eIndexInput)) {
|
||||
barriers.emplace_back(*barrier);
|
||||
}
|
||||
}
|
||||
const auto cmdbuf = scheduler.CommandBuffer();
|
||||
cmdbuf.bindIndexBuffer(vk_buffer->Handle(), offset, index_type);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user