diff options
| author | bunnei <bunneidev@gmail.com> | 2019-08-21 10:29:56 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-21 10:29:56 -0400 | 
| commit | d654b3d82eed3093957223b17db12875c7752280 (patch) | |
| tree | 96d52596f4590f843b3c24a1778fe7af682e0f70 /src/video_core | |
| parent | dfdd20142e87f284257e3ef148ccc7acd7bbb7f8 (diff) | |
| parent | e52c8955595c5e3e9e88180847c8eff71356a0c2 (diff) | |
Merge pull request #2769 from FernandoS27/commands-flush
GPU: Flush commands on every dma pusher step.
Diffstat (limited to 'src/video_core')
| -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() {              break;          }      } +    gpu.FlushCommands();  }  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) {      return true;  } +void GPU::FlushCommands() { +    renderer.Rasterizer().FlushCommands(); +} +  u32 RenderTargetBytesPerPixel(RenderTargetFormat format) {      ASSERT(format != RenderTargetFormat::NONE); 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:      /// Calls a GPU method.      void CallMethod(const MethodCall& method_call); +    void FlushCommands(); +      /// Returns a reference to the Maxwell3D GPU engine.      Engines::Maxwell3D& Maxwell3D(); 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:      /// and invalidated      virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0; +    // Notify the rasterizer to send all written commands to the host GPU. +    virtual void FlushCommands() = 0; +      /// Notify rasterizer that a frame is about to finish      virtual void TickFrame() = 0; 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) {      InvalidateRegion(addr, size);  } +void RasterizerOpenGL::FlushCommands() { +    glFlush(); +} +  void RasterizerOpenGL::TickFrame() {      buffer_cache.TickFrame();  } 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:      void FlushRegion(CacheAddr addr, u64 size) override;      void InvalidateRegion(CacheAddr addr, u64 size) override;      void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; +    void FlushCommands() override;      void TickFrame() override;      bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Regs::Surface& src,                                 const Tegra::Engines::Fermi2D::Regs::Surface& dst, | 
