diff options
| author | 2023-08-27 04:26:59 +0200 | |
|---|---|---|
| committer | 2023-08-27 04:26:59 +0200 | |
| commit | ada4697300fce6a139bd78d548f151f9f4599ad3 (patch) | |
| tree | aeadfc8ee130fa26ec6daeedf1f16606fbeda36d | |
| parent | Merge pull request #11356 from lat9nq/console-mode-pg (diff) | |
| parent | Buffer Cache: fix discard writes. (diff) | |
| download | yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.gz yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.tar.xz yuzu-ada4697300fce6a139bd78d548f151f9f4599ad3.zip | |
Merge pull request #11389 from FernandoS27/discard-fix
Buffer Cache: fix discard writes.
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index f0f450edb..8be7bd594 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -289,8 +289,11 @@ std::pair<typename P::Buffer*, u32> BufferCache<P>::ObtainBuffer(GPUVAddr gpu_ad | |||
| 289 | MarkWrittenBuffer(buffer_id, *cpu_addr, size); | 289 | MarkWrittenBuffer(buffer_id, *cpu_addr, size); |
| 290 | break; | 290 | break; |
| 291 | case ObtainBufferOperation::DiscardWrite: { | 291 | case ObtainBufferOperation::DiscardWrite: { |
| 292 | IntervalType interval{*cpu_addr, size}; | 292 | VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64); |
| 293 | VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64); | ||
| 294 | IntervalType interval{cpu_addr_start, cpu_addr_end}; | ||
| 293 | ClearDownload(interval); | 295 | ClearDownload(interval); |
| 296 | common_ranges.subtract(interval); | ||
| 294 | break; | 297 | break; |
| 295 | } | 298 | } |
| 296 | default: | 299 | default: |
| @@ -1159,6 +1162,11 @@ void BufferCache<P>::UpdateDrawIndirect() { | |||
| 1159 | .size = static_cast<u32>(size), | 1162 | .size = static_cast<u32>(size), |
| 1160 | .buffer_id = FindBuffer(*cpu_addr, static_cast<u32>(size)), | 1163 | .buffer_id = FindBuffer(*cpu_addr, static_cast<u32>(size)), |
| 1161 | }; | 1164 | }; |
| 1165 | VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64); | ||
| 1166 | VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64); | ||
| 1167 | IntervalType interval{cpu_addr_start, cpu_addr_end}; | ||
| 1168 | ClearDownload(interval); | ||
| 1169 | common_ranges.subtract(interval); | ||
| 1162 | }; | 1170 | }; |
| 1163 | if (current_draw_indirect->include_count) { | 1171 | if (current_draw_indirect->include_count) { |
| 1164 | update(current_draw_indirect->count_start_address, sizeof(u32), | 1172 | update(current_draw_indirect->count_start_address, sizeof(u32), |