Compare commits

...

9 Commits

Author SHA1 Message Date
a8f9c8166a Android #92 2023-10-06 00:57:55 +00:00
7a0da729b4 Merge pull request #11657 from liamwhite/new-codespell
ci: fix new codespell errors
2023-10-02 18:05:55 -04:00
0448eb6f0f ci: fix new codespell errors 2023-10-02 18:03:05 -04:00
ff57c66773 Merge pull request #11652 from liamwhite/shutdown-goes-brrr
k_page_table: skip page table clearing on finalization
2023-10-02 11:28:24 -04:00
c6d552f29b Merge pull request #11655 from liamwhite/additional-dump-targets
qt: add additional romfs dump targets
2023-10-02 11:28:14 -04:00
7f9b64519d Merge pull request #11651 from liamwhite/fsc-creation
fsp-srv: enable auto save data creation on init
2023-10-02 09:22:41 -06:00
d89ef6280c qt: add additional romfs dump targets 2023-10-02 09:23:25 -04:00
8fb13372c2 k_page_table: skip page table clearing on finalization 2023-10-01 23:38:56 -04:00
f9521f5bd4 fsp-srv: enable auto save data creation on init 2023-10-01 23:33:19 -04:00
15 changed files with 47 additions and 24 deletions

View File

@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project # SPDX-FileCopyrightText: 2019 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
# Gets a UTC timstamp and sets the provided variable to it # Gets a UTC timestamp and sets the provided variable to it
function(get_timestamp _var) function(get_timestamp _var)
string(TIMESTAMP timestamp UTC) string(TIMESTAMP timestamp UTC)
set(${_var} "${timestamp}" PARENT_SCOPE) set(${_var} "${timestamp}" PARENT_SCOPE)

View File

@ -1,3 +1,11 @@
| Pull Request | Commit | Title | Author | Merged? |
|----|----|----|----|----|
End of merge log. You can find the original README.md below the break.
-----
<!-- <!--
SPDX-FileCopyrightText: 2018 yuzu Emulator Project SPDX-FileCopyrightText: 2018 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later SPDX-License-Identifier: GPL-2.0-or-later

View File

@ -16,7 +16,7 @@ namespace AudioCore::Renderer {
/** /**
* AudioRenderer command for preparing depop. * AudioRenderer command for preparing depop.
* Adds the previusly output last samples to the depop buffer. * Adds the previously output last samples to the depop buffer.
*/ */
struct DepopPrepareCommand : ICommand { struct DepopPrepareCommand : ICommand {
/** /**

View File

@ -175,7 +175,7 @@ public:
return Write(reinterpret_cast<const u8*>(&data), sizeof(T), offset); return Write(reinterpret_cast<const u8*>(&data), sizeof(T), offset);
} }
// Renames the file to name. Returns whether or not the operation was successsful. // Renames the file to name. Returns whether or not the operation was successful.
virtual bool Rename(std::string_view name) = 0; virtual bool Rename(std::string_view name) = 0;
// Returns the full path of this file as a string, recursively // Returns the full path of this file as a string, recursively

View File

@ -61,7 +61,7 @@ bool KMemoryRegionTree::Insert(u64 address, size_t size, u32 type_id, u32 new_at
found->Reset(address, inserted_region_last, old_pair, new_attr, type_id); found->Reset(address, inserted_region_last, old_pair, new_attr, type_id);
this->insert(*found); this->insert(*found);
} else { } else {
// If we can't re-use, adjust the old region. // If we can't reuse, adjust the old region.
found->Reset(old_address, address - 1, old_pair, old_attr, old_type); found->Reset(old_address, address - 1, old_pair, old_attr, old_type);
this->insert(*found); this->insert(*found);

View File

@ -5,6 +5,7 @@
#include "common/assert.h" #include "common/assert.h"
#include "common/literals.h" #include "common/literals.h"
#include "common/scope_exit.h" #include "common/scope_exit.h"
#include "common/settings.h"
#include "core/core.h" #include "core/core.h"
#include "core/hle/kernel/k_address_space_info.h" #include "core/hle/kernel/k_address_space_info.h"
#include "core/hle/kernel/k_memory_block.h" #include "core/hle/kernel/k_memory_block.h"
@ -337,11 +338,14 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type
} }
void KPageTable::Finalize() { void KPageTable::Finalize() {
auto HostUnmapCallback = [&](KProcessAddress addr, u64 size) {
if (Settings::IsFastmemEnabled()) {
m_system.DeviceMemory().buffer.Unmap(GetInteger(addr), size);
}
};
// Finalize memory blocks. // Finalize memory blocks.
m_memory_block_manager.Finalize(m_memory_block_slab_manager, m_memory_block_manager.Finalize(m_memory_block_slab_manager, std::move(HostUnmapCallback));
[&](KProcessAddress addr, u64 size) {
m_memory->UnmapRegion(*m_page_table_impl, addr, size);
});
// Release any insecure mapped memory. // Release any insecure mapped memory.
if (m_mapped_insecure_memory) { if (m_mapped_insecure_memory) {

View File

@ -855,6 +855,9 @@ FSP_SRV::FSP_SRV(Core::System& system_)
if (Settings::values.enable_fs_access_log) { if (Settings::values.enable_fs_access_log) {
access_log_mode = AccessLogMode::SdCard; access_log_mode = AccessLogMode::SdCard;
} }
// This should be true on creation
fsc.SetAutoSaveDataCreation(true);
} }
FSP_SRV::~FSP_SRV() = default; FSP_SRV::~FSP_SRV() = default;

View File

@ -67,7 +67,7 @@ public:
* @param player_index the player number that will take this action * @param player_index the player number that will take this action
* @param delta_timestamp time passed since last reading * @param delta_timestamp time passed since last reading
* @param gyro_x,gyro_y,gyro_z the gyro sensor readings * @param gyro_x,gyro_y,gyro_z the gyro sensor readings
* @param accel_x,accel_y,accel_z the acelerometer reading * @param accel_x,accel_y,accel_z the accelerometer reading
*/ */
void SetMotionState(std::size_t player_index, u64 delta_timestamp, float gyro_x, float gyro_y, void SetMotionState(std::size_t player_index, u64 delta_timestamp, float gyro_x, float gyro_y,
float gyro_z, float accel_x, float accel_y, float accel_z); float gyro_z, float accel_x, float accel_y, float accel_z);

View File

@ -55,7 +55,7 @@ public:
/** /**
* Configures the motion sensor with the specified parameters * Configures the motion sensor with the specified parameters
* @param gsen gyroscope sensor sensitvity in degrees per second * @param gsen gyroscope sensor sensitivity in degrees per second
* @param gfrec gyroscope sensor frequency in hertz * @param gfrec gyroscope sensor frequency in hertz
* @param asen accelerometer sensitivity in G force * @param asen accelerometer sensitivity in G force
* @param afrec accelerometer frequency in hertz * @param afrec accelerometer frequency in hertz

View File

@ -55,7 +55,7 @@ void CompositeInsert(EmitContext& ctx, IR::Inst& inst, Register composite, Objec
"MOV.{} {}.{},{};", "MOV.{} {}.{},{};",
type, ret, composite, type, ret, swizzle, object); type, ret, composite, type, ret, swizzle, object);
} else { } else {
// The return value is alised so we can just insert the object, it doesn't matter if it's // The return value is aliased so we can just insert the object, it doesn't matter if it's
// aliased // aliased
ctx.Add("MOV.{} {}.{},{};", type, ret, swizzle, object); ctx.Add("MOV.{} {}.{},{};", type, ret, swizzle, object);
} }

View File

@ -161,7 +161,7 @@ private:
u32 method_count; ///< Current method count u32 method_count; ///< Current method count
u32 length_pending; ///< Large NI command length pending u32 length_pending; ///< Large NI command length pending
GPUVAddr dma_get; ///< Currently read segment GPUVAddr dma_get; ///< Currently read segment
u64 dma_word_offset; ///< Current word ofset from address u64 dma_word_offset; ///< Current word offset from address
bool non_incrementing; ///< Current command's NI flag bool non_incrementing; ///< Current command's NI flag
bool is_last_call; bool is_last_call;
}; };

View File

@ -41,7 +41,7 @@ enum class ImageFlagBits : u32 {
IsRescalable = 1 << 15, IsRescalable = 1 << 15,
AsynchronousDecode = 1 << 16, AsynchronousDecode = 1 << 16,
IsDecoding = 1 << 17, ///< Is currently being decoded asynchornously. IsDecoding = 1 << 17, ///< Is currently being decoded asynchronously.
}; };
DECLARE_ENUM_FLAG_OPERATORS(ImageFlagBits) DECLARE_ENUM_FLAG_OPERATORS(ImageFlagBits)

View File

@ -1195,7 +1195,7 @@ std::optional<SubresourceBase> FindSubresource(const ImageInfo& candidate, const
return std::nullopt; return std::nullopt;
} }
} else { } else {
// Format comaptibility is not relaxed, ensure we are creating a view on a compatible format // Format compatibility is not relaxed, ensure we are creating a view on a compatible format
if (!IsViewCompatible(existing.format, candidate.format, broken_views, native_bgr)) { if (!IsViewCompatible(existing.format, candidate.format, broken_views, native_bgr)) {
return std::nullopt; return std::nullopt;
} }

View File

@ -314,7 +314,7 @@ public:
return GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY; return GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY;
} }
/// Returns true if the device suppors float64 natively. /// Returns true if the device supports float64 natively.
bool IsFloat64Supported() const { bool IsFloat64Supported() const {
return features.features.shaderFloat64; return features.features.shaderFloat64;
} }

View File

@ -18,6 +18,8 @@
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif
#include <boost/container/flat_set.hpp>
// VFS includes must be before glad as they will conflict with Windows file api, which uses defines. // VFS includes must be before glad as they will conflict with Windows file api, which uses defines.
#include "applets/qt_amiibo_settings.h" #include "applets/qt_amiibo_settings.h"
#include "applets/qt_controller.h" #include "applets/qt_controller.h"
@ -4649,8 +4651,8 @@ bool GMainWindow::CheckFirmwarePresence() {
bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id, bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id,
u64* selected_title_id, u8* selected_content_record_type) { u64* selected_title_id, u8* selected_content_record_type) {
using ContentInfo = std::pair<FileSys::TitleType, FileSys::ContentRecordType>; using ContentInfo = std::tuple<u64, FileSys::TitleType, FileSys::ContentRecordType>;
boost::container::flat_map<u64, ContentInfo> available_title_ids; boost::container::flat_set<ContentInfo> available_title_ids;
const auto RetrieveEntries = [&](FileSys::TitleType title_type, const auto RetrieveEntries = [&](FileSys::TitleType title_type,
FileSys::ContentRecordType record_type) { FileSys::ContentRecordType record_type) {
@ -4658,12 +4660,14 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe
for (const auto& entry : entries) { for (const auto& entry : entries) {
if (FileSys::GetBaseTitleID(entry.title_id) == program_id && if (FileSys::GetBaseTitleID(entry.title_id) == program_id &&
installed.GetEntry(entry)->GetStatus() == Loader::ResultStatus::Success) { installed.GetEntry(entry)->GetStatus() == Loader::ResultStatus::Success) {
available_title_ids[entry.title_id] = {title_type, record_type}; available_title_ids.insert({entry.title_id, title_type, record_type});
} }
} }
}; };
RetrieveEntries(FileSys::TitleType::Application, FileSys::ContentRecordType::Program); RetrieveEntries(FileSys::TitleType::Application, FileSys::ContentRecordType::Program);
RetrieveEntries(FileSys::TitleType::Application, FileSys::ContentRecordType::HtmlDocument);
RetrieveEntries(FileSys::TitleType::Application, FileSys::ContentRecordType::LegalInformation);
RetrieveEntries(FileSys::TitleType::AOC, FileSys::ContentRecordType::Data); RetrieveEntries(FileSys::TitleType::AOC, FileSys::ContentRecordType::Data);
if (available_title_ids.empty()) { if (available_title_ids.empty()) {
@ -4674,10 +4678,14 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe
if (available_title_ids.size() > 1) { if (available_title_ids.size() > 1) {
QStringList list; QStringList list;
for (auto& [title_id, content_info] : available_title_ids) { for (auto& [title_id, title_type, record_type] : available_title_ids) {
const auto hex_title_id = QString::fromStdString(fmt::format("{:X}", title_id)); const auto hex_title_id = QString::fromStdString(fmt::format("{:X}", title_id));
if (content_info.first == FileSys::TitleType::Application) { if (record_type == FileSys::ContentRecordType::Program) {
list.push_back(QStringLiteral("Application [%1]").arg(hex_title_id)); list.push_back(QStringLiteral("Program [%1]").arg(hex_title_id));
} else if (record_type == FileSys::ContentRecordType::HtmlDocument) {
list.push_back(QStringLiteral("HTML document [%1]").arg(hex_title_id));
} else if (record_type == FileSys::ContentRecordType::LegalInformation) {
list.push_back(QStringLiteral("Legal information [%1]").arg(hex_title_id));
} else { } else {
list.push_back( list.push_back(
QStringLiteral("DLC %1 [%2]").arg(title_id & 0x7FF).arg(hex_title_id)); QStringLiteral("DLC %1 [%2]").arg(title_id & 0x7FF).arg(hex_title_id));
@ -4695,9 +4703,9 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe
title_index = list.indexOf(res); title_index = list.indexOf(res);
} }
const auto selected_info = available_title_ids.nth(title_index); const auto& [title_id, title_type, record_type] = *available_title_ids.nth(title_index);
*selected_title_id = selected_info->first; *selected_title_id = title_id;
*selected_content_record_type = static_cast<u8>(selected_info->second.second); *selected_content_record_type = static_cast<u8>(record_type);
return true; return true;
} }