From 1752126f5c1feed522e12dfdf23d5b4028f8ce99 Mon Sep 17 00:00:00 2001 From: Samuliak Date: Sun, 1 Dec 2024 18:57:57 +0100 Subject: [PATCH] flush file streamer after each write --- .../HW/Latte/Renderer/Metal/MetalPipelineCache.cpp | 6 +++--- src/Cemu/FileCache/FileCache.cpp | 10 ++++++++-- src/Common/unix/FileStream_unix.cpp | 5 +++++ src/Common/unix/FileStream_unix.h | 2 ++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.cpp b/src/Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.cpp index 1c69b531..a922365b 100644 --- a/src/Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.cpp +++ b/src/Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.cpp @@ -1,17 +1,17 @@ #include "Cafe/HW/Latte/Renderer/Metal/MetalPipelineCache.h" #include "Cafe/HW/Latte/Renderer/Metal/MetalRenderer.h" #include "Cafe/HW/Latte/Renderer/Metal/LatteToMtl.h" +#include "Cafe/HW/Latte/Renderer/Metal/MetalPipelineCompiler.h" #include "Cafe/HW/Latte/Core/FetchShader.h" #include "Cafe/HW/Latte/ISA/RegDefines.h" #include "Cafe/HW/Latte/Core/LatteConst.h" #include "Cafe/HW/Latte/Common/RegisterSerializer.h" #include "Cafe/HW/Latte/Core/LatteShaderCache.h" -#include "Cemu/FileCache/FileCache.h" -#include "Common/precompiled.h" #include "Cafe/HW/Latte/Core/LatteShader.h" #include "Cafe/HW/Latte/ISA/LatteReg.h" -#include "HW/Latte/Renderer/Metal/MetalPipelineCompiler.h" +#include "Cemu/FileCache/FileCache.h" +#include "Common/precompiled.h" #include "util/helpers/helpers.h" #include "config/ActiveSettings.h" diff --git a/src/Cemu/FileCache/FileCache.cpp b/src/Cemu/FileCache/FileCache.cpp index b284b66b..820115d6 100644 --- a/src/Cemu/FileCache/FileCache.cpp +++ b/src/Cemu/FileCache/FileCache.cpp @@ -111,7 +111,7 @@ FileCache* FileCache::Create(const fs::path& path, uint32 extraVersion) fileCache->fileTableEntries[0].fileOffset = fileCache->fileTableOffset; fileCache->fileTableEntries[0].fileSize = fileCache->fileTableSize; // write header - + fs->writeU32(FILECACHE_MAGIC_V3); fs->writeU32(fileCache->extraVersion); fs->writeU64(fileCache->dataOffset); @@ -316,7 +316,7 @@ bool _uncompressFileData(const uint8* rawData, size_t rawSize, std::vectorSetPosition(this->dataOffset + currentStartOffset); fileStream->writeData(rawData, rawSize); +#ifdef __APPLE__ + fileStream->Flush(); +#endif // write file table entry fileStream->SetPosition(this->dataOffset + this->fileTableOffset + (uint64)(sizeof(FileTableEntry)*entryIndex)); fileStream->writeData(this->fileTableEntries + entryIndex, sizeof(FileTableEntry)); +#ifdef __APPLE__ + fileStream->Flush(); +#endif if (isCompressed) free(rawData); } diff --git a/src/Common/unix/FileStream_unix.cpp b/src/Common/unix/FileStream_unix.cpp index 4bc9b526..0e9f1189 100644 --- a/src/Common/unix/FileStream_unix.cpp +++ b/src/Common/unix/FileStream_unix.cpp @@ -116,6 +116,11 @@ void FileStream::extract(std::vector& data) readData(data.data(), fileSize); } +void FileStream::Flush() +{ + m_fileStream.flush(); +} + uint32 FileStream::readData(void* data, uint32 length) { SyncReadWriteSeek(false); diff --git a/src/Common/unix/FileStream_unix.h b/src/Common/unix/FileStream_unix.h index 12c971d1..0a2fa7ed 100644 --- a/src/Common/unix/FileStream_unix.h +++ b/src/Common/unix/FileStream_unix.h @@ -22,6 +22,8 @@ class FileStream bool SetEndOfFile(); void extract(std::vector& data); + void Flush(); + // reading uint32 readData(void* data, uint32 length); bool readU64(uint64& v);