diff options
| author | 2020-04-22 22:09:38 -0400 | |
|---|---|---|
| committer | 2020-04-22 22:09:38 -0400 | |
| commit | bf2ddb8fd5feaeaf2806fe102de8e3089f893137 (patch) | |
| tree | b97d388da23608c00808b6662e3c0564fc4f6d59 /src/video_core/engines | |
| parent | Merge pull request #3767 from ReinUsesLisp/point-size-pipeline (diff) | |
| parent | GL_Fence_Manager: use GL_TIMEOUT_IGNORED instead of a loop, (diff) | |
| download | yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.gz yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.tar.xz yuzu-bf2ddb8fd5feaeaf2806fe102de8e3089f893137.zip | |
Merge pull request #3677 from FernandoS27/better-sync
Introduce Predictive Flushing and Improve ASYNC GPU
Diffstat (limited to 'src/video_core/engines')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_dma.cpp | 11 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index baa74ad4c..2824ed707 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp | |||
| @@ -404,7 +404,11 @@ void Maxwell3D::ProcessQueryGet() { | |||
| 404 | 404 | ||
| 405 | switch (regs.query.query_get.operation) { | 405 | switch (regs.query.query_get.operation) { |
| 406 | case Regs::QueryOperation::Release: | 406 | case Regs::QueryOperation::Release: |
| 407 | StampQueryResult(regs.query.query_sequence, regs.query.query_get.short_query == 0); | 407 | if (regs.query.query_get.fence == 1) { |
| 408 | rasterizer.SignalSemaphore(regs.query.QueryAddress(), regs.query.query_sequence); | ||
| 409 | } else { | ||
| 410 | StampQueryResult(regs.query.query_sequence, regs.query.query_get.short_query == 0); | ||
| 411 | } | ||
| 408 | break; | 412 | break; |
| 409 | case Regs::QueryOperation::Acquire: | 413 | case Regs::QueryOperation::Acquire: |
| 410 | // TODO(Blinkhawk): Under this operation, the GPU waits for the CPU to write a value that | 414 | // TODO(Blinkhawk): Under this operation, the GPU waits for the CPU to write a value that |
| @@ -483,7 +487,7 @@ void Maxwell3D::ProcessSyncPoint() { | |||
| 483 | const u32 increment = regs.sync_info.increment.Value(); | 487 | const u32 increment = regs.sync_info.increment.Value(); |
| 484 | [[maybe_unused]] const u32 cache_flush = regs.sync_info.unknown.Value(); | 488 | [[maybe_unused]] const u32 cache_flush = regs.sync_info.unknown.Value(); |
| 485 | if (increment) { | 489 | if (increment) { |
| 486 | system.GPU().IncrementSyncPoint(sync_point); | 490 | rasterizer.SignalSyncPoint(sync_point); |
| 487 | } | 491 | } |
| 488 | } | 492 | } |
| 489 | 493 | ||
diff --git a/src/video_core/engines/maxwell_dma.cpp b/src/video_core/engines/maxwell_dma.cpp index c2610f992..3bfed6ab8 100644 --- a/src/video_core/engines/maxwell_dma.cpp +++ b/src/video_core/engines/maxwell_dma.cpp | |||
| @@ -104,8 +104,13 @@ void MaxwellDMA::HandleCopy() { | |||
| 104 | write_buffer.resize(dst_size); | 104 | write_buffer.resize(dst_size); |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | memory_manager.ReadBlock(source, read_buffer.data(), src_size); | 107 | if (Settings::IsGPULevelExtreme()) { |
| 108 | memory_manager.ReadBlock(dest, write_buffer.data(), dst_size); | 108 | memory_manager.ReadBlock(source, read_buffer.data(), src_size); |
| 109 | memory_manager.ReadBlock(dest, write_buffer.data(), dst_size); | ||
| 110 | } else { | ||
| 111 | memory_manager.ReadBlockUnsafe(source, read_buffer.data(), src_size); | ||
| 112 | memory_manager.ReadBlockUnsafe(dest, write_buffer.data(), dst_size); | ||
| 113 | } | ||
| 109 | 114 | ||
| 110 | Texture::UnswizzleSubrect( | 115 | Texture::UnswizzleSubrect( |
| 111 | regs.x_count, regs.y_count, regs.dst_pitch, regs.src_params.size_x, bytes_per_pixel, | 116 | regs.x_count, regs.y_count, regs.dst_pitch, regs.src_params.size_x, bytes_per_pixel, |
| @@ -136,7 +141,7 @@ void MaxwellDMA::HandleCopy() { | |||
| 136 | write_buffer.resize(dst_size); | 141 | write_buffer.resize(dst_size); |
| 137 | } | 142 | } |
| 138 | 143 | ||
| 139 | if (Settings::values.use_accurate_gpu_emulation) { | 144 | if (Settings::IsGPULevelExtreme()) { |
| 140 | memory_manager.ReadBlock(source, read_buffer.data(), src_size); | 145 | memory_manager.ReadBlock(source, read_buffer.data(), src_size); |
| 141 | memory_manager.ReadBlock(dest, write_buffer.data(), dst_size); | 146 | memory_manager.ReadBlock(dest, write_buffer.data(), dst_size); |
| 142 | } else { | 147 | } else { |