Merge pull request #2912 from FernandoS27/async-fixes
General fixes to Async GPU
This commit is contained in:
		@@ -3,6 +3,7 @@
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include "common/assert.h"
 | 
			
		||||
#include "common/microprofile.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/core_timing.h"
 | 
			
		||||
#include "core/memory.h"
 | 
			
		||||
@@ -17,6 +18,8 @@
 | 
			
		||||
 | 
			
		||||
namespace Tegra {
 | 
			
		||||
 | 
			
		||||
MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192));
 | 
			
		||||
 | 
			
		||||
GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async)
 | 
			
		||||
    : system{system}, renderer{renderer}, is_async{is_async} {
 | 
			
		||||
    auto& rasterizer{renderer.Rasterizer()};
 | 
			
		||||
@@ -63,6 +66,16 @@ const DmaPusher& GPU::DmaPusher() const {
 | 
			
		||||
    return *dma_pusher;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPU::WaitFence(u32 syncpoint_id, u32 value) const {
 | 
			
		||||
    // Synced GPU, is always in sync
 | 
			
		||||
    if (!is_async) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    MICROPROFILE_SCOPE(GPU_wait);
 | 
			
		||||
    while (syncpoints[syncpoint_id].load(std::memory_order_relaxed) < value) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
 | 
			
		||||
    syncpoints[syncpoint_id]++;
 | 
			
		||||
    std::lock_guard lock{sync_mutex};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user