mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-23 10:35:03 +00:00
buffer_cache: Remove per-draw memory barrier
There are already barriers on every buffer upload and shader can only read from page table
This commit is contained in:
parent
fddded8d20
commit
6cbb304afc
@ -1036,25 +1036,6 @@ void BufferCache::SynchronizeBuffersInRange(VAddr device_addr, u64 size) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void BufferCache::MemoryBarrier() {
|
|
||||||
// Vulkan doesn't know which buffer we access in a shader if we use
|
|
||||||
// BufferDeviceAddress. We need a full memory barrier.
|
|
||||||
// For now, we only read memory using BDA. If we want to write to it,
|
|
||||||
// we might need to change this.
|
|
||||||
scheduler.EndRendering();
|
|
||||||
const auto cmdbuf = scheduler.CommandBuffer();
|
|
||||||
vk::MemoryBarrier2 barrier = {
|
|
||||||
.srcStageMask = vk::PipelineStageFlagBits2::eTransfer,
|
|
||||||
.srcAccessMask = vk::AccessFlagBits2::eMemoryWrite,
|
|
||||||
.dstStageMask = vk::PipelineStageFlagBits2::eAllCommands,
|
|
||||||
.dstAccessMask = vk::AccessFlagBits2::eMemoryRead,
|
|
||||||
};
|
|
||||||
cmdbuf.pipelineBarrier2(vk::DependencyInfo{
|
|
||||||
.memoryBarrierCount = 1,
|
|
||||||
.pMemoryBarriers = &barrier,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void BufferCache::InlineDataBuffer(Buffer& buffer, VAddr address, const void* value,
|
void BufferCache::InlineDataBuffer(Buffer& buffer, VAddr address, const void* value,
|
||||||
u32 num_bytes) {
|
u32 num_bytes) {
|
||||||
scheduler.EndRendering();
|
scheduler.EndRendering();
|
||||||
|
@ -159,9 +159,6 @@ public:
|
|||||||
/// Synchronizes all buffers neede for DMA.
|
/// Synchronizes all buffers neede for DMA.
|
||||||
void SynchronizeDmaBuffers();
|
void SynchronizeDmaBuffers();
|
||||||
|
|
||||||
/// Record memory barrier. Used for buffers when accessed via BDA.
|
|
||||||
void MemoryBarrier();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename Func>
|
template <typename Func>
|
||||||
void ForEachBufferInRange(VAddr device_addr, u64 size, Func&& func) {
|
void ForEachBufferInRange(VAddr device_addr, u64 size, Func&& func) {
|
||||||
|
@ -488,7 +488,6 @@ bool Rasterizer::BindResources(const Pipeline* pipeline) {
|
|||||||
range.upper() - range.lower());
|
range.upper() - range.lower());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffer_cache.MemoryBarrier();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fault_process_pending |= uses_dma;
|
fault_process_pending |= uses_dma;
|
||||||
|
Loading…
Reference in New Issue
Block a user