summaryrefslogtreecommitdiff
path: root/src/video_core/engines
diff options
context:
space:
mode:
authorGravatar bunnei2020-04-22 22:09:38 -0400
committerGravatar GitHub2020-04-22 22:09:38 -0400
commitbf2ddb8fd5feaeaf2806fe102de8e3089f893137 (patch)
treeb97d388da23608c00808b6662e3c0564fc4f6d59 /src/video_core/engines
parentMerge pull request #3767 from ReinUsesLisp/point-size-pipeline (diff)
parentGL_Fence_Manager: use GL_TIMEOUT_IGNORED instead of a loop, (diff)
downloadyuzu-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.cpp8
-rw-r--r--src/video_core/engines/maxwell_dma.cpp11
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 {