diff options
| author | 2019-08-21 10:29:56 -0400 | |
|---|---|---|
| committer | 2019-08-21 10:29:56 -0400 | |
| commit | d654b3d82eed3093957223b17db12875c7752280 (patch) | |
| tree | 96d52596f4590f843b3c24a1778fe7af682e0f70 /src | |
| parent | Merge pull request #2777 from ReinUsesLisp/hsetp2-fe3h-fix (diff) | |
| parent | GPU: Flush commands on every dma pusher step. (diff) | |
| download | yuzu-d654b3d82eed3093957223b17db12875c7752280.tar.gz yuzu-d654b3d82eed3093957223b17db12875c7752280.tar.xz yuzu-d654b3d82eed3093957223b17db12875c7752280.zip | |
Merge pull request #2769 from FernandoS27/commands-flush
GPU: Flush commands on every dma pusher step.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/dma_pusher.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/gpu.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 2 | ||||
| -rw-r--r-- | src/video_core/rasterizer_interface.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 1 |
6 files changed, 15 insertions, 0 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index bd036cbe8..0094fd715 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp | |||
| @@ -31,6 +31,7 @@ void DmaPusher::DispatchCalls() { | |||
| 31 | break; | 31 | break; |
| 32 | } | 32 | } |
| 33 | } | 33 | } |
| 34 | gpu.FlushCommands(); | ||
| 34 | } | 35 | } |
| 35 | 36 | ||
| 36 | bool DmaPusher::Step() { | 37 | bool DmaPusher::Step() { |
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 1622332a4..c409af194 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -120,6 +120,10 @@ bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) { | |||
| 120 | return true; | 120 | return true; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | void GPU::FlushCommands() { | ||
| 124 | renderer.Rasterizer().FlushCommands(); | ||
| 125 | } | ||
| 126 | |||
| 123 | u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | 127 | u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { |
| 124 | ASSERT(format != RenderTargetFormat::NONE); | 128 | ASSERT(format != RenderTargetFormat::NONE); |
| 125 | 129 | ||
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index 87c96f46b..11857ff99 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h | |||
| @@ -153,6 +153,8 @@ public: | |||
| 153 | /// Calls a GPU method. | 153 | /// Calls a GPU method. |
| 154 | void CallMethod(const MethodCall& method_call); | 154 | void CallMethod(const MethodCall& method_call); |
| 155 | 155 | ||
| 156 | void FlushCommands(); | ||
| 157 | |||
| 156 | /// Returns a reference to the Maxwell3D GPU engine. | 158 | /// Returns a reference to the Maxwell3D GPU engine. |
| 157 | Engines::Maxwell3D& Maxwell3D(); | 159 | Engines::Maxwell3D& Maxwell3D(); |
| 158 | 160 | ||
diff --git a/src/video_core/rasterizer_interface.h b/src/video_core/rasterizer_interface.h index 9881df0d5..6e44d51cf 100644 --- a/src/video_core/rasterizer_interface.h +++ b/src/video_core/rasterizer_interface.h | |||
| @@ -50,6 +50,9 @@ public: | |||
| 50 | /// and invalidated | 50 | /// and invalidated |
| 51 | virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0; | 51 | virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0; |
| 52 | 52 | ||
| 53 | // Notify the rasterizer to send all written commands to the host GPU. | ||
| 54 | virtual void FlushCommands() = 0; | ||
| 55 | |||
| 53 | /// Notify rasterizer that a frame is about to finish | 56 | /// Notify rasterizer that a frame is about to finish |
| 54 | virtual void TickFrame() = 0; | 57 | virtual void TickFrame() = 0; |
| 55 | 58 | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index c28ae795c..80cfda7e4 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -863,6 +863,10 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(CacheAddr addr, u64 size) { | |||
| 863 | InvalidateRegion(addr, size); | 863 | InvalidateRegion(addr, size); |
| 864 | } | 864 | } |
| 865 | 865 | ||
| 866 | void RasterizerOpenGL::FlushCommands() { | ||
| 867 | glFlush(); | ||
| 868 | } | ||
| 869 | |||
| 866 | void RasterizerOpenGL::TickFrame() { | 870 | void RasterizerOpenGL::TickFrame() { |
| 867 | buffer_cache.TickFrame(); | 871 | buffer_cache.TickFrame(); |
| 868 | } | 872 | } |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 8b123c48d..9d20a4fbf 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -63,6 +63,7 @@ public: | |||
| 63 | void FlushRegion(CacheAddr addr, u64 size) override; | 63 | void FlushRegion(CacheAddr addr, u64 size) override; |
| 64 | void InvalidateRegion(CacheAddr addr, u64 size) override; | 64 | void InvalidateRegion(CacheAddr addr, u64 size) override; |
| 65 | void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; | 65 | void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; |
| 66 | void FlushCommands() override; | ||
| 66 | void TickFrame() override; | 67 | void TickFrame() override; |
| 67 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Regs::Surface& src, | 68 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Regs::Surface& src, |
| 68 | const Tegra::Engines::Fermi2D::Regs::Surface& dst, | 69 | const Tegra::Engines::Fermi2D::Regs::Surface& dst, |