Merge pull request #2769 from FernandoS27/commands-flush

GPU: Flush commands on every dma pusher step.
This commit is contained in:
bunnei 2019-08-21 10:29:56 -04:00 committed by GitHub
commit d654b3d82e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 15 additions and 0 deletions

View file

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

View file

@ -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);

View file

@ -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();

View file

@ -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;

View file

@ -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();
} }

View file

@ -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,