Browse Source

Merge pull request #2769 from FernandoS27/commands-flush

GPU: Flush commands on every dma pusher step.
nce_cpp
bunnei 6 years ago
committed by GitHub
parent
commit
2cb395b62d
  1. 1
      src/video_core/dma_pusher.cpp
  2. 4
      src/video_core/gpu.cpp
  3. 2
      src/video_core/gpu.h
  4. 3
      src/video_core/rasterizer_interface.h
  5. 4
      src/video_core/renderer_opengl/gl_rasterizer.cpp
  6. 1
      src/video_core/renderer_opengl/gl_rasterizer.h

1
src/video_core/dma_pusher.cpp

@ -31,6 +31,7 @@ void DmaPusher::DispatchCalls() {
break; break;
} }
} }
gpu.FlushCommands();
} }
bool DmaPusher::Step() { bool DmaPusher::Step() {

4
src/video_core/gpu.cpp

@ -120,6 +120,10 @@ bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) {
return true; return true;
} }
void GPU::FlushCommands() {
renderer.Rasterizer().FlushCommands();
}
u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { u32 RenderTargetBytesPerPixel(RenderTargetFormat format) {
ASSERT(format != RenderTargetFormat::NONE); ASSERT(format != RenderTargetFormat::NONE);

2
src/video_core/gpu.h

@ -153,6 +153,8 @@ public:
/// Calls a GPU method. /// Calls a GPU method.
void CallMethod(const MethodCall& method_call); void CallMethod(const MethodCall& method_call);
void FlushCommands();
/// Returns a reference to the Maxwell3D GPU engine. /// Returns a reference to the Maxwell3D GPU engine.
Engines::Maxwell3D& Maxwell3D(); Engines::Maxwell3D& Maxwell3D();

3
src/video_core/rasterizer_interface.h

@ -50,6 +50,9 @@ public:
/// and invalidated /// and invalidated
virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0; 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 /// Notify rasterizer that a frame is about to finish
virtual void TickFrame() = 0; virtual void TickFrame() = 0;

4
src/video_core/renderer_opengl/gl_rasterizer.cpp

@ -863,6 +863,10 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(CacheAddr addr, u64 size) {
InvalidateRegion(addr, size); InvalidateRegion(addr, size);
} }
void RasterizerOpenGL::FlushCommands() {
glFlush();
}
void RasterizerOpenGL::TickFrame() { void RasterizerOpenGL::TickFrame() {
buffer_cache.TickFrame(); buffer_cache.TickFrame();
} }

1
src/video_core/renderer_opengl/gl_rasterizer.h

@ -63,6 +63,7 @@ public:
void FlushRegion(CacheAddr addr, u64 size) override; void FlushRegion(CacheAddr addr, u64 size) override;
void InvalidateRegion(CacheAddr addr, u64 size) override; void InvalidateRegion(CacheAddr addr, u64 size) override;
void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override;
void FlushCommands() override;
void TickFrame() override; void TickFrame() override;
bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Regs::Surface& src, bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Regs::Surface& src,
const Tegra::Engines::Fermi2D::Regs::Surface& dst, const Tegra::Engines::Fermi2D::Regs::Surface& dst,

Loading…
Cancel
Save