diff options
| author | 2019-03-09 14:36:52 -0500 | |
|---|---|---|
| committer | 2019-03-20 22:36:03 -0400 | |
| commit | 19330f45d3d0efbf490a436c8689f30c4fc79e44 (patch) | |
| tree | 59080c865990886517466db9e76a29b6c7f5cea7 /src | |
| parent | memory_manager: Add protections for invalid GPU addresses. (diff) | |
| download | yuzu-19330f45d3d0efbf490a436c8689f30c4fc79e44.tar.gz yuzu-19330f45d3d0efbf490a436c8689f30c4fc79e44.tar.xz yuzu-19330f45d3d0efbf490a436c8689f30c4fc79e44.zip | |
maxwell_dma: Check for valid source in destination before copy.
- Avoid a crash in Octopath Traveler.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/engines/maxwell_dma.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/video_core/engines/maxwell_dma.cpp b/src/video_core/engines/maxwell_dma.cpp index a0ded4c25..5cca5c29a 100644 --- a/src/video_core/engines/maxwell_dma.cpp +++ b/src/video_core/engines/maxwell_dma.cpp | |||
| @@ -88,6 +88,16 @@ void MaxwellDMA::HandleCopy() { | |||
| 88 | auto source_ptr{memory_manager.GetPointer(source)}; | 88 | auto source_ptr{memory_manager.GetPointer(source)}; |
| 89 | auto dst_ptr{memory_manager.GetPointer(dest)}; | 89 | auto dst_ptr{memory_manager.GetPointer(dest)}; |
| 90 | 90 | ||
| 91 | if (!source_ptr) { | ||
| 92 | LOG_ERROR(HW_GPU, "source_ptr is invalid"); | ||
| 93 | return; | ||
| 94 | } | ||
| 95 | |||
| 96 | if (!dst_ptr) { | ||
| 97 | LOG_ERROR(HW_GPU, "dst_ptr is invalid"); | ||
| 98 | return; | ||
| 99 | } | ||
| 100 | |||
| 91 | const auto FlushAndInvalidate = [&](u32 src_size, u64 dst_size) { | 101 | const auto FlushAndInvalidate = [&](u32 src_size, u64 dst_size) { |
| 92 | // TODO(Subv): For now, manually flush the regions until we implement GPU-accelerated | 102 | // TODO(Subv): For now, manually flush the regions until we implement GPU-accelerated |
| 93 | // copying. | 103 | // copying. |