diff options
Diffstat (limited to 'src/video_core/gpu.cpp')
| -rw-r--r-- | src/video_core/gpu.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 2e7f9c5ed..295a416a8 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -283,6 +283,21 @@ struct GPU::Impl { | |||
| 283 | gpu_thread.FlushRegion(addr, size); | 283 | gpu_thread.FlushRegion(addr, size); |
| 284 | } | 284 | } |
| 285 | 285 | ||
| 286 | VideoCore::RasterizerDownloadArea OnCPURead(VAddr addr, u64 size) { | ||
| 287 | auto raster_area = rasterizer->GetFlushArea(addr, size); | ||
| 288 | if (raster_area.preemtive) { | ||
| 289 | return raster_area; | ||
| 290 | } | ||
| 291 | raster_area.preemtive = true; | ||
| 292 | const u64 fence = RequestSyncOperation([this, &raster_area]() { | ||
| 293 | rasterizer->FlushRegion(raster_area.start_address, | ||
| 294 | raster_area.end_address - raster_area.start_address); | ||
| 295 | }); | ||
| 296 | gpu_thread.TickGPU(); | ||
| 297 | WaitForSyncOperation(fence); | ||
| 298 | return raster_area; | ||
| 299 | } | ||
| 300 | |||
| 286 | /// Notify rasterizer that any caches of the specified region should be invalidated | 301 | /// Notify rasterizer that any caches of the specified region should be invalidated |
| 287 | void InvalidateRegion(VAddr addr, u64 size) { | 302 | void InvalidateRegion(VAddr addr, u64 size) { |
| 288 | gpu_thread.InvalidateRegion(addr, size); | 303 | gpu_thread.InvalidateRegion(addr, size); |
| @@ -538,6 +553,10 @@ void GPU::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { | |||
| 538 | impl->SwapBuffers(framebuffer); | 553 | impl->SwapBuffers(framebuffer); |
| 539 | } | 554 | } |
| 540 | 555 | ||
| 556 | VideoCore::RasterizerDownloadArea GPU::OnCPURead(VAddr addr, u64 size) { | ||
| 557 | return impl->OnCPURead(addr, size); | ||
| 558 | } | ||
| 559 | |||
| 541 | void GPU::FlushRegion(VAddr addr, u64 size) { | 560 | void GPU::FlushRegion(VAddr addr, u64 size) { |
| 542 | impl->FlushRegion(addr, size); | 561 | impl->FlushRegion(addr, size); |
| 543 | } | 562 | } |