early-access version 3902
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
yuzu emulator early access
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
This is the source code for early-access 3901.
 | 
			
		||||
This is the source code for early-access 3902.
 | 
			
		||||
 | 
			
		||||
## Legal Notice
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -542,6 +542,7 @@ void EmulatedController::UnloadInput() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmulatedController::EnableConfiguration() {
 | 
			
		||||
    std::scoped_lock lock{connect_mutex, npad_mutex};
 | 
			
		||||
    is_configuring = true;
 | 
			
		||||
    tmp_is_connected = is_connected;
 | 
			
		||||
    tmp_npad_type = npad_type;
 | 
			
		||||
@@ -1556,7 +1557,7 @@ void EmulatedController::Connect(bool use_temporary_value) {
 | 
			
		||||
 | 
			
		||||
    auto trigger_guard =
 | 
			
		||||
        SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Connected, !is_configuring); });
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    std::scoped_lock lock{connect_mutex, mutex};
 | 
			
		||||
    if (is_configuring) {
 | 
			
		||||
        tmp_is_connected = true;
 | 
			
		||||
        return;
 | 
			
		||||
@@ -1572,7 +1573,7 @@ void EmulatedController::Connect(bool use_temporary_value) {
 | 
			
		||||
void EmulatedController::Disconnect() {
 | 
			
		||||
    auto trigger_guard =
 | 
			
		||||
        SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Disconnected, !is_configuring); });
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    std::scoped_lock lock{connect_mutex, mutex};
 | 
			
		||||
    if (is_configuring) {
 | 
			
		||||
        tmp_is_connected = false;
 | 
			
		||||
        return;
 | 
			
		||||
@@ -1586,7 +1587,7 @@ void EmulatedController::Disconnect() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool EmulatedController::IsConnected(bool get_temporary_value) const {
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    std::scoped_lock lock{connect_mutex};
 | 
			
		||||
    if (get_temporary_value && is_configuring) {
 | 
			
		||||
        return tmp_is_connected;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1599,7 +1600,7 @@ NpadIdType EmulatedController::GetNpadIdType() const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NpadStyleIndex EmulatedController::GetNpadStyleIndex(bool get_temporary_value) const {
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    std::scoped_lock lock{npad_mutex};
 | 
			
		||||
    if (get_temporary_value && is_configuring) {
 | 
			
		||||
        return tmp_npad_type;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1609,7 +1610,7 @@ NpadStyleIndex EmulatedController::GetNpadStyleIndex(bool get_temporary_value) c
 | 
			
		||||
void EmulatedController::SetNpadStyleIndex(NpadStyleIndex npad_type_) {
 | 
			
		||||
    auto trigger_guard =
 | 
			
		||||
        SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Type, !is_configuring); });
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    std::scoped_lock lock{mutex, npad_mutex};
 | 
			
		||||
 | 
			
		||||
    if (is_configuring) {
 | 
			
		||||
        if (tmp_npad_type == npad_type_) {
 | 
			
		||||
 
 | 
			
		||||
@@ -603,6 +603,8 @@ private:
 | 
			
		||||
 | 
			
		||||
    mutable std::mutex mutex;
 | 
			
		||||
    mutable std::mutex callback_mutex;
 | 
			
		||||
    mutable std::mutex npad_mutex;
 | 
			
		||||
    mutable std::mutex connect_mutex;
 | 
			
		||||
    std::unordered_map<int, ControllerUpdateCallback> callback_list;
 | 
			
		||||
    int last_callback_key = 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,9 @@ void KHardwareTimer::DoTask() {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Disable the timer interrupt while we handle this.
 | 
			
		||||
        this->DisableInterrupt();
 | 
			
		||||
        // Not necessary due to core timing already having popped this event to call it.
 | 
			
		||||
        // this->DisableInterrupt();
 | 
			
		||||
        m_wakeup_time = std::numeric_limits<s64>::max();
 | 
			
		||||
 | 
			
		||||
        if (const s64 next_time = this->DoInterruptTaskImpl(GetTick());
 | 
			
		||||
            0 < next_time && next_time <= m_wakeup_time) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user