From 387b712959f02be1df9e3feb86d8186d9dddf3db Mon Sep 17 00:00:00 2001 From: Exzap <13877693+Exzap@users.noreply.github.com> Date: Fri, 27 Jan 2023 06:32:50 +0100 Subject: [PATCH] Logging: Add TextureReadback logtype and clean up code --- .../HW/Latte/Core/LatteCommandProcessor.cpp | 1 - src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp | 2 + src/Cafe/IOSU/fsa/iosu_fsa.cpp | 4 +- src/Cafe/OS/libs/coreinit/coreinit_FS.cpp | 128 +++++++++--------- src/Cafe/OS/libs/padscore/padscore.cpp | 4 +- src/Cafe/OS/libs/vpad/vpad.cpp | 6 +- src/Cemu/Logging/CemuLogging.cpp | 6 +- src/Cemu/Logging/CemuLogging.h | 8 +- src/Common/precompiled.h | 12 ++ src/gui/MainWindow.cpp | 37 ++--- 10 files changed, 112 insertions(+), 96 deletions(-) diff --git a/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp b/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp index 417e3b8c..95d9bab3 100644 --- a/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp +++ b/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp @@ -224,7 +224,6 @@ void LatteCP_itIndirectBufferDepr(uint32 nWords) uint32 physicalAddressHigh = readU32(); // unused uint32 sizeInDWords = readU32(); uint32 displayListSize = sizeInDWords * 4; - cemu_assert_debug(displayListSize >= 4); DrawPassContext drawPassCtx; LatteCP_processCommandBuffer(memory_getPointerFromPhysicalOffset(physicalAddress), displayListSize, drawPassCtx); if (drawPassCtx.isWithinDrawPass()) diff --git a/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp b/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp index 45e7ec46..f5988f98 100644 --- a/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp +++ b/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp @@ -746,6 +746,8 @@ void LatteTextureLoader_writeReadbackTextureToMemory(LatteTextureDefinition* tex return; } + cemuLog_log(LogType::TextureReadback, "[WriteReadbackTex] PhysAddr {:08x} Res {}x{} Fmt {} Slice {} Mip {}", textureData->physAddress, textureData->width, textureData->height, textureData->format, sliceIndex, mipIndex); + if (textureData->tileMode == Latte::E_HWTILEMODE::TM_LINEAR_ALIGNED) { uint32 pitch = textureLoader.width; diff --git a/src/Cafe/IOSU/fsa/iosu_fsa.cpp b/src/Cafe/IOSU/fsa/iosu_fsa.cpp index cc16463f..65929d0f 100644 --- a/src/Cafe/IOSU/fsa/iosu_fsa.cpp +++ b/src/Cafe/IOSU/fsa/iosu_fsa.cpp @@ -283,7 +283,7 @@ namespace iosu return -0x400; } *fileHandle = fsFileHandle; - cemuLog_log(LogType::File, "Open file {} (access: {} result: ok handle: 0x{})", path, accessModifierStr, (uint32)*fileHandle); + cemuLog_log(LogType::CoreinitFile, "Open file {} (access: {} result: ok handle: 0x{})", path, accessModifierStr, (uint32)*fileHandle); return (FSStatus)FS_RESULT::SUCCESS; } @@ -307,7 +307,7 @@ namespace iosu return -0x400; } *dirHandle = fsDirHandle; - cemuLog_log(LogType::File, "Open directory {} (result: ok handle: 0x{})", path, (uint32)*dirHandle); + cemuLog_log(LogType::CoreinitFile, "Open directory {} (result: ok handle: 0x{})", path, (uint32)*dirHandle); return (FSStatus)FS_RESULT::SUCCESS; } diff --git a/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp b/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp index 1853bae8..6c606d46 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp @@ -1564,96 +1564,96 @@ namespace coreinit void InitializeFS() { - cafeExportRegister("coreinit", FSInit, LogType::File); - cafeExportRegister("coreinit", FSShutdown, LogType::File); + cafeExportRegister("coreinit", FSInit, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSShutdown, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSGetMountSource, LogType::File); - cafeExportRegister("coreinit", FSGetMountSourceNext, LogType::File); + cafeExportRegister("coreinit", FSGetMountSource, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetMountSourceNext, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSMount, LogType::File); - cafeExportRegister("coreinit", FSBindMount, LogType::File); + cafeExportRegister("coreinit", FSMount, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSBindMount, LogType::CoreinitFile); // client management - cafeExportRegister("coreinit", FSAddClientEx, LogType::File); - cafeExportRegister("coreinit", FSAddClient, LogType::File); - cafeExportRegister("coreinit", FSDelClient, LogType::File); - cafeExportRegister("coreinit", FSGetClientNum, LogType::File); + cafeExportRegister("coreinit", FSAddClientEx, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSAddClient, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSDelClient, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetClientNum, LogType::CoreinitFile); // cmd - cafeExportRegister("coreinit", FSInitCmdBlock, LogType::File); - cafeExportRegister("coreinit", FSGetAsyncResult, LogType::File); + cafeExportRegister("coreinit", FSInitCmdBlock, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetAsyncResult, LogType::CoreinitFile); // file operations - cafeExportRegister("coreinit", FSOpenFileAsync, LogType::File); - cafeExportRegister("coreinit", FSOpenFile, LogType::File); - cafeExportRegister("coreinit", FSOpenFileExAsync, LogType::File); - cafeExportRegister("coreinit", FSOpenFileEx, LogType::File); - cafeExportRegister("coreinit", FSCloseFileAsync, LogType::File); - cafeExportRegister("coreinit", FSCloseFile, LogType::File); + cafeExportRegister("coreinit", FSOpenFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSOpenFile, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSOpenFileExAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSOpenFileEx, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSCloseFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSCloseFile, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSReadFileAsync, LogType::File); - cafeExportRegister("coreinit", FSReadFile, LogType::File); - cafeExportRegister("coreinit", FSReadFileWithPosAsync, LogType::File); - cafeExportRegister("coreinit", FSReadFileWithPos, LogType::File); + cafeExportRegister("coreinit", FSReadFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSReadFile, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSReadFileWithPosAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSReadFileWithPos, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSWriteFileAsync, LogType::File); - cafeExportRegister("coreinit", FSWriteFile, LogType::File); - cafeExportRegister("coreinit", FSWriteFileWithPosAsync, LogType::File); - cafeExportRegister("coreinit", FSWriteFileWithPos, LogType::File); + cafeExportRegister("coreinit", FSWriteFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSWriteFile, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSWriteFileWithPosAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSWriteFileWithPos, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSSetPosFileAsync, LogType::File); - cafeExportRegister("coreinit", FSSetPosFile, LogType::File); - cafeExportRegister("coreinit", FSGetPosFileAsync, LogType::File); - cafeExportRegister("coreinit", FSGetPosFile, LogType::File); + cafeExportRegister("coreinit", FSSetPosFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSSetPosFile, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetPosFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetPosFile, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSAppendFileAsync, LogType::File); - cafeExportRegister("coreinit", FSAppendFile, LogType::File); + cafeExportRegister("coreinit", FSAppendFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSAppendFile, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSTruncateFileAsync, LogType::File); - cafeExportRegister("coreinit", FSTruncateFile, LogType::File); + cafeExportRegister("coreinit", FSTruncateFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSTruncateFile, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSRenameAsync, LogType::File); - cafeExportRegister("coreinit", FSRename, LogType::File); - cafeExportRegister("coreinit", FSRemoveAsync, LogType::File); - cafeExportRegister("coreinit", FSRemove, LogType::File); - cafeExportRegister("coreinit", FSMakeDirAsync, LogType::File); - cafeExportRegister("coreinit", FSMakeDir, LogType::File); - cafeExportRegister("coreinit", FSChangeDirAsync, LogType::File); - cafeExportRegister("coreinit", FSChangeDir, LogType::File); - cafeExportRegister("coreinit", FSGetCwdAsync, LogType::File); - cafeExportRegister("coreinit", FSGetCwd, LogType::File); + cafeExportRegister("coreinit", FSRenameAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSRename, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSRemoveAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSRemove, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSMakeDirAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSMakeDir, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSChangeDirAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSChangeDir, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetCwdAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetCwd, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSIsEofAsync, LogType::File); - cafeExportRegister("coreinit", FSIsEof, LogType::File); + cafeExportRegister("coreinit", FSIsEofAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSIsEof, LogType::CoreinitFile); // directory operations - cafeExportRegister("coreinit", FSOpenDirAsync, LogType::File); - cafeExportRegister("coreinit", FSOpenDir, LogType::File); - cafeExportRegister("coreinit", FSReadDirAsync, LogType::File); - cafeExportRegister("coreinit", FSReadDir, LogType::File); - cafeExportRegister("coreinit", FSCloseDirAsync, LogType::File); - cafeExportRegister("coreinit", FSCloseDir, LogType::File); + cafeExportRegister("coreinit", FSOpenDirAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSOpenDir, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSReadDirAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSReadDir, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSCloseDirAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSCloseDir, LogType::CoreinitFile); // stat - cafeExportRegister("coreinit", FSGetFreeSpaceSizeAsync, LogType::File); - cafeExportRegister("coreinit", FSGetFreeSpaceSize, LogType::File); + cafeExportRegister("coreinit", FSGetFreeSpaceSizeAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetFreeSpaceSize, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSGetStatAsync, LogType::File); - cafeExportRegister("coreinit", FSGetStat, LogType::File); + cafeExportRegister("coreinit", FSGetStatAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetStat, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSGetStatFileAsync, LogType::File); - cafeExportRegister("coreinit", FSGetStatFile, LogType::File); + cafeExportRegister("coreinit", FSGetStatFileAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetStatFile, LogType::CoreinitFile); // misc - cafeExportRegister("coreinit", FSFlushQuotaAsync, LogType::File); - cafeExportRegister("coreinit", FSFlushQuota, LogType::File); + cafeExportRegister("coreinit", FSFlushQuotaAsync, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSFlushQuota, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSSetUserData, LogType::File); - cafeExportRegister("coreinit", FSGetUserData, LogType::File); + cafeExportRegister("coreinit", FSSetUserData, LogType::CoreinitFile); + cafeExportRegister("coreinit", FSGetUserData, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSGetCurrentCmdBlock, LogType::File); + cafeExportRegister("coreinit", FSGetCurrentCmdBlock, LogType::CoreinitFile); - cafeExportRegister("coreinit", FSGetVolumeState, LogType::File); + cafeExportRegister("coreinit", FSGetVolumeState, LogType::CoreinitFile); cafeExportRegister("coreinit", FSGetErrorCodeForViewer, LogType::Placeholder); cafeExportRegister("coreinit", FSGetLastErrorCodeForViewer, LogType::Placeholder); diff --git a/src/Cafe/OS/libs/padscore/padscore.cpp b/src/Cafe/OS/libs/padscore/padscore.cpp index d14ad04b..88761fa6 100644 --- a/src/Cafe/OS/libs/padscore/padscore.cpp +++ b/src/Cafe/OS/libs/padscore/padscore.cpp @@ -748,8 +748,8 @@ namespace padscore void load() { - cafeExportRegister("padscore", WPADIsMplsAttached, LogType::Input); - cafeExportRegister("padscore", WPADGetAccGravityUnit, LogType::Input); + cafeExportRegister("padscore", WPADIsMplsAttached, LogType::InputAPI); + cafeExportRegister("padscore", WPADGetAccGravityUnit, LogType::InputAPI); // wpad //osLib_addFunction("padscore", "WPADInit", padscore::export_WPADInit); diff --git a/src/Cafe/OS/libs/vpad/vpad.cpp b/src/Cafe/OS/libs/vpad/vpad.cpp index 0ad97620..db55421c 100644 --- a/src/Cafe/OS/libs/vpad/vpad.cpp +++ b/src/Cafe/OS/libs/vpad/vpad.cpp @@ -1159,9 +1159,9 @@ namespace vpad void load() { - cafeExportRegister("vpad", VPADSetBtnRepeat, LogType::Input); - cafeExportRegister("vpad", VPADSetSamplingCallback, LogType::Input); - cafeExportRegister("vpad", VPADRead, LogType::Input); + cafeExportRegister("vpad", VPADSetBtnRepeat, LogType::InputAPI); + cafeExportRegister("vpad", VPADSetSamplingCallback, LogType::InputAPI); + cafeExportRegister("vpad", VPADRead, LogType::InputAPI); osLib_addFunction("vpad", "VPADGetAccParam", vpadExport_VPADGetAccParam); osLib_addFunction("vpad", "VPADSetAccParam", vpadExport_VPADSetAccParam); diff --git a/src/Cemu/Logging/CemuLogging.cpp b/src/Cemu/Logging/CemuLogging.cpp index 28a86427..ccf594bc 100644 --- a/src/Cemu/Logging/CemuLogging.cpp +++ b/src/Cemu/Logging/CemuLogging.cpp @@ -33,16 +33,16 @@ struct _LogContext const std::map g_logging_window_mapping { - {LogType::File, "Coreinit File-Access"}, + {LogType::CoreinitFile, "Coreinit File-Access"}, {LogType::GX2, "GX2"}, {LogType::ThreadSync, "Coreinit Thread-Synchronization"}, {LogType::SoundAPI, "Audio"}, - {LogType::Input, "Input"}, + {LogType::InputAPI, "Input"}, {LogType::Socket, "Socket"}, {LogType::Save, "Save"}, {LogType::CoreinitMem, "Coreinit Memory"}, {LogType::H264, "H264"}, - {LogType::OpenGL, "OpenGL"}, + {LogType::OpenGLLogging, "OpenGL"}, {LogType::TextureCache, "Texture Cache"}, {LogType::nn_nfp, "NFP"}, }; diff --git a/src/Cemu/Logging/CemuLogging.h b/src/Cemu/Logging/CemuLogging.h index 67de6a6a..6bea01e7 100644 --- a/src/Cemu/Logging/CemuLogging.h +++ b/src/Cemu/Logging/CemuLogging.h @@ -5,17 +5,17 @@ enum class LogType : sint32 Placeholder = -2, None = -1, Force = 0, // this logging type is always on - File = 1, // coreinit file? + CoreinitFile = 1, GX2 = 2, UnsupportedAPI = 3, ThreadSync = 4, SoundAPI = 5, // any audio related API - Input = 6, // any input related API + InputAPI = 6, // any input related API Socket = 7, Save = 8, CoreinitMem = 9, // coreinit memory functions H264 = 10, - OpenGL = 11, // OpenGL debug logging + OpenGLLogging = 11, // OpenGL debug logging TextureCache = 12, // texture cache warnings and info VulkanValidation = 13, // Vulkan validation layer nn_nfp = 14, // nn_nfp (Amiibo) API @@ -31,6 +31,8 @@ enum class LogType : sint32 ProcUi = 40, + TextureReadback = 60, + APIErrors = 0, // alias for 0. Logs bad parameters or other API errors in OS libs }; diff --git a/src/Common/precompiled.h b/src/Common/precompiled.h index f17d47d4..641eabb4 100644 --- a/src/Common/precompiled.h +++ b/src/Common/precompiled.h @@ -516,3 +516,15 @@ inline uint32 GetTitleIdLow(uint64 titleId) #include "Cafe/HW/MMU/MMU.h" #include "Cafe/HW/Espresso/PPCState.h" #include "Cafe/HW/Espresso/PPCCallback.h" + +// useful C++23 stuff that isn't yet widely supported + +// std::to_underlying +namespace stdx +{ + template {} >> + constexpr std::underlying_type_t to_underlying(EnumT e) noexcept { + return static_cast>(e); + }; +} + diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 707fe2c7..45673cbe 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -2113,26 +2113,27 @@ void MainWindow::RecreateMenu() // debug->logging submenu wxMenu* debugLoggingMenu = new wxMenu; - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_UNSUPPORTED_API, _("&Unsupported API calls"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_UNSUPPORTED_API)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_COREINIT_LOGGING, _("&Coreinit Logging (OSReport/OSConsole)"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_COREINIT_LOGGING)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_FILE, _("&Coreinit File-Access"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_FILE)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_THREADSYNC, _("&Coreinit Thread-Synchronization API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_THREADSYNC)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_COREINIT_MEM, _("&Coreinit Memory API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_COREINIT_MEM)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_COREINIT_MP, _("&Coreinit MP API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_COREINIT_MP)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_COREINIT_THREAD, _("&Coreinit Thread API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_COREINIT_THREAD)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_NFP, _("&NN NFP"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_NFP)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_GX2, _("&GX2 API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_GX2)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_SNDAPI, _("&Audio API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_SNDAPI)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_INPUT, _("&Input API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_INPUT)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_SOCKET, _("&Socket API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_SOCKET)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_SAVE, _("&Save API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_SAVE)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_H264, _("&H264 API"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_H264)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::UnsupportedAPI), _("&Unsupported API calls"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::UnsupportedAPI)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::CoreinitLogging), _("&Coreinit Logging (OSReport/OSConsole)"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::CoreinitLogging)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::CoreinitFile), _("&Coreinit File-Access API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::CoreinitFile)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::ThreadSync), _("&Coreinit Thread-Synchronization API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::ThreadSync)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::CoreinitMem), _("&Coreinit Memory API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::CoreinitMem)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::CoreinitMP), _("&Coreinit MP API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::CoreinitMP)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::CoreinitThread), _("&Coreinit Thread API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::CoreinitThread)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::nn_nfp), _("&NN NFP"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::nn_nfp)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::GX2), _("&GX2 API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::GX2)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::SoundAPI), _("&Audio API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::SoundAPI)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::InputAPI), _("&Input API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::InputAPI)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::Socket), _("&Socket API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::Socket)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::Save), _("&Save API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::Save)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::H264), _("&H264 API"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::H264)); debugLoggingMenu->AppendSeparator(); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_PATCHES, _("&Graphic pack patches"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_PATCHES)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_TEXTURE_CACHE, _("&Texture cache warnings"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_TEXTURE_CACHE)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::Patches), _("&Graphic pack patches"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::Patches)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::TextureCache), _("&Texture cache warnings"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::TextureCache)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::TextureReadback), _("&Texture readback"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::TextureReadback)); debugLoggingMenu->AppendSeparator(); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_OPENGL, _("&OpenGL debug output"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_OPENGL)); - debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + LOG_TYPE_VULKAN_VALIDATION, _("&Vulkan validation layer (slow)"), wxEmptyString)->Check(cafeLog_isLoggingFlagEnabled(LOG_TYPE_VULKAN_VALIDATION)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::OpenGLLogging), _("&OpenGL debug output"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::OpenGLLogging)); + debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::VulkanValidation), _("&Vulkan validation layer (slow)"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::VulkanValidation)); #ifdef CEMU_DEBUG_ASSERT debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_ADVANCED_PPC_INFO, _("&Log PPC context for API"), wxEmptyString)->Check(cemuLog_advancedPPCLoggingEnabled()); #endif