mirror of
https://github.com/cemu-project/Cemu.git
synced 2024-12-01 21:44:17 +01:00
make binary archives device and os version specific
This commit is contained in:
parent
cf5602466c
commit
84049814f2
@ -309,7 +309,7 @@ MetalPipelineCache::~MetalPipelineCache()
|
|||||||
m_binaryArchive->serializeToURL(m_binaryArchiveURL, &error);
|
m_binaryArchive->serializeToURL(m_binaryArchiveURL, &error);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
cemuLog_log(LogType::Force, "failed to serialize binary archive: {}", error->localizedDescription()->utf8String());
|
cemuLog_log(LogType::Force, "error serializing binary archive: {}", error->localizedDescription()->utf8String());
|
||||||
error->release();
|
error->release();
|
||||||
}
|
}
|
||||||
m_binaryArchive->release();
|
m_binaryArchive->release();
|
||||||
@ -587,8 +587,28 @@ void MetalPipelineCache::TryLoadBinaryArchive()
|
|||||||
if (m_binaryArchive || s_cacheTitleId == INVALID_TITLE_ID)
|
if (m_binaryArchive || s_cacheTitleId == INVALID_TITLE_ID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// GPU name
|
||||||
|
const char* deviceName1 = m_mtlr->GetDevice()->name()->utf8String();
|
||||||
|
std::string deviceName;
|
||||||
|
deviceName.assign(deviceName1);
|
||||||
|
|
||||||
|
// Replace spaces with underscores
|
||||||
|
for (auto& c : deviceName)
|
||||||
|
{
|
||||||
|
if (c == ' ')
|
||||||
|
c = '_';
|
||||||
|
}
|
||||||
|
|
||||||
|
// OS version
|
||||||
|
auto osVersion = NS::ProcessInfo::processInfo()->operatingSystemVersion();
|
||||||
|
|
||||||
|
// Precompiled binaries cannot be shared between different devices or OS versions
|
||||||
const std::string cacheFilename = fmt::format("{:016x}_mtl_pipelines.bin", s_cacheTitleId);
|
const std::string cacheFilename = fmt::format("{:016x}_mtl_pipelines.bin", s_cacheTitleId);
|
||||||
const fs::path cachePath = ActiveSettings::GetCachePath("shaderCache/precompiled/{}", cacheFilename);
|
const fs::path cachePath = ActiveSettings::GetCachePath("shaderCache/precompiled/{}/{}-{}-{}/{}", deviceName, osVersion.majorVersion, osVersion.minorVersion, osVersion.patchVersion, cacheFilename);
|
||||||
|
|
||||||
|
// Create the directory if it doesn't exist
|
||||||
|
std::filesystem::create_directories(cachePath.parent_path());
|
||||||
|
|
||||||
m_binaryArchiveURL = NS::URL::fileURLWithPath(ToNSString((const char*)cachePath.generic_u8string().c_str()));
|
m_binaryArchiveURL = NS::URL::fileURLWithPath(ToNSString((const char*)cachePath.generic_u8string().c_str()));
|
||||||
|
|
||||||
MTL::BinaryArchiveDescriptor* desc = MTL::BinaryArchiveDescriptor::alloc()->init();
|
MTL::BinaryArchiveDescriptor* desc = MTL::BinaryArchiveDescriptor::alloc()->init();
|
||||||
|
Loading…
Reference in New Issue
Block a user