diff options
author | bunnei <bunneidev@gmail.com> | 2019-02-24 06:15:35 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2019-03-16 05:38:48 +0100 |
commit | 574e89d924b484b846f4eb522c5a62af9d63e801 (patch) | |
tree | 24b2d6e21b9e3aff77f2242eb94ec49a2b8e67c9 /src/video_core/engines/kepler_memory.cpp | |
parent | Merge pull request #2237 from bunnei/cache-host-addr (diff) | |
download | yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar.gz yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar.bz2 yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar.lz yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar.xz yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.tar.zst yuzu-574e89d924b484b846f4eb522c5a62af9d63e801.zip |
Diffstat (limited to 'src/video_core/engines/kepler_memory.cpp')
-rw-r--r-- | src/video_core/engines/kepler_memory.cpp | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/video_core/engines/kepler_memory.cpp b/src/video_core/engines/kepler_memory.cpp index daefa43a6..0931b9626 100644 --- a/src/video_core/engines/kepler_memory.cpp +++ b/src/video_core/engines/kepler_memory.cpp @@ -41,18 +41,13 @@ void KeplerMemory::ProcessData(u32 data) { ASSERT_MSG(regs.exec.linear, "Non-linear uploads are not supported"); ASSERT(regs.dest.x == 0 && regs.dest.y == 0 && regs.dest.z == 0); - const GPUVAddr address = regs.dest.Address(); - const auto dest_address = - memory_manager.GpuToCpuAddress(address + state.write_offset * sizeof(u32)); - ASSERT_MSG(dest_address, "Invalid GPU address"); - // We have to invalidate the destination region to evict any outdated surfaces from the cache. - // We do this before actually writing the new data because the destination address might contain - // a dirty surface that will have to be written back to memory. - system.Renderer().Rasterizer().InvalidateRegion(ToCacheAddr(Memory::GetPointer(*dest_address)), - sizeof(u32)); + // We do this before actually writing the new data because the destination address might + // contain a dirty surface that will have to be written back to memory. + const GPUVAddr address{regs.dest.Address() + state.write_offset * sizeof(u32)}; + rasterizer.InvalidateRegion(ToCacheAddr(memory_manager.GetPointer(address)), sizeof(u32)); + memory_manager.Write32(address, data); - Memory::Write32(*dest_address, data); system.GPU().Maxwell3D().dirty_flags.OnMemoryWrite(); state.write_offset++; |