diff --git a/CMakeLists.txt b/CMakeLists.txt index df60b7c8..590c9823 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,7 @@ add_executable(shadps4 src/Core/PS4/HLE/Kernel/cpu_management.cpp src/Core/PS4/HLE/Kernel/cpu_management.h - "src/Util/Singleton.h" "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h" "src/Lib/Timer.cpp" "src/Lib/Timer.h" "src/Core/PS4/HLE/LibKernel.cpp" "src/Core/PS4/HLE/LibKernel.h" "src/Core/PS4/HLE/LibSceGnmDriver.cpp" "src/Core/PS4/HLE/LibSceGnmDriver.h" "src/Core/PS4/HLE/Kernel/ThreadManagement.cpp" "src/Core/PS4/HLE/Kernel/ThreadManagement.h" "src/Core/PS4/HLE/ErrorCodes.h" "src/debug.h" "src/Core/PS4/HLE/Kernel/memory_management.cpp" "src/Core/PS4/HLE/Kernel/memory_management.h" "src/Core/PS4/GPU/gpu_memory.cpp" "src/Core/PS4/GPU/gpu_memory.h" "src/emulator.cpp" "src/emulator.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.h" "src/Core/PS4/HLE/Graphics/graphics_ctx.h" "src/vulkan_util.cpp" "src/vulkan_util.h" "src/Core/PS4/GPU/video_out_buffer.cpp" "src/Core/PS4/GPU/video_out_buffer.h" "src/Core/PS4/HLE/Graphics/graphics_render.cpp" "src/Core/PS4/HLE/Graphics/graphics_render.h" "src/Core/PS4/GPU/tile_manager.cpp" "src/Core/PS4/GPU/tile_manager.h" "src/version.h" "src/Emulator/HLE/Libraries/LibSystemService/system_service.cpp" "src/Emulator/HLE/Libraries/LibSystemService/system_service.h") + "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h" "src/Lib/Timer.cpp" "src/Lib/Timer.h" "src/Core/PS4/HLE/LibKernel.cpp" "src/Core/PS4/HLE/LibKernel.h" "src/Core/PS4/HLE/LibSceGnmDriver.cpp" "src/Core/PS4/HLE/LibSceGnmDriver.h" "src/Core/PS4/HLE/Kernel/ThreadManagement.cpp" "src/Core/PS4/HLE/Kernel/ThreadManagement.h" "src/Core/PS4/HLE/ErrorCodes.h" "src/debug.h" "src/Core/PS4/HLE/Kernel/memory_management.cpp" "src/Core/PS4/HLE/Kernel/memory_management.h" "src/Core/PS4/GPU/gpu_memory.cpp" "src/Core/PS4/GPU/gpu_memory.h" "src/emulator.cpp" "src/emulator.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.h" "src/Core/PS4/HLE/Kernel/Objects/event_queue.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.cpp" "src/Core/PS4/HLE/Graphics/Objects/video_out_ctx.h" "src/Core/PS4/HLE/Graphics/graphics_ctx.h" "src/vulkan_util.cpp" "src/vulkan_util.h" "src/Core/PS4/GPU/video_out_buffer.cpp" "src/Core/PS4/GPU/video_out_buffer.h" "src/Core/PS4/HLE/Graphics/graphics_render.cpp" "src/Core/PS4/HLE/Graphics/graphics_render.h" "src/Core/PS4/GPU/tile_manager.cpp" "src/Core/PS4/GPU/tile_manager.h" "src/version.h" "src/Emulator/HLE/Libraries/LibSystemService/system_service.cpp" "src/Emulator/HLE/Libraries/LibSystemService/system_service.h") find_package(OpenGL REQUIRED) target_link_libraries(shadps4 PUBLIC fmt mincore spdlog IMGUI SDL3-shared ${OPENGL_LIBRARY} vulkan-1 spirv-tools-opt spirv-tools) diff --git a/src/Core/PS4/GPU/gpu_memory.cpp b/src/Core/PS4/GPU/gpu_memory.cpp index 39591892..3e451645 100644 --- a/src/Core/PS4/GPU/gpu_memory.cpp +++ b/src/Core/PS4/GPU/gpu_memory.cpp @@ -2,17 +2,17 @@ #include -#include "Util/Singleton.h" +#include "Emulator/Util/singleton.h" void* GPU::memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::GraphicCtx* ctx, void* todo /*CommandBuffer?*/, u64 virtual_addr, u64 size, const GPUObject& info) { - auto* gpumemory = Singleton::Instance(); + auto* gpumemory = singleton::instance(); return gpumemory->memoryCreateObj(submit_id, ctx, nullptr, &virtual_addr, &size, 1, info); } void GPU::memorySetAllocArea(u64 virtual_addr, u64 size) { - auto* gpumemory = Singleton::Instance(); + auto* gpumemory = singleton::instance(); Lib::LockMutexGuard lock(gpumemory->m_mutex); @@ -59,7 +59,7 @@ bool GPU::vulkanAllocateMemory(HLE::Libs::Graphics::GraphicCtx* ctx, HLE::Libs:: } void GPU::flushGarlic(HLE::Libs::Graphics::GraphicCtx* ctx) { - auto* gpumemory = Singleton::Instance(); + auto* gpumemory = singleton::instance(); gpumemory->flushAllHeaps(ctx); } @@ -78,7 +78,7 @@ int GPU::GPUMemory::getHeapId(u64 virtual_addr, u64 size) { void* GPU::GPUMemory::memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::GraphicCtx* ctx, void* todo, const u64* virtual_addr, const u64* size, int virtual_addr_num, const GPUObject& info) { - auto* gpumemory = Singleton::Instance(); + auto* gpumemory = singleton::instance(); Lib::LockMutexGuard lock(gpumemory->m_mutex); diff --git a/src/Core/PS4/GPU/tile_manager.cpp b/src/Core/PS4/GPU/tile_manager.cpp index 6bca3e0e..3687f2b8 100644 --- a/src/Core/PS4/GPU/tile_manager.cpp +++ b/src/Core/PS4/GPU/tile_manager.cpp @@ -1,6 +1,6 @@ #include "tile_manager.h" #include "Lib/Threads.h" -#include "Util/Singleton.h" +#include "Emulator/Util/singleton.h" namespace GPU { @@ -143,7 +143,7 @@ void convertTileToLinear(void* dst, const void* src,u32 width, u32 height, bool TileManager32 t; t.Init(width, height, is_neo); - auto* g_TileManager = Singleton::Instance(); + auto* g_TileManager = singleton::instance(); Lib::LockMutexGuard lock(g_TileManager->m_mutex); diff --git a/src/Core/PS4/HLE/Graphics/graphics_render.cpp b/src/Core/PS4/HLE/Graphics/graphics_render.cpp index 65a518e3..22d5c651 100644 --- a/src/Core/PS4/HLE/Graphics/graphics_render.cpp +++ b/src/Core/PS4/HLE/Graphics/graphics_render.cpp @@ -1,12 +1,12 @@ #include "graphics_render.h" -#include "Util/Singleton.h" +#include "Emulator/Util/singleton.h" #include "emulator.h" static thread_local GPU::CommandPool g_command_pool; void GPU::renderCreateCtx() { - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); render_ctx->setGraphicCtx(Emu::getGraphicCtx()); } @@ -37,7 +37,7 @@ void GPU::CommandBuffer::freeBuffer() { } void GPU::CommandBuffer::waitForFence() { - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); if (m_execute) { auto* device = render_ctx->getGraphicCtx()->m_device; @@ -89,7 +89,7 @@ void GPU::CommandBuffer::executeWithSemaphore() { submit_info.signalSemaphoreCount = 1; submit_info.pSignalSemaphores = &m_pool->semaphores[m_index]; - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); const auto& queue = render_ctx->getGraphicCtx()->queues[m_queue]; if (queue.mutex != nullptr) { @@ -124,7 +124,7 @@ void GPU::CommandBuffer::execute() { submit_info.signalSemaphoreCount = 0; submit_info.pSignalSemaphores = nullptr; - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); const auto& queue = render_ctx->getGraphicCtx()->queues[m_queue]; if (queue.mutex != nullptr) { @@ -145,7 +145,7 @@ void GPU::CommandBuffer::execute() { } } void GPU::CommandPool::createPool(int id) { - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); auto* ctx = render_ctx->getGraphicCtx(); m_pool[id] = new HLE::Libs::Graphics::VulkanCommandPool; @@ -206,7 +206,7 @@ void GPU::CommandPool::createPool(int id) { } void GPU::CommandPool::deleteAllPool() { - auto* render_ctx = Singleton::Instance(); + auto* render_ctx = singleton::instance(); auto* ctx = render_ctx->getGraphicCtx(); for (auto& pool : m_pool) { diff --git a/src/Core/PS4/HLE/Graphics/video_out.cpp b/src/Core/PS4/HLE/Graphics/video_out.cpp index 18b65c4c..6feccb20 100644 --- a/src/Core/PS4/HLE/Graphics/video_out.cpp +++ b/src/Core/PS4/HLE/Graphics/video_out.cpp @@ -15,7 +15,7 @@ #include #include "Objects/video_out_ctx.h" -#include "Util/Singleton.h" +#include "Emulator/Util/singleton.h" #include "emulator.h" #include "graphics_render.h" @@ -24,12 +24,12 @@ namespace HLE::Libs::Graphics::VideoOut { constexpr bool log_file_videoout = true; // disable it to disable logging void videoOutInit(u32 width, u32 height) { - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); videoOut->Init(width, height); } bool videoOutFlip(u32 micros) { - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); return videoOut->getFlipQueue().flip(micros); } @@ -87,7 +87,7 @@ static void flip_delete_event_func(LibKernel::EventQueues::SceKernelEqueue eq, H s32 PS4_SYSV_ABI sceVideoOutAddFlipEvent(LibKernel::EventQueues::SceKernelEqueue eq, s32 handle, void* udata) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); auto* ctx = videoOut->getCtx(handle); @@ -122,7 +122,7 @@ s32 PS4_SYSV_ABI sceVideoOutAddFlipEvent(LibKernel::EventQueues::SceKernelEqueue s32 PS4_SYSV_ABI sceVideoOutRegisterBuffers(s32 handle, s32 startIndex, void* const* addresses, s32 bufferNum, const SceVideoOutBufferAttribute* attribute) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); auto* ctx = videoOut->getCtx(handle); if (handle == 1) { // main port @@ -215,19 +215,19 @@ s32 PS4_SYSV_ABI sceVideoOutRegisterBuffers(s32 handle, s32 startIndex, void* co } s32 PS4_SYSV_ABI sceVideoOutSetFlipRate(s32 handle, s32 rate) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); videoOut->getCtx(handle)->m_flip_rate = rate; return SCE_OK; } s32 PS4_SYSV_ABI sceVideoOutIsFlipPending(s32 handle) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); s32 pending = videoOut->getCtx(handle)->m_flip_status.flipPendingNum; return pending; } s32 PS4_SYSV_ABI sceVideoOutSubmitFlip(s32 handle, s32 bufferIndex, s32 flipMode, s64 flipArg) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); auto* ctx = videoOut->getCtx(handle); if (flipMode != 1) { @@ -254,7 +254,7 @@ s32 PS4_SYSV_ABI sceVideoOutSubmitFlip(s32 handle, s32 bufferIndex, s32 flipMode } s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, SceVideoOutFlipStatus* status) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); auto* ctx = videoOut->getCtx(handle); videoOut->getFlipQueue().getFlipStatus(ctx, status); @@ -270,7 +270,7 @@ s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, SceVideoOutFlipStatus* sta } s32 PS4_SYSV_ABI sceVideoOutGetResolutionStatus(s32 handle, SceVideoOutResolutionStatus* status) { PRINT_FUNCTION_NAME(); - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); *status = videoOut->getCtx(handle)->m_resolution; return SCE_OK; } @@ -289,7 +289,7 @@ s32 PS4_SYSV_ABI sceVideoOutOpen(SceUserServiceUserId userId, s32 busType, s32 i if (param != nullptr) { BREAKPOINT(); } - auto* videoOut = Singleton::Instance(); + auto* videoOut = singleton::instance(); int handle = videoOut->Open(); if (handle < 0) { diff --git a/src/Core/PS4/HLE/Kernel/memory_management.cpp b/src/Core/PS4/HLE/Kernel/memory_management.cpp index 258100d7..bea58c25 100644 --- a/src/Core/PS4/HLE/Kernel/memory_management.cpp +++ b/src/Core/PS4/HLE/Kernel/memory_management.cpp @@ -8,7 +8,7 @@ #include #include -#include "../../../../Util/Singleton.h" +#include "Emulator/Util/singleton.h" #include "../ErrorCodes.h" #include "../Libs.h" #include "Objects/physical_memory.h" @@ -55,7 +55,7 @@ int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u LOG_INFO_IF(log_file_memory, "memory_type = {}\n", magic_enum::enum_name(memtype.value())); u64 physical_addr = 0; - auto* physical_memory = Singleton::Instance(); + auto* physical_memory = singleton::instance(); if (!physical_memory->Alloc(searchStart, searchEnd, len, alignment, &physical_addr, memoryType)) { LOG_TRACE_IF(log_file_memory, "sceKernelAllocateDirectMemory returned SCE_KERNEL_ERROR_EAGAIN can't allocate physical memory\n"); return SCE_KERNEL_ERROR_EAGAIN; @@ -115,7 +115,7 @@ int PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, int prot, int fl return SCE_KERNEL_ERROR_ENOMEM; } - auto* physical_memory = Singleton::Instance(); + auto* physical_memory = singleton::instance(); if (!physical_memory->Map(out_addr, directMemoryStart, len, prot, cpu_mode, gpu_mode)) { BREAKPOINT(); } diff --git a/src/Core/PS4/HLE/LibKernel.cpp b/src/Core/PS4/HLE/LibKernel.cpp index 9788a007..77fb3c71 100644 --- a/src/Core/PS4/HLE/LibKernel.cpp +++ b/src/Core/PS4/HLE/LibKernel.cpp @@ -3,7 +3,7 @@ #include #include -#include "../../../Util/Singleton.h" +#include "Emulator/Util/singleton.h" #include "../Loader/Elf.h" #include "Kernel/Objects/physical_memory.h" #include "Kernel/cpu_management.h" diff --git a/src/Emulator/HLE/Libraries/LibPad/pad.cpp b/src/Emulator/HLE/Libraries/LibPad/pad.cpp index 26b252f0..132c0269 100644 --- a/src/Emulator/HLE/Libraries/LibPad/pad.cpp +++ b/src/Emulator/HLE/Libraries/LibPad/pad.cpp @@ -3,7 +3,7 @@ #include #include -#include "Util/Singleton.h" +#include "Emulator/Util/singleton.h" #include "controller.h" #include #include @@ -20,7 +20,7 @@ int PS4_SYSV_ABI scePadOpen(Emulator::HLE::Libraries::LibUserService::SceUserSer } int PS4_SYSV_ABI scePadReadState(int32_t handle, ScePadData* pData) { - auto* controller = Singleton::Instance(); + auto* controller = singleton::instance(); int connectedCount = 0; bool isConnected = false; diff --git a/src/Util/Singleton.h b/src/Util/Singleton.h deleted file mode 100644 index ef5228ba..00000000 --- a/src/Util/Singleton.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include - -template -class Singleton -{ -public: - static T* Instance() - { - if (!m_instance) - { - m_instance = static_cast(std::malloc(sizeof(T))); - new (m_instance) T; - } - - return m_instance; - } - -protected: - Singleton(); - ~Singleton(); - -private: - static inline T* m_instance = nullptr; -}; \ No newline at end of file diff --git a/src/emulator.cpp b/src/emulator.cpp index bccabe81..8c9998d7 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include "Emulator/Util/singleton.h" #include #include "Core/PS4/HLE/Graphics/video_out.h" @@ -14,14 +14,14 @@ namespace Emu { bool m_emu_needs_exit = false; void emuInit(u32 width, u32 height) { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); window_ctx->m_graphic_ctx.screen_width = width; window_ctx->m_graphic_ctx.screen_height = height; } void checkAndWaitForGraphicsInit() { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); Lib::LockMutexGuard lock(window_ctx->m_mutex); while (!window_ctx->m_is_graphic_initialized) { @@ -50,7 +50,7 @@ static void CreateSdlWindow(WindowCtx* ctx) { SDL_SetWindowResizable(ctx->m_window, SDL_FALSE); // we don't support resizable atm } void emuRun() { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); window_ctx->m_mutex.LockMutex(); { // init window and wait until init finishes @@ -98,14 +98,14 @@ void emuRun() { } HLE::Libs::Graphics::GraphicCtx* getGraphicCtx() { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); Lib::LockMutexGuard lock(window_ctx->m_mutex); return &window_ctx->m_graphic_ctx; } void DrawBuffer(HLE::Libs::Graphics::VideoOutVulkanImage* image) { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); if (window_ctx->is_window_hidden) { SDL_ShowWindow(window_ctx->m_window); window_ctx->is_window_hidden = false; @@ -219,7 +219,7 @@ void keyboardEvent(SDL_Event* event) { default: break; } if (button != 0) { - auto* controller = Singleton::Instance(); + auto* controller = singleton::instance(); controller->checKButton(0, button, event->type == SDL_EVENT_KEY_DOWN); } } diff --git a/src/main.cpp b/src/main.cpp index 3cc8f3c5..fa9b7bee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -35,7 +35,7 @@ #include "Core/PS4/HLE/Libs.h" #include "Core/PS4/Linker.h" #include "Lib/Threads.h" -#include "Util/Singleton.h" +#include "Emulator/Util\singleton.h" #include "discord.h" // Main code @@ -54,12 +54,12 @@ int main(int argc, char* argv[]) { const char* const path = argv[1]; // argument 1 is the path of self file to boot - auto* linker = Singleton::Instance(); + auto* linker = singleton::instance(); HLE::Libs::Init_HLE_Libs(linker->getHLESymbols()); auto* module = linker->LoadModule(path); // load main executable Lib::Thread mainthread( [](void*) { - auto* linker = Singleton::Instance(); + auto* linker = singleton::instance(); linker->Execute(); }, nullptr); diff --git a/src/vulkan_util.cpp b/src/vulkan_util.cpp index dac3e5fe..9c1f21aa 100644 --- a/src/vulkan_util.cpp +++ b/src/vulkan_util.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include #include @@ -80,7 +80,7 @@ void Graphics::Vulkan::vulkanCreate(Emu::WindowCtx* ctx) { } Emu::VulkanSwapchain* Graphics::Vulkan::vulkanCreateSwapchain(HLE::Libs::Graphics::GraphicCtx* ctx, u32 image_count) { - auto* window_ctx = Singleton::Instance(); + auto* window_ctx = singleton::instance(); Lib::LockMutexGuard lock(window_ctx->m_mutex); auto* s = new Emu::VulkanSwapchain;