Esempio n. 1
0
bool AsyncIOManager::WaitResult(u32 handle, AsyncIOResult &result) {
	std::unique_lock<std::mutex> guard(resultsLock_);
	ScheduleEvent(IO_EVENT_SYNC);
	while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) {
		if (PopResult(handle, result)) {
			return true;
		}
		resultsWait_.wait_for(guard, std::chrono::milliseconds(16));
	}
	return PopResult(handle, result);
}
Esempio n. 2
0
bool GPU_Vulkan::FramebufferReallyDirty() {
	if (ThreadEnabled()) {
		// Allow it to process fully before deciding if it's dirty.
		SyncThread();
	}

	VirtualFramebuffer *vfb = framebufferManager_->GetDisplayVFB();
	if (vfb) {
		bool dirty = vfb->reallyDirtyAfterDisplay;
		vfb->reallyDirtyAfterDisplay = false;
		return dirty;
	}
	return true;
}
Esempio n. 3
0
bool AsyncIOManager::WaitResult(u32 handle, AsyncIOResult &result) {
	lock_guard guard(resultsLock_);
	ScheduleEvent(IO_EVENT_SYNC);
	while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) {
		if (PopResult(handle, result)) {
			return true;
		}
		resultsWait_.wait_for(resultsLock_, 16);
	}
	if (PopResult(handle, result)) {
		return true;
	}

	return false;
}
Esempio n. 4
0
u64 AsyncIOManager::ResultFinishTicks(u32 handle) {
	AsyncIOResult result;

	lock_guard guard(resultsLock_);
	ScheduleEvent(IO_EVENT_SYNC);
	while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) {
		if (ReadResult(handle, result)) {
			return result.finishTicks;
		}
		resultsWait_.wait_for(resultsLock_, 16);
	}
	if (ReadResult(handle, result)) {
		return result.finishTicks;
	}

	return 0;
}
Esempio n. 5
0
u64 AsyncIOManager::ResultFinishTicks(u32 handle) {
	AsyncIOResult result;

	std::unique_lock<std::mutex> guard(resultsLock_);
	ScheduleEvent(IO_EVENT_SYNC);
	while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) {
		if (ReadResult(handle, result)) {
			return result.finishTicks;
		}
		resultsWait_.wait_for(guard, std::chrono::milliseconds(16));
	}
	if (ReadResult(handle, result)) {
		return result.finishTicks;
	}

	return 0;
}