early-access version 4156
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
yuzu emulator early access
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
This is the source code for early-access 4155.
 | 
			
		||||
This is the source code for early-access 4156.
 | 
			
		||||
 | 
			
		||||
## Legal Notice
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -436,14 +436,14 @@ Result IApplicationManagerInterface::GetApplicationViewWithPromotionInfo(
 | 
			
		||||
 | 
			
		||||
Result IApplicationManagerInterface::GetApplicationRightsOnClient(
 | 
			
		||||
    OutArray<ApplicationRightsOnClient, BufferAttr_HipcMapAlias> out_rights, Out<u32> out_count,
 | 
			
		||||
    Common::UUID account_id, u32 flags, u64 application_id) {
 | 
			
		||||
    u32 flags, u64 application_id, Uid account_id) {
 | 
			
		||||
    LOG_WARNING(Service_NS, "(STUBBED) called, flags={}, application_id={:016X}, account_id={}",
 | 
			
		||||
                flags, application_id, account_id.FormattedString());
 | 
			
		||||
                flags, application_id, account_id.uuid.FormattedString());
 | 
			
		||||
 | 
			
		||||
    if (!out_rights.empty()) {
 | 
			
		||||
        ApplicationRightsOnClient rights{};
 | 
			
		||||
        rights.application_id = application_id;
 | 
			
		||||
        rights.uid = account_id;
 | 
			
		||||
        rights.uid = account_id.uuid;
 | 
			
		||||
        rights.flags = 0;
 | 
			
		||||
        rights.flags2 = 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ public:
 | 
			
		||||
        InArray<u64, BufferAttr_HipcMapAlias> application_ids);
 | 
			
		||||
    Result GetApplicationRightsOnClient(
 | 
			
		||||
        OutArray<ApplicationRightsOnClient, BufferAttr_HipcMapAlias> out_rights, Out<u32> out_count,
 | 
			
		||||
        Common::UUID account_id, u32 flags, u64 application_id);
 | 
			
		||||
        u32 flags, u64 application_id, Uid account_id);
 | 
			
		||||
    Result CheckSdCardMountStatus();
 | 
			
		||||
    Result GetSdCardMountStatusChangedEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
 | 
			
		||||
    Result GetFreeSpaceSize(Out<s64> out_free_space_size, FileSys::StorageId storage_id);
 | 
			
		||||
 
 | 
			
		||||
@@ -108,4 +108,9 @@ struct ContentPath {
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(ContentPath) == 0x10, "ContentPath has incorrect size.");
 | 
			
		||||
 | 
			
		||||
struct Uid {
 | 
			
		||||
    alignas(8) Common::UUID uuid;
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(Uid) == 0x10, "Uid has incorrect size.");
 | 
			
		||||
 | 
			
		||||
} // namespace Service::NS
 | 
			
		||||
 
 | 
			
		||||
@@ -41,8 +41,7 @@ IQueryService::IQueryService(Core::System& system_) : ServiceFramework{system_,
 | 
			
		||||
IQueryService::~IQueryService() = default;
 | 
			
		||||
 | 
			
		||||
Result IQueryService::QueryPlayStatisticsByApplicationIdAndUserAccountId(
 | 
			
		||||
    Out<PlayStatistics> out_play_statistics, bool unknown, Common::UUID account_id,
 | 
			
		||||
    u64 application_id) {
 | 
			
		||||
    Out<PlayStatistics> out_play_statistics, bool unknown, u64 application_id, Uid account_id) {
 | 
			
		||||
    // TODO(German77): Read statistics of the game
 | 
			
		||||
    *out_play_statistics = {
 | 
			
		||||
        .application_id = application_id,
 | 
			
		||||
@@ -50,7 +49,7 @@ Result IQueryService::QueryPlayStatisticsByApplicationIdAndUserAccountId(
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_NS, "(STUBBED) called. unknown={}. application_id={:016X}, account_id={}",
 | 
			
		||||
                unknown, application_id, account_id.FormattedString());
 | 
			
		||||
                unknown, application_id, account_id.uuid.FormattedString());
 | 
			
		||||
    R_SUCCEED();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@
 | 
			
		||||
 | 
			
		||||
#include "common/uuid.h"
 | 
			
		||||
#include "core/hle/service/cmif_types.h"
 | 
			
		||||
#include "core/hle/service/ns/ns_types.h"
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::NS {
 | 
			
		||||
@@ -29,8 +30,7 @@ public:
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Result QueryPlayStatisticsByApplicationIdAndUserAccountId(
 | 
			
		||||
        Out<PlayStatistics> out_play_statistics, bool unknown, Common::UUID account_id,
 | 
			
		||||
        u64 application_id);
 | 
			
		||||
        Out<PlayStatistics> out_play_statistics, bool unknown, u64 application_id, Uid account_id);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::NS
 | 
			
		||||
 
 | 
			
		||||
@@ -72,12 +72,19 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
 | 
			
		||||
 | 
			
		||||
template <class P>
 | 
			
		||||
void TextureCache<P>::RunGarbageCollector() {
 | 
			
		||||
    bool high_priority_mode = total_used_memory >= expected_memory;
 | 
			
		||||
    bool aggressive_mode = total_used_memory >= critical_memory;
 | 
			
		||||
    const u64 ticks_to_destroy = aggressive_mode ? 10ULL : high_priority_mode ? 25ULL : 50ULL;
 | 
			
		||||
    size_t num_iterations = aggressive_mode ? 40 : (high_priority_mode ? 20 : 10);
 | 
			
		||||
    const auto clean_up = [this, &num_iterations, &high_priority_mode,
 | 
			
		||||
                           &aggressive_mode](ImageId image_id) {
 | 
			
		||||
    bool high_priority_mode = false;
 | 
			
		||||
    bool aggressive_mode = false;
 | 
			
		||||
    u64 ticks_to_destroy = 0;
 | 
			
		||||
    size_t num_iterations = 0;
 | 
			
		||||
 | 
			
		||||
    const auto Configure = [&](bool allow_aggressive) {
 | 
			
		||||
        high_priority_mode = total_used_memory >= expected_memory;
 | 
			
		||||
        aggressive_mode = allow_aggressive && total_used_memory >= critical_memory;
 | 
			
		||||
        ticks_to_destroy = aggressive_mode ? 10ULL : high_priority_mode ? 25ULL : 50ULL;
 | 
			
		||||
        num_iterations = aggressive_mode ? 40 : (high_priority_mode ? 20 : 10);
 | 
			
		||||
    };
 | 
			
		||||
    const auto Cleanup = [this, &num_iterations, &high_priority_mode,
 | 
			
		||||
                          &aggressive_mode](ImageId image_id) {
 | 
			
		||||
        if (num_iterations == 0) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
@@ -123,7 +130,16 @@ void TextureCache<P>::RunGarbageCollector() {
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    };
 | 
			
		||||
    lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, clean_up);
 | 
			
		||||
 | 
			
		||||
    // Try to remove anything old enough and not high priority.
 | 
			
		||||
    Configure(false);
 | 
			
		||||
    lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, Cleanup);
 | 
			
		||||
 | 
			
		||||
    // If pressure is still too high, prune aggressively.
 | 
			
		||||
    if (total_used_memory >= critical_memory) {
 | 
			
		||||
        Configure(true);
 | 
			
		||||
        lru_cache.ForEachItemBelow(frame_tick - ticks_to_destroy, Cleanup);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class P>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user