Compare commits
10 commits
8f06e954cd
...
94932270a5
Author | SHA1 | Date | |
---|---|---|---|
94932270a5 | |||
e99b7bd60a | |||
0625b2b529 | |||
eddfa300a4 | |||
b40676f5e3 | |||
a1ed6a8636 | |||
b8c92f64f8 | |||
249e006667 | |||
8ac495acee | |||
cda6958111 |
7 changed files with 16 additions and 46 deletions
|
@ -598,12 +598,17 @@ public:
|
||||||
|
|
||||||
bool ClearBackingRegion(size_t physical_offset, size_t length) {
|
bool ClearBackingRegion(size_t physical_offset, size_t length) {
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
// Set MADV_REMOVE on backing map to destroy it instantly.
|
// Only incur syscall cost IF memset would be slower (theshold = 16MiB)
|
||||||
// This also deletes the area from the backing file.
|
// TODO(lizzie): Smarter way to dynamically get this threshold (broadwell != raptor lake) for example
|
||||||
int ret = madvise(backing_base + physical_offset, length, MADV_REMOVE);
|
if (length >= 2097152UL * 8) {
|
||||||
ASSERT_MSG(ret == 0, "madvise failed: {}", strerror(errno));
|
// Set MADV_REMOVE on backing map to destroy it instantly.
|
||||||
|
// This also deletes the area from the backing file.
|
||||||
return true;
|
int ret = madvise(backing_base + physical_offset, length, MADV_REMOVE);
|
||||||
|
ASSERT_MSG(ret == 0, "madvise failed: {}", strerror(errno));
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -107,7 +107,6 @@ add_library(core STATIC
|
||||||
file_sys/fssystem/fssystem_nca_header.cpp
|
file_sys/fssystem/fssystem_nca_header.cpp
|
||||||
file_sys/fssystem/fssystem_nca_header.h
|
file_sys/fssystem/fssystem_nca_header.h
|
||||||
file_sys/fssystem/fssystem_nca_reader.cpp
|
file_sys/fssystem/fssystem_nca_reader.cpp
|
||||||
file_sys/fssystem/fssystem_passthrough_storage.h
|
|
||||||
file_sys/fssystem/fssystem_pooled_buffer.cpp
|
file_sys/fssystem/fssystem_pooled_buffer.cpp
|
||||||
file_sys/fssystem/fssystem_pooled_buffer.h
|
file_sys/fssystem/fssystem_pooled_buffer.h
|
||||||
file_sys/fssystem/fssystem_sparse_storage.cpp
|
file_sys/fssystem/fssystem_sparse_storage.cpp
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "common/settings.h"
|
|
||||||
#include "core/file_sys/errors.h"
|
#include "core/file_sys/errors.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_bucket_tree.h"
|
#include "core/file_sys/fssystem/fssystem_bucket_tree.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_bucket_tree_utils.h"
|
#include "core/file_sys/fssystem/fssystem_bucket_tree_utils.h"
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "common/settings.h"
|
|
||||||
#include "core/file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.h"
|
#include "core/file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_aes_ctr_storage.h"
|
#include "core/file_sys/fssystem/fssystem_aes_ctr_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_aes_xts_storage.h"
|
#include "core/file_sys/fssystem/fssystem_aes_xts_storage.h"
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
#include "core/file_sys/fssystem/fssystem_hierarchical_sha256_storage.h"
|
#include "core/file_sys/fssystem/fssystem_hierarchical_sha256_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_indirect_storage.h"
|
#include "core/file_sys/fssystem/fssystem_indirect_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_integrity_romfs_storage.h"
|
#include "core/file_sys/fssystem/fssystem_integrity_romfs_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_passthrough_storage.h"
|
|
||||||
#include "core/file_sys/fssystem/fssystem_memory_resource_buffer_hold_storage.h"
|
#include "core/file_sys/fssystem/fssystem_memory_resource_buffer_hold_storage.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_nca_file_system_driver.h"
|
#include "core/file_sys/fssystem/fssystem_nca_file_system_driver.h"
|
||||||
#include "core/file_sys/fssystem/fssystem_sparse_storage.h"
|
#include "core/file_sys/fssystem/fssystem_sparse_storage.h"
|
||||||
|
|
|
@ -13,13 +13,11 @@ u8 NcaHeader::GetProperKeyGeneration() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NcaPatchInfo::HasIndirectTable() const {
|
bool NcaPatchInfo::HasIndirectTable() const {
|
||||||
static constexpr unsigned char BKTR[4] = {'B', 'K', 'T', 'R'};
|
return this->indirect_size != 0;
|
||||||
return std::memcmp(indirect_header.data(), BKTR, sizeof(BKTR)) == 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NcaPatchInfo::HasAesCtrExTable() const {
|
bool NcaPatchInfo::HasAesCtrExTable() const {
|
||||||
static constexpr unsigned char BKTR[4] = {'B', 'K', 'T', 'R'};
|
return this->aes_ctr_ex_size != 0;
|
||||||
return std::memcmp(aes_ctr_ex_header.data(), BKTR, sizeof(BKTR)) == 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace FileSys
|
} // namespace FileSys
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "core/file_sys/fssystem/fs_i_storage.h"
|
|
||||||
#include "core/file_sys/vfs/vfs.h"
|
|
||||||
|
|
||||||
namespace FileSys {
|
|
||||||
|
|
||||||
//TODO: No integrity verification.
|
|
||||||
class PassthroughStorage final : public IReadOnlyStorage {
|
|
||||||
YUZU_NON_COPYABLE(PassthroughStorage);
|
|
||||||
YUZU_NON_MOVEABLE(PassthroughStorage);
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit PassthroughStorage(VirtualFile base) : base_(std::move(base)) {}
|
|
||||||
~PassthroughStorage() override = default;
|
|
||||||
|
|
||||||
size_t Read(u8* buffer, size_t size, size_t offset) const override {
|
|
||||||
if (!base_ || size == 0)
|
|
||||||
return 0;
|
|
||||||
return base_->Read(buffer, size, offset);
|
|
||||||
}
|
|
||||||
size_t GetSize() const override {
|
|
||||||
return base_ ? base_->GetSize() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
VirtualFile base_{};
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace FileSys
|
|
|
@ -49,6 +49,9 @@ namespace Vulkan {
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] VkMemoryPropertyFlags MemoryUsagePreferredVmaFlags(MemoryUsage usage) {
|
[[nodiscard]] VkMemoryPropertyFlags MemoryUsagePreferredVmaFlags(MemoryUsage usage) {
|
||||||
|
if (usage == MemoryUsage::Download) {
|
||||||
|
return VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
|
||||||
|
}
|
||||||
return usage != MemoryUsage::DeviceLocal ? VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
|
return usage != MemoryUsage::DeviceLocal ? VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
|
||||||
: VkMemoryPropertyFlagBits{};
|
: VkMemoryPropertyFlagBits{};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue