diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef9eb1a1..ac010c8f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" >> $GITHUB_ENV - echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" >> $GITHUB_ENV + echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is release" - name: Setup debug mode parameters (for continous build) if: ${{ inputs.deploymode != 'release' }} @@ -99,7 +99,7 @@ jobs: if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append echo "Build mode is release" - name: Setup debug mode parameters (for continous build) @@ -173,7 +173,7 @@ jobs: if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" >> $GITHUB_ENV - echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" >> $GITHUB_ENV + echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is release" - name: Setup debug mode parameters (for continous build) if: ${{ inputs.deploymode != 'release' }} diff --git a/BUILD.md b/BUILD.md index aef76a81..f4d7c72e 100644 --- a/BUILD.md +++ b/BUILD.md @@ -30,7 +30,7 @@ To compile Cemu, a recent enough compiler and STL with C++20 support is required *Additionally, for Ubuntu 22.04 only:* - `sudo apt install -y clang-12` - At step 3 while building, use - `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DPUBLIC_RELEASE=ON -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja` + `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja` #### For Arch and derivatives: `sudo pacman -S git cmake clang ninja nasm base-devel linux-headers gtk3 libsecret libgcrypt systemd freeglut zip unzip libpulse` @@ -41,14 +41,14 @@ To compile Cemu, a recent enough compiler and STL with C++20 support is required ### Build Cemu using cmake and clang 1. `git clone --recursive https://github.com/cemu-project/Cemu` 2. `cd Cemu` -3. `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DPUBLIC_RELEASE=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -G Ninja` +3. `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -G Ninja` 4. `cmake --build build` 5. You should now have a Cemu executable file in the /bin folder, which you can run using `./bin/Cemu_release`. #### Using GCC While we use and test Cemu using clang, using GCC might work better with your distro (they should be fairly similar performance/issues wise and should only be considered if compilation is the issue). You can use it by replacing the step 3 with the following: -`cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DPUBLIC_RELEASE=ON -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -G Ninja` +`cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -G Ninja` #### Troubleshooting steps - If step 3 gives you an error about not being able to find ninja, try appending `-DCMAKE_MAKE_PROGRAM=/usr/bin/ninja` to the command and running it again. diff --git a/CMakeLists.txt b/CMakeLists.txt index 483a9eff..e5ddc6fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 3.21.1) -option(PUBLIC_RELEASE "Compile with debug asserts disabled and no console" OFF) option(ENABLE_VCPKG "Enable the vcpkg package manager" ON) set(EXPERIMENTAL_VERSION "" CACHE STRING "") # used by CI script to set experimental version @@ -29,13 +28,14 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if (PUBLIC_RELEASE) - add_compile_definitions(PUBLIC_RELEASE) - set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # enable LTO -endif() +add_compile_definitions($<$:CEMU_DEBUG_ASSERT>) # if build type is debug, set CEMU_DEBUG_ASSERT set_property(GLOBAL PROPERTY USE_FOLDERS ON) +# enable link time optimization for release builds +set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON) +set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO ON) + if (MSVC) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CemuBin) # floating point model: precise, fiber safe optimizations @@ -48,10 +48,9 @@ if (MSVC) else() add_compile_options(/GT) endif() - if (PUBLIC_RELEASE) - message(STATUS "Using additional optimization flags for MSVC") - add_compile_options(/Oi /Ot) # enable intrinsic functions, favor speed - endif() + # enable additional optimization flags for release builds + add_compile_options($<$:/Oi>) # enable intrinsic functions + add_compile_options($<$:/Ot>) # favor speed endif() if (APPLE) diff --git a/CMakeSettings.json b/CMakeSettings.json index f7f9fe6e..3097caab 100644 --- a/CMakeSettings.json +++ b/CMakeSettings.json @@ -1,7 +1,7 @@ { "configurations": [ { - "name": "Release", + "name": "RelWithDebInfo", "configurationType": "RelWithDebInfo", "generator": "Ninja", "inheritEnvironments": [ "msvc_x64_x64" ], @@ -9,13 +9,12 @@ "installRoot": "${projectDir}\\out\\install\\${name}" }, { - "name": "Public Release", - "configurationType": "RelWithDebInfo", + "name": "Release", + "configurationType": "Release", "generator": "Ninja", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "-DPUBLIC_RELEASE=ON" }, { "name": "Debug", diff --git a/generate_vs_solution.bat b/generate_vs_solution.bat index dfef2e80..21060027 100644 --- a/generate_vs_solution.bat +++ b/generate_vs_solution.bat @@ -1,2 +1,2 @@ -"C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" -B build/ -DPUBLIC_RELEASE=ON +"C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" -B build/ pause \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d3bf8aec..024432d0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -54,17 +54,10 @@ add_subdirectory(imgui) add_subdirectory(resource) add_subdirectory(asm) -if(PUBLIC_RELEASE) - add_executable(CemuBin WIN32 - main.cpp - mainLLE.cpp - ) -else() - add_executable(CemuBin - main.cpp - mainLLE.cpp - ) -endif() +add_executable(CemuBin + main.cpp + mainLLE.cpp +) if(WIN32) target_sources(CemuBin PRIVATE @@ -73,6 +66,7 @@ if(WIN32) endif() set_property(TARGET CemuBin PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +set_property(TARGET CemuBin PROPERTY WIN32_EXECUTABLE $>) set_target_properties(CemuBin PROPERTIES # multi-configuration generators will add a config subdirectory to RUNTIME_OUTPUT_DIRECTORY if no generator expression is used diff --git a/src/Cafe/GamePatch.cpp b/src/Cafe/GamePatch.cpp index e5a67d98..0d5e30ab 100644 --- a/src/Cafe/GamePatch.cpp +++ b/src/Cafe/GamePatch.cpp @@ -199,7 +199,7 @@ MPTR hle_locate(uint8* data, uint8* mask, sint32 dataLength) } else { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (mask[0] != 0xFF) assert_dbg(); #endif @@ -299,7 +299,7 @@ void GamePatch_scan() hleAddr = hle_locate(xcx_gpuHangDetection_degradeFramebuffer, NULL, sizeof(xcx_gpuHangDetection_degradeFramebuffer)); if( hleAddr ) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("HLE: XCX GPU hang detection"); #endif // remove the ADDI r25, r25, 1 instruction @@ -309,7 +309,7 @@ void GamePatch_scan() hleAddr = hle_locate(xcx_framebufferReductionSignature, xcx_framebufferReductionMask, sizeof(xcx_framebufferReductionSignature)); if( hleAddr ) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("HLE: Prevent XCX rendertarget reduction"); #endif uint32 bl = memory_readU32(hleAddr+0x14); @@ -325,7 +325,7 @@ void GamePatch_scan() hleAddr = hle_locate(botw_busyLoopSignature, botw_busyLoopMask, sizeof(botw_busyLoopSignature)); if (hleAddr) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("HLE: Patch BotW busy loop 1 at 0x%08x", hleAddr); #endif sint32 functionIndex = hleIndex_h000000001; @@ -336,7 +336,7 @@ void GamePatch_scan() hleAddr = hle_locate(botw_busyLoopSignature2, botw_busyLoopMask2, sizeof(botw_busyLoopSignature2)); if (hleAddr) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("HLE: Patch BotW busy loop 2 at 0x%08x", hleAddr); #endif sint32 functionIndex = hleIndex_h000000002; diff --git a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp index a3e45679..dbbdb08d 100644 --- a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp +++ b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp @@ -384,7 +384,7 @@ static void PPCInterpreter_MULHW_(PPCInterpreter_t* hCPU, uint32 opcode) hCPU->gpr[rD] = ((uint64)c) >> 32; if (opcode & PPC_OPC_RC) { // update cr0 flags -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif ppc_update_cr0(hCPU, hCPU->gpr[rD]); diff --git a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterImpl.cpp b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterImpl.cpp index 6e3de535..8cc8a6a8 100644 --- a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterImpl.cpp +++ b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterImpl.cpp @@ -139,7 +139,7 @@ public: return vAddr; } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (hCPU->memoryException) assert_dbg(); // should not be set anymore #endif @@ -456,7 +456,7 @@ public: { case 0: debug_printf("ZERO[NOP] | 0x%08X\n", (unsigned int)hCPU->instructionPointer); - #ifndef PUBLIC_RELEASE + #ifdef CEMU_DEBUG_ASSERT assert_dbg(); while (true) std::this_thread::sleep_for(std::chrono::seconds(1)); #endif @@ -712,7 +712,7 @@ public: PPCInterpreter_CMP(hCPU, opcode); break; case 4: - #ifndef PUBLIC_RELEASE + #ifdef CEMU_DEBUG_ASSERT debug_printf("TW instruction executed at %08x\n", hCPU->instructionPointer); #endif PPCInterpreter_TW(hCPU, opcode); @@ -998,7 +998,7 @@ public: break; default: debug_printf("Unknown execute %04X as [31] at %08X\n", PPC_getBits(opcode, 30, 10), hCPU->instructionPointer); - #ifndef PUBLIC_RELEASE + #ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif hCPU->instructionPointer += 4; diff --git a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterSPR.hpp b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterSPR.hpp index 819f317a..2d38e728 100644 --- a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterSPR.hpp +++ b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterSPR.hpp @@ -559,7 +559,7 @@ static void PPCSprSupervisor_set(PPCInterpreter_t* hCPU, uint32 spr, uint32 newV break; default: debug_printf("[C%d] Set unhandled SPR 0x%x to %08x (supervisor mode)\n", hCPU->spr.UPIR, spr, newValue); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif break; @@ -598,7 +598,7 @@ static void PPCSpr_set(PPCInterpreter_t* hCPU, uint32 spr, uint32 newValue) break; default: debug_printf("[C%d] Set unhandled SPR %d to %08x\n", hCPU->spr.UPIR, spr, newValue); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif break; @@ -782,7 +782,7 @@ static uint32 PPCSprSupervisor_get(PPCInterpreter_t* hCPU, uint32 spr) break; default: debug_printf("[C%d] Get unhandled SPR %d\n", hCPU->spr.UPIR, spr); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif break; @@ -840,7 +840,7 @@ static uint32 PPCSpr_get(PPCInterpreter_t* hCPU, uint32 spr) break; default: debug_printf("[C%d] Get unhandled SPR %d\n", hCPU->spr.UPIR, spr); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif break; diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCFunctionBoundaryTracker.h b/src/Cafe/HW/Espresso/Recompiler/PPCFunctionBoundaryTracker.h index 48782454..e558292b 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCFunctionBoundaryTracker.h +++ b/src/Cafe/HW/Espresso/Recompiler/PPCFunctionBoundaryTracker.h @@ -153,7 +153,7 @@ private: void checkForCollisions() { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT uint32 endOfPrevious = 0; for (auto itr : map_ranges) { diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompiler.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompiler.cpp index 61aa11ca..98263ff3 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompiler.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompiler.cpp @@ -78,7 +78,7 @@ void PPCRecompiler_enter(PPCInterpreter_t* hCPU, PPCREC_JUMP_ENTRY funcPtr) PPCRecompiler_enterRecompilerCode((uint64)funcPtr, (uint64)hCPU); _controlfp(prevState, _MCW_RC); // debug recompiler exit - useful to find frequently executed functions which couldn't be recompiled - #ifndef PUBLIC_RELEASE + #ifdef CEMU_DEBUG_ASSERT if (hCPU->remainingCycles > 0 && GetAsyncKeyState(VK_F4)) { auto t = std::chrono::high_resolution_clock::now(); diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlGen.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlGen.cpp index 7291ac41..485c85bf 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlGen.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlGen.cpp @@ -415,7 +415,7 @@ uint32 PPCRecompilerImlGen_loadOverwriteFPRRegister(ppcImlGenContext_t* ppcImlGe void PPCRecompilerImlGen_TW(ppcImlGenContext_t* ppcImlGenContext, uint32 opcode) { -//#ifndef PUBLIC_RELEASE +//#ifdef CEMU_DEBUG_ASSERT // PPCRecompilerImlGen_generateNewInstruction_macro(ppcImlGenContext, PPCREC_IML_MACRO_DEBUGBREAK, ppcImlGenContext->ppcAddressOfCurrentInstruction, 0, 0); //#endif PPCRecompilerImlGen_generateNewInstruction_macro(ppcImlGenContext, PPCREC_IML_MACRO_LEAVE, ppcImlGenContext->ppcAddressOfCurrentInstruction, 0, 0); @@ -2271,7 +2271,7 @@ bool PPCRecompilerImlGen_LSWI(ppcImlGenContext_t* ppcImlGenContext, uint32 opcod // if nb == 4 this instruction immitates LWZ if( rA == 0 ) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); // special form where gpr is ignored and only imm is used #endif return false; @@ -2291,7 +2291,7 @@ bool PPCRecompilerImlGen_LSWI(ppcImlGenContext_t* ppcImlGenContext, uint32 opcod // if nb == 2 this instruction immitates a LHZ but the result is shifted left by 16 bits if( rA == 0 ) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); // special form where gpr is ignored and only imm is used #endif return false; @@ -2313,7 +2313,7 @@ bool PPCRecompilerImlGen_LSWI(ppcImlGenContext_t* ppcImlGenContext, uint32 opcod // if nb == 3 this instruction loads a 3-byte big-endian and the result is shifted left by 8 bits if( rA == 0 ) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); // special form where gpr is ignored and only imm is used #endif return false; @@ -4560,7 +4560,7 @@ bool PPCRecompiler_generateIntermediateCode(ppcImlGenContext_t& ppcImlGenContext if( ppcImlGenContext.imlList[i].type == PPCREC_IML_TYPE_JUMPMARK ) { ppcImlGenContext.imlList[i].op_jumpmark.flags |= PPCREC_IML_OP_FLAG_UNUSED; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (map_jumpMarks.find(ppcImlGenContext.imlList[i].op_jumpmark.address) != map_jumpMarks.end()) assert_dbg(); #endif diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlOptimizer.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlOptimizer.cpp index 1a15bd22..45e27664 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlOptimizer.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlOptimizer.cpp @@ -2151,7 +2151,7 @@ void _reorderConditionModifyInstructions(PPCRecImlSegment_t* imlSegment) } // move CR setter instruction -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if ((unsafeInstructionIndex + 1) <= crSetterInstructionIndex) assert_dbg(); #endif diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRanges.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRanges.cpp index f6370d8c..d31c02d4 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRanges.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRanges.cpp @@ -6,7 +6,7 @@ void PPCRecRARange_addLink_perVirtualGPR(raLivenessSubrange_t** root, raLivenessSubrange_t* subrange) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if ((*root) && (*root)->range->virtualRegister != subrange->range->virtualRegister) assert_dbg(); #endif @@ -35,7 +35,7 @@ void PPCRecRARange_removeLink_perVirtualGPR(raLivenessSubrange_t** root, raLiven (*root) = subrange->link_sameVirtualRegisterGPR.next; if (subrange->link_sameVirtualRegisterGPR.next) subrange->link_sameVirtualRegisterGPR.next->link_sameVirtualRegisterGPR.prev = tempPrev; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT subrange->link_sameVirtualRegisterGPR.prev = (raLivenessSubrange_t*)1; subrange->link_sameVirtualRegisterGPR.next = (raLivenessSubrange_t*)1; #endif @@ -50,7 +50,7 @@ void PPCRecRARange_removeLink_allSubrangesGPR(raLivenessSubrange_t** root, raLiv (*root) = subrange->link_segmentSubrangesGPR.next; if (subrange->link_segmentSubrangesGPR.next) subrange->link_segmentSubrangesGPR.next->link_segmentSubrangesGPR.prev = tempPrev; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT subrange->link_segmentSubrangesGPR.prev = (raLivenessSubrange_t*)1; subrange->link_segmentSubrangesGPR.next = (raLivenessSubrange_t*)1; #endif @@ -162,7 +162,7 @@ void PPCRecRA_mergeRanges(ppcImlGenContext_t* ppcImlGenContext, raLivenessRange_ void PPCRecRA_mergeSubranges(ppcImlGenContext_t* ppcImlGenContext, raLivenessSubrange_t* subrange, raLivenessSubrange_t* absorbedSubrange) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT PPCRecRA_debugValidateSubrange(subrange); PPCRecRA_debugValidateSubrange(absorbedSubrange); if (subrange->imlSegment != absorbedSubrange->imlSegment) @@ -212,7 +212,7 @@ void PPCRecRA_explodeRange(ppcImlGenContext_t* ppcImlGenContext, raLivenessRange PPCRecRA_deleteRange(ppcImlGenContext, range); } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT void PPCRecRA_debugValidateSubrange(raLivenessSubrange_t* subrange) { // validate subrange @@ -236,7 +236,7 @@ void PPCRecRA_debugValidateSubrange(raLivenessSubrange_t* subrange) {} raLivenessSubrange_t* PPCRecRA_splitLocalSubrange(ppcImlGenContext_t* ppcImlGenContext, raLivenessSubrange_t* subrange, sint32 splitIndex, bool trimToHole) { // validation -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (subrange->end.index == RA_INTER_RANGE_END || subrange->end.index == RA_INTER_RANGE_START) assert_dbg(); if (subrange->start.index >= splitIndex) @@ -364,7 +364,7 @@ sint32 PPCRecRARange_estimateAdditionalCostAfterRangeExplode(raLivenessRange_t* sint32 PPCRecRARange_estimateAdditionalCostAfterSplit(raLivenessSubrange_t* subrange, sint32 splitIndex) { // validation -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (subrange->end.index == RA_INTER_RANGE_END) assert_dbg(); #endif diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator.cpp index 92fbd9b0..88d387e6 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator.cpp @@ -91,7 +91,7 @@ raRegisterState_t* PPCRecRA_getRegisterState(raRegisterState_t* regState, sint32 { if (regState[i].virtualRegister == virtualRegister) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (regState[i].physicalRegister < 0) assert_dbg(); #endif @@ -300,7 +300,7 @@ void _sortSegmentAllSubrangesLinkedList(PPCRecImlSegment_t* imlSegment) subrangeList[i]->link_segmentSubrangesGPR.next = subrangeList[i + 1]; } // validate list -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT sint32 count2 = 0; subrangeItr = imlSegment->raInfo.linkedList_allSubranges; sint32 currentStartIndex = RA_INTER_RANGE_START; @@ -342,7 +342,7 @@ bool PPCRecRA_assignSegmentRegisters(ppcImlGenContext_t* ppcImlGenContext, PPCRe raLivenessSubrange_t* liverange = liveInfo.liveRangeList[f]; if (liverange->end.index <= currentIndex && liverange->end.index != RA_INTER_RANGE_END) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (liverange->subrangeBranchTaken || liverange->subrangeBranchNotTaken) assert_dbg(); // infinite subranges should not expire #endif @@ -356,7 +356,7 @@ bool PPCRecRA_assignSegmentRegisters(ppcImlGenContext_t* ppcImlGenContext, PPCRe if (subrangeItr->range->physicalRegister >= 0) { // verify if register is actually available -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT for (sint32 f = 0; f < liveInfo.liveRangesCount; f++) { raLivenessSubrange_t* liverangeItr = liveInfo.liveRangeList[f]; @@ -778,7 +778,7 @@ void PPCRecRA_generateSegmentInstructions(ppcImlGenContext_t* ppcImlGenContext, { liveInfo.liveRangeList[liveInfo.liveRangesCount] = subrangeItr; liveInfo.liveRangesCount++; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT // load GPR if (subrangeItr->_noLoad == false) { diff --git a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator2.cpp b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator2.cpp index e2070703..0fbad0fc 100644 --- a/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator2.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/PPCRecompilerImlRegisterAllocator2.cpp @@ -105,7 +105,7 @@ void PPCRecRA_createSegmentLivenessRanges(ppcImlGenContext_t* ppcImlGenContext, for (sint32 i = 0; i < PPC_REC_MAX_VIRTUAL_GPR; i++) { vGPR2Subrange[i] = imlSegment->raInfo.linkedList_perVirtualGPR[i]; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (vGPR2Subrange[i] && vGPR2Subrange[i]->link_sameVirtualRegisterGPR.next != nullptr) assert_dbg(); #endif @@ -129,7 +129,7 @@ void PPCRecRA_createSegmentLivenessRanges(ppcImlGenContext_t* ppcImlGenContext, bool isWrite = (t == 3); // add location PPCRecRA_updateOrAddSubrangeLocation(vGPR2Subrange[virtualRegister], index, isWrite == false, isWrite); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (index < vGPR2Subrange[virtualRegister]->start.index) assert_dbg(); if (index+1 > vGPR2Subrange[virtualRegister]->end.index) @@ -172,7 +172,7 @@ void PPCRecRA_extendRangeToBeginningOfSegment(ppcImlGenContext_t* ppcImlGenConte void _PPCRecRA_connectRanges(ppcImlGenContext_t* ppcImlGenContext, sint32 vGPR, PPCRecImlSegment_t** route, sint32 routeDepth) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (routeDepth < 2) assert_dbg(); #endif @@ -226,7 +226,7 @@ void _PPCRecRA_checkAndTryExtendRange(ppcImlGenContext_t* ppcImlGenContext, PPCR void PPCRecRA_checkAndTryExtendRange(ppcImlGenContext_t* ppcImlGenContext, PPCRecImlSegment_t* currentSegment, sint32 vGPR) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (currentSegment->raDistances.reg[vGPR].usageEnd < 0) assert_dbg(); #endif @@ -239,7 +239,7 @@ void PPCRecRA_checkAndTryExtendRange(ppcImlGenContext_t* ppcImlGenContext, PPCRe else instructionsUntilEndOfSeg = currentSegment->imlListCount - currentSegment->raDistances.reg[vGPR].usageEnd; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (instructionsUntilEndOfSeg < 0) assert_dbg(); #endif @@ -269,7 +269,7 @@ void PPCRecRA_mergeCloseRangesForSegmentV2(ppcImlGenContext_t* ppcImlGenContext, // check and extend if possible PPCRecRA_checkAndTryExtendRange(ppcImlGenContext, imlSegment, i); } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (imlSegment->list_prevSegments.empty() == false && imlSegment->isEnterable) assert_dbg(); if ((imlSegment->nextSegmentBranchNotTaken != nullptr || imlSegment->nextSegmentBranchTaken != nullptr) && imlSegment->nextSegmentIsUncertain) diff --git a/src/Cafe/HW/Latte/Core/FetchShader.cpp b/src/Cafe/HW/Latte/Core/FetchShader.cpp index 1c0a72a0..c6756f4e 100644 --- a/src/Cafe/HW/Latte/Core/FetchShader.cpp +++ b/src/Cafe/HW/Latte/Core/FetchShader.cpp @@ -505,7 +505,7 @@ LatteFetchShader* LatteFetchShader::FindByGPUState() lookupInfo->programSize = _getFSProgramSize(); lookupInfo->lastFrameAccessed = LatteGPUState.frameCounter; g_fetchShaderLookupCache.store(fsPhysAddr24, lookupInfo); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(g_fetchShaderLookupCache.lookup(fsPhysAddr24) == lookupInfo); #endif } diff --git a/src/Cafe/HW/Latte/Core/LatteBufferCache.cpp b/src/Cafe/HW/Latte/Core/LatteBufferCache.cpp index 426568a8..a70ff888 100644 --- a/src/Cafe/HW/Latte/Core/LatteBufferCache.cpp +++ b/src/Cafe/HW/Latte/Core/LatteBufferCache.cpp @@ -87,7 +87,7 @@ public: return; // do nothing if added range is already covered rangeBegin = (std::min)(rangeBegin, (*itr).first.rangeBegin); // DEBUG - make sure this is the start point of the merge process (the first entry that starts below minValue) -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (itr != m_map.cbegin()) { // check previous result diff --git a/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp b/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp index b95b84d3..417e3b8c 100644 --- a/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp +++ b/src/Cafe/HW/Latte/Core/LatteCommandProcessor.cpp @@ -136,7 +136,7 @@ uint32 LatteCP_readU32Deprc() } v = *(uint32*)gxRingBufferReadPtr; gxRingBufferReadPtr += 4; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (v == 0xcdcdcdcd) assert_dbg(); #endif @@ -299,7 +299,7 @@ LatteCMDPtr LatteCP_itSetRegistersGeneric(LatteCMDPtr cmd, uint32 nWords) uint32 registerIndex = TRegisterBase + registerOffset; uint32 registerStartIndex = registerIndex; uint32 registerEndIndex = registerStartIndex + nWords; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug((registerIndex + nWords) <= LATTE_MAX_REGISTER); #endif uint32* outputReg = (uint32*)(LatteGPUState.contextRegister + registerIndex); @@ -340,7 +340,7 @@ LatteCMDPtr LatteCP_itSetRegistersGeneric(LatteCMDPtr cmd, uint32 nWords, TRegRa uint32 registerIndex = TRegisterBase + registerOffset; uint32 registerStartIndex = registerIndex; uint32 registerEndIndex = registerStartIndex + nWords; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug((registerIndex + nWords) <= LATTE_MAX_REGISTER); #endif cbRegRange(registerStartIndex, registerEndIndex); @@ -1069,7 +1069,7 @@ void LatteCP_processCommandBuffer(uint8* cmdBuffer, sint32 cmdSize, DrawPassCont { uint32 itCode = (itHeader >> 8) & 0xFF; uint32 nWords = ((itHeader >> 16) & 0x3FFF) + 1; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT LatteCMDPtr expectedPostCmd = cmd + nWords; #endif switch (itCode) @@ -1126,7 +1126,7 @@ void LatteCP_processCommandBuffer(uint8* cmdBuffer, sint32 cmdSize, DrawPassCont return; cemu_assert_debug(!drawPassCtx.isWithinDrawPass()); } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT expectedPostCmd = cmd; #endif } @@ -1156,7 +1156,7 @@ void LatteCP_processCommandBuffer(uint8* cmdBuffer, sint32 cmdSize, DrawPassCont cmd = LatteCP_itDrawIndex2(cmd, nWords, drawPassCtx); cmd = LatteCP_processCommandBuffer_continuousDrawPass(cmd, cmdStart, cmdEnd, drawPassCtx); cemu_assert_debug(cmd == cmdEnd || drawPassCtx.isWithinDrawPass() == false); // draw sequence should have ended if we didn't reach the end of the command buffer -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT expectedPostCmd = cmd; #endif } @@ -1167,7 +1167,7 @@ void LatteCP_processCommandBuffer(uint8* cmdBuffer, sint32 cmdSize, DrawPassCont cmd = LatteCP_itDrawIndexAuto(cmd, nWords, drawPassCtx); cmd = LatteCP_processCommandBuffer_continuousDrawPass(cmd, cmdStart, cmdEnd, drawPassCtx); cemu_assert_debug(cmd == cmdEnd || drawPassCtx.isWithinDrawPass() == false); // draw sequence should have ended if we didn't reach the end of the command buffer -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT expectedPostCmd = cmd; #endif #ifdef FAST_DRAW_LOGGING @@ -1313,7 +1313,7 @@ void LatteCP_processCommandBuffer(uint8* cmdBuffer, sint32 cmdSize, DrawPassCont cemu_assert_debug(false); LatteSkipCMD(nWords); } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if(cmd != expectedPostCmd) debug_printf("cmd %016p expectedPostCmd %016p\n", cmd, expectedPostCmd); cemu_assert_debug(cmd == expectedPostCmd); diff --git a/src/Cafe/HW/Latte/Core/LatteOverlay.cpp b/src/Cafe/HW/Latte/Core/LatteOverlay.cpp index cb7c9baf..2a655c18 100644 --- a/src/Cafe/HW/Latte/Core/LatteOverlay.cpp +++ b/src/Cafe/HW/Latte/Core/LatteOverlay.cpp @@ -402,7 +402,7 @@ void LatteOverlay_RenderNotifications(ImVec2& position, ImVec2& pivot, sint32 di ImRotateEnd(0.001f * ticks.time_since_epoch().count()); ImGui::SameLine(); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT uint64 totalTime = g_compiling_pipelines_syncTimeSum / 1000000ull; if (s_pipeline_count_async > 0) { diff --git a/src/Cafe/HW/Latte/Core/LatteRenderTarget.cpp b/src/Cafe/HW/Latte/Core/LatteRenderTarget.cpp index 11048504..18d715d8 100644 --- a/src/Cafe/HW/Latte/Core/LatteRenderTarget.cpp +++ b/src/Cafe/HW/Latte/Core/LatteRenderTarget.cpp @@ -506,7 +506,7 @@ bool LatteMRT::UpdateCurrentFBO() } else if (rtEffectiveSize->width != effectiveWidth && rtEffectiveSize->height != effectiveHeight) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("Color buffer size mismatch (%dx%d). Effective size: %dx%d Real size: %dx%d Mismatching texture: %08x %dx%d fmt %04x", rtEffectiveSize->width, rtEffectiveSize->height, effectiveWidth, effectiveHeight, colorAttachmentView->baseTexture->width, colorAttachmentView->baseTexture->height, colorAttachmentView->baseTexture->physAddress, colorAttachmentView->baseTexture->width, colorAttachmentView->baseTexture->height, (uint32)colorAttachmentView->baseTexture->format); #endif } diff --git a/src/Cafe/HW/Latte/Core/LatteRingBuffer.cpp b/src/Cafe/HW/Latte/Core/LatteRingBuffer.cpp index 15c2b24c..22eeea4b 100644 --- a/src/Cafe/HW/Latte/Core/LatteRingBuffer.cpp +++ b/src/Cafe/HW/Latte/Core/LatteRingBuffer.cpp @@ -11,7 +11,7 @@ LatteRingBuffer_t* LatteRingBuffer_create(uint8* data, uint32 size) uint8* LatteRingBuffer_allocate(LatteRingBuffer_t* rb, sint32 size, sint32 alignment) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(size < rb->size); #endif // align diff --git a/src/Cafe/HW/Latte/Core/LatteShader.cpp b/src/Cafe/HW/Latte/Core/LatteShader.cpp index 5e97d485..f4dd4007 100644 --- a/src/Cafe/HW/Latte/Core/LatteShader.cpp +++ b/src/Cafe/HW/Latte/Core/LatteShader.cpp @@ -236,7 +236,7 @@ void LatteShader_UpdatePSInputs(uint32* contextRegisters) } // semantic imports from vertex shader -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT uint8 semanticMask[256 / 8] = { 0 }; #endif cemu_assert_debug(numPSInputs <= GPU7_PS_MAX_INPUTS); @@ -273,7 +273,7 @@ void LatteShader_UpdatePSInputs(uint32* contextRegisters) } else { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (semanticMask[psSemanticId >> 3] & (1 << (psSemanticId & 7))) { forceLogDebug_printf("SemanticId already used"); diff --git a/src/Cafe/HW/Latte/Core/LatteSoftware.cpp b/src/Cafe/HW/Latte/Core/LatteSoftware.cpp index 8e5ec29b..57af8d83 100644 --- a/src/Cafe/HW/Latte/Core/LatteSoftware.cpp +++ b/src/Cafe/HW/Latte/Core/LatteSoftware.cpp @@ -252,7 +252,7 @@ float LatteSoftware_omod(uint32 omod, float f) return 0.0f; } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT #define _clamp(__v) if(destClamp != 0) cemu_assert_unimplemented() #else #define _clamp(__v) // todo diff --git a/src/Cafe/HW/Latte/Core/LatteStreamoutGPU.cpp b/src/Cafe/HW/Latte/Core/LatteStreamoutGPU.cpp index 07e7106d..e212dd18 100644 --- a/src/Cafe/HW/Latte/Core/LatteStreamoutGPU.cpp +++ b/src/Cafe/HW/Latte/Core/LatteStreamoutGPU.cpp @@ -100,7 +100,7 @@ void LatteStreamout_PrepareDrawcall(uint32 count, uint32 instanceCount) uint32 streamoutWriteMask = 0; if (geometryShader) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(vertexShader->streamoutBufferWriteMask2.any() == false); #endif for (sint32 i = 0; i < LATTE_NUM_STREAMOUT_BUFFER; i++) diff --git a/src/Cafe/HW/Latte/Core/LatteTexture.cpp b/src/Cafe/HW/Latte/Core/LatteTexture.cpp index 899888de..17621c8f 100644 --- a/src/Cafe/HW/Latte/Core/LatteTexture.cpp +++ b/src/Cafe/HW/Latte/Core/LatteTexture.cpp @@ -1089,7 +1089,7 @@ LatteTextureView* LatteTexture_CreateMapping(MPTR physAddr, MPTR physMipAddr, si // for accesses to mips/slices using a physAddress offset we manually need to create a new view lookup // by default views only create a lookup for the base texture physAddress view->CreateLookupForSubTexture(relativeMipIndex, relativeSliceIndex); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT LatteTextureView* testView = LatteTextureViewLookupCache::lookup(physAddr, width, height, depth, pitch, firstMip, numMip, firstSlice, numSlice, format, dimView); cemu_assert(testView); #endif diff --git a/src/Cafe/HW/Latte/Core/LatteTextureLegacy.cpp b/src/Cafe/HW/Latte/Core/LatteTextureLegacy.cpp index 8d4c7efb..1bf17c51 100644 --- a/src/Cafe/HW/Latte/Core/LatteTextureLegacy.cpp +++ b/src/Cafe/HW/Latte/Core/LatteTextureLegacy.cpp @@ -275,7 +275,7 @@ void LatteTexture_updateTexturesForStage(LatteDecompilerShader* shaderContext, u // check for changes if (LatteTC_HasTextureChanged(textureView->baseTexture) || swizzleChanged) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT debug_printf("Reload texture 0x%08x res %dx%d memRange %08x-%08x SwizzleChange: %s\n", textureView->baseTexture->physAddress, textureView->baseTexture->width, textureView->baseTexture->height, textureView->baseTexture->texDataPtrLow, textureView->baseTexture->texDataPtrHigh, swizzleChanged ? "yes" : "no"); #endif // update swizzle / changed mip address diff --git a/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp b/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp index 5bd71e81..45e7ec46 100644 --- a/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp +++ b/src/Cafe/HW/Latte/Core/LatteTextureLoader.cpp @@ -736,7 +736,7 @@ void LatteTextureLoader_writeReadbackTextureToMemory(LatteTextureDefinition* tex LatteTextureLoaderCtx textureLoader = { 0 }; LatteTextureLoader_begin(&textureLoader, sliceIndex, mipIndex, textureData->physAddress, textureData->physMipAddress, textureData->format, textureData->dim, textureData->width, textureData->height, textureData->depth, textureData->mipLevels, textureData->pitch, textureData->tileMode, textureData->swizzle); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (textureData->depth != 1) forceLog_printf("_writeReadbackTextureToMemory(): Texture has multiple slices (not supported)"); #endif diff --git a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp index 0131b34e..412f45ce 100644 --- a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp +++ b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp @@ -233,7 +233,7 @@ bool _isIntegerInstruction(const LatteDecompilerALUInstruction& aluInstruction) case ALU_OP2_INST_SETNE_DX10: return true; default: -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT debug_printf("_isIntegerInstruction(): OP3=%s opcode=%02x\n", aluInstruction.isOP3 ? "true" : "false", aluInstruction.opcode); cemu_assert_debug(false); #endif @@ -259,7 +259,7 @@ bool _isIntegerInstruction(const LatteDecompilerALUInstruction& aluInstruction) case ALU_OP3_INST_CMOVGE_INT: return true; default: -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT debug_printf("_isIntegerInstruction(): OP3=%s opcode=%02x\n", aluInstruction.isOP3?"true":"false", aluInstruction.opcode); #endif break; diff --git a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerEmitGLSL.cpp b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerEmitGLSL.cpp index 9a5107d0..97703b11 100644 --- a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerEmitGLSL.cpp +++ b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerEmitGLSL.cpp @@ -2643,7 +2643,7 @@ void _emitTEXSampleTextureCode(LatteDecompilerShaderContext* shaderContext, Latt src->add(");"); // debug -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if(texInstruction->opcode == GPU7_TEX_INST_LD ) src->add(" // TEX_INST_LD"); else if(texInstruction->opcode == GPU7_TEX_INST_SAMPLE ) @@ -3460,7 +3460,7 @@ void _emitStreamWriteCode(LatteDecompilerShaderContext* shaderContext, LatteDeco StringBuf* src = shaderContext->shaderSource; if (shaderContext->analyzer.hasStreamoutEnable == false) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT src->add("// omitted streamout write" _CRLF); #endif return; @@ -3842,7 +3842,7 @@ void LatteDecompiler_emitGLSLHelperFunctions(LatteDecompilerShaderContext* shade void _addPixelShaderExtraDebugInfo(LatteDecompilerShaderContext* shaderContext, StringBuf* fCStr_shaderSource) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT fCStr_shaderSource->add("// Color buffers:" _CRLF); for(uint32 i=0; i<8; i++) { @@ -3958,7 +3958,7 @@ void LatteDecompiler_emitGLSLShader(LatteDecompilerShaderContext* shaderContext, // debug info src->addFmt("// shader %08x%08x" _CRLF, (uint32)(shaderContext->shaderBaseHash >> 32), (uint32)(shaderContext->shaderBaseHash & 0xFFFFFFFF)); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT src->addFmt("// usesIntegerValues: {}" _CRLF, shaderContext->analyzer.usesIntegerValues?"true":"false"); src->addFmt(_CRLF); diff --git a/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp b/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp index dac3c3a4..b0d0dbe9 100644 --- a/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp +++ b/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureGL.cpp @@ -35,7 +35,7 @@ LatteTextureGL::LatteTextureGL(uint32 textureUnit, Latte::E_DIM dim, MPTR physAd LatteTextureGL::InitTextureState(); // set debug name bool useGLDebugNames = false; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT useGLDebugNames = true; #endif if (LaunchSettings::NSightModeEnabled()) diff --git a/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp b/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp index fc5b5dc4..063cc17f 100644 --- a/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp +++ b/src/Cafe/HW/Latte/Renderer/OpenGL/LatteTextureViewGL.cpp @@ -97,7 +97,7 @@ void LatteTextureViewGL::InitAliasView() // set debug name bool useGLDebugNames = false; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT useGLDebugNames = true; #endif if (LaunchSettings::NSightModeEnabled()) diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VKRBase.h b/src/Cafe/HW/Latte/Renderer/Vulkan/VKRBase.h index a8a1376f..1c91207e 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VKRBase.h +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VKRBase.h @@ -21,7 +21,7 @@ public: cemu_assert_debug(refCount == 0); // remove references -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT for (auto itr : refs) { auto& rev = itr->ref->reverseRefs; @@ -58,7 +58,7 @@ public: this->refs.emplace_back(refTarget->selfRef); refTarget->refCount++; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT // add reverse ref refTarget->reverseRefs.emplace_back(this->selfRef); #endif @@ -80,7 +80,7 @@ protected: private: VKRMoveableRefCounterRef* selfRef; std::vector refs; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT std::vector reverseRefs; #endif diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp index 7c81a3c9..338d09af 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp @@ -54,7 +54,7 @@ const std::vector kRequiredDeviceExtensions = VKAPI_ATTR VkBool32 VKAPI_CALL DebugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (strstr(pCallbackData->pMessage, "consumes input location")) return VK_FALSE; // false means we dont care @@ -636,7 +636,7 @@ VulkanRenderer::~VulkanRenderer() VulkanRenderer* VulkanRenderer::GetInstance() { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(g_renderer && dynamic_cast(g_renderer.get())); // Use #if here because dynamic_casts dont get optimized away even if the result is not stored as with cemu_assert_debug #endif diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp index 2417f797..15ba3fbc 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRendererCore.cpp @@ -334,7 +334,7 @@ PipelineInfo* VulkanRenderer::draw_getOrCreateGraphicsPipeline(uint32 indexCount if (cache_object != nullptr) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(cache_object->vertexShader == LatteSHRC_GetActiveVertexShader()); cemu_assert_debug(cache_object->geometryShader == LatteSHRC_GetActiveGeometryShader()); cemu_assert_debug(cache_object->pixelShader == LatteSHRC_GetActivePixelShader()); @@ -1456,7 +1456,7 @@ void VulkanRenderer::draw_execute(uint32 baseVertex, uint32 baseInstance, uint32 else { pipeline_info = m_state.activePipelineInfo; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT auto pipeline_info2 = draw_getOrCreateGraphicsPipeline(count); if (pipeline_info != pipeline_info2) { diff --git a/src/Cafe/IOSU/fsa/iosu_fsa.cpp b/src/Cafe/IOSU/fsa/iosu_fsa.cpp index aa2ad553..7fd235ce 100644 --- a/src/Cafe/IOSU/fsa/iosu_fsa.cpp +++ b/src/Cafe/IOSU/fsa/iosu_fsa.cpp @@ -606,7 +606,7 @@ namespace iosu FSCVirtualFile* fscFile = sFileHandleTable.GetByHandle(fileHandle); if (!fscFile) return (FSStatus)FS_RESULT::ERR_PLACEHOLDER; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemuLog_force("FSAProcessCmd_appendFile(): size 0x{:08x} count 0x{:08x} (todo)\n", _swapEndianU32(cmd->cmdAppendFile.size), _swapEndianU32(cmd->cmdAppendFile.count)); #endif return _swapEndianU32(cmd->cmdAppendFile.size) * _swapEndianU32(cmd->cmdAppendFile.count); diff --git a/src/Cafe/IOSU/kernel/iosu_kernel.cpp b/src/Cafe/IOSU/kernel/iosu_kernel.cpp index fb9a0191..1a642028 100644 --- a/src/Cafe/IOSU/kernel/iosu_kernel.cpp +++ b/src/Cafe/IOSU/kernel/iosu_kernel.cpp @@ -10,7 +10,7 @@ namespace iosu static void _assume_lock() { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(!sInternalMutex.try_lock()); #endif } diff --git a/src/Cafe/IOSU/legacy/iosu_boss.cpp b/src/Cafe/IOSU/legacy/iosu_boss.cpp index 22c11eba..7280ac53 100644 --- a/src/Cafe/IOSU/legacy/iosu_boss.cpp +++ b/src/Cafe/IOSU/legacy/iosu_boss.cpp @@ -485,7 +485,7 @@ namespace iosu CURL* curl = it->curl.get(); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 2); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); char errbuf[CURL_ERROR_SIZE]{}; curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); @@ -579,7 +579,7 @@ namespace iosu if (curl_result != CURLE_OK) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLogDebug_printf("curl error buff: %s", errbuf); #endif it->turn_state = kError; diff --git a/src/Cafe/OS/RPL/rpl.cpp b/src/Cafe/OS/RPL/rpl.cpp index 1c779308..66d7a4ca 100644 --- a/src/Cafe/OS/RPL/rpl.cpp +++ b/src/Cafe/OS/RPL/rpl.cpp @@ -1015,7 +1015,7 @@ bool RPLLoader_FixImportSymbols(RPLModule* rplLoaderContext, sint32 symtabSectio } if (foundExport == false) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (nameOffset > 0) { forceLogDebug_printf("export not found - force lookup in function exports"); diff --git a/src/Cafe/OS/libs/coreinit/coreinit.cpp b/src/Cafe/OS/libs/coreinit/coreinit.cpp index 1869f55c..af6e78ea 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit.cpp @@ -119,7 +119,7 @@ void coreinitExport_OSPanic(PPCInterpreter_t* hCPU) debug_printf("File: %s:%d\n", memory_getPointerFromVirtualOffset(hCPU->gpr[3]), hCPU->gpr[4]); debug_printf("Msg: %s\n", memory_getPointerFromVirtualOffset(hCPU->gpr[5])); DebugLogStackTrace(coreinit::OSGetCurrentThread(), coreinit::OSGetStackPointer()); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); while (true) std::this_thread::sleep_for(std::chrono::milliseconds(100)); #endif @@ -203,7 +203,7 @@ typedef struct void coreinitExport_OSDriver_Register(PPCInterpreter_t* hCPU) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("OSDriver_Register(0x%08x,0x%08x,0x%08x,0x%08x,0x%08x,0x%08x)", hCPU->gpr[3], hCPU->gpr[4], hCPU->gpr[5], hCPU->gpr[6], hCPU->gpr[7], hCPU->gpr[8]); #endif OSDriverCallbacks_t* driverCallbacks = (OSDriverCallbacks_t*)memory_getPointerFromVirtualOffset(hCPU->gpr[5]); diff --git a/src/Cafe/OS/libs/coreinit/coreinit_Alarm.cpp b/src/Cafe/OS/libs/coreinit/coreinit_Alarm.cpp index a498e40a..25c142cc 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_Alarm.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_Alarm.cpp @@ -70,7 +70,7 @@ namespace coreinit return; // debug begin -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT uint64 prevTick = 0; auto itr = g_activeAlarmList.begin(); while (itr != g_activeAlarmList.end()) diff --git a/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp b/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp index 1598429f..c49607e1 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_FS.cpp @@ -349,7 +349,7 @@ namespace coreinit } if (entryFound == false) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif } diff --git a/src/Cafe/OS/libs/coreinit/coreinit_LockedCache.cpp b/src/Cafe/OS/libs/coreinit/coreinit_LockedCache.cpp index 9ab614c3..6f202a8e 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_LockedCache.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_LockedCache.cpp @@ -99,7 +99,7 @@ namespace coreinit if (deallocAddr < lcAddr[coreIndex] || deallocAddr >= (lcAddr[coreIndex] + LC_LOCKED_CACHE_SIZE)) { // out of bounds -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT forceLog_printf("LCDealloc(): Out of bounds"); #endif osLib_returnFromFunction(hCPU, 0); @@ -198,7 +198,7 @@ namespace coreinit assert_dbg(); #endif LCIsEnabled[PPCInterpreter_getCoreIndex(hCPU)]--; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (LCIsEnabled[PPCInterpreter_getCoreIndex(hCPU)] == 0) { uint32 coreIndex = PPCInterpreter_getCoreIndex(hCPU); diff --git a/src/Cafe/OS/libs/coreinit/coreinit_MEM_BlockHeap.cpp b/src/Cafe/OS/libs/coreinit/coreinit_MEM_BlockHeap.cpp index 33767ddf..f3d4250b 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_MEM_BlockHeap.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_MEM_BlockHeap.cpp @@ -462,7 +462,7 @@ namespace coreinit if (block != NULL) { MPTR blockMPTR = memory_getVirtualOffsetFromPointer(block); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (block->isFree != 0) assert_dbg(); _blockHeapDebugVerifyLinkOrder(blockHeapHead); diff --git a/src/Cafe/OS/libs/coreinit/coreinit_MEM_ExpHeap.cpp b/src/Cafe/OS/libs/coreinit/coreinit_MEM_ExpHeap.cpp index c587b879..a1d03c32 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_MEM_ExpHeap.cpp +++ b/src/Cafe/OS/libs/coreinit/coreinit_MEM_ExpHeap.cpp @@ -938,7 +938,7 @@ void export_MEMSetGroupIDForExpHeap(PPCInterpreter_t* hCPU) ppcDefineParamMEMPTR(heap, MEMHeapBase, 0); ppcDefineParamU16(groupId, 1); coreinitMemLog_printf("MEMSetGroupIDForExpHeap(0x%08x, %d)", heap.GetMPTR(), groupId); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); // someone test this and the entire groupId feature #endif uint16 oldGroupId = MEMSetGroupIDForExpHeap(heap.GetPtr(), groupId); diff --git a/src/Cafe/OS/libs/coreinit/coreinit_Thread.h b/src/Cafe/OS/libs/coreinit/coreinit_Thread.h index a0561f41..3c41d9dc 100644 --- a/src/Cafe/OS/libs/coreinit/coreinit_Thread.h +++ b/src/Cafe/OS/libs/coreinit/coreinit_Thread.h @@ -149,7 +149,7 @@ namespace coreinit void _debugCheckChain(OSThread_t* thread, OSThreadLink* threadLink) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT cemu_assert_debug(tail.IsNull() == head.IsNull()); size_t linkOffset = getLinkOffset(thread, threadLink); // expects thread to be in the chain diff --git a/src/Cafe/OS/libs/gx2/GX2_RenderTarget.cpp b/src/Cafe/OS/libs/gx2/GX2_RenderTarget.cpp index 1b3cc185..a31bf5bc 100644 --- a/src/Cafe/OS/libs/gx2/GX2_RenderTarget.cpp +++ b/src/Cafe/OS/libs/gx2/GX2_RenderTarget.cpp @@ -20,7 +20,7 @@ void gx2Export_GX2InitColorBufferRegs(PPCInterpreter_t* hCPU) LatteAddrLib::GX2CalculateSurfaceInfo(colorBuffer->surface.format, colorBuffer->surface.width, colorBuffer->surface.height, colorBuffer->surface.depth, colorBuffer->surface.dim, colorBuffer->surface.tileMode, colorBuffer->surface.aa, _swapEndianU32(colorBuffer->viewMip), &surfaceInfo); uint32 pitchHeight = (surfaceInfo.height * surfaceInfo.pitch) >> 6; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (colorBuffer->viewNumSlices != _swapEndianU32(1)) forceLogDebug_printf("GX2InitColorBufferRegs(): With unsupported slice count %d", _swapEndianU32(colorBuffer->viewNumSlices)); if (surfaceInfo.pitch < 7) @@ -139,7 +139,7 @@ void gx2Export_GX2SetColorBuffer(PPCInterpreter_t* hCPU) GX2ColorBuffer* colorBufferBE = (GX2ColorBuffer*)memory_getPointerFromVirtualOffset(hCPU->gpr[3]); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT gx2Log_printf("ColorBuffer tileMode %01x PhysAddr %08x fmt %04x res %dx%d Mip %d Slice %d", (uint32)colorBufferBE->surface.tileMode.value(), (uint32)colorBufferBE->surface.imagePtr, (uint32)colorBufferBE->surface.format.value(), (uint32)colorBufferBE->surface.width, (uint32)colorBufferBE->surface.height, _swapEndianU32(colorBufferBE->viewMip), _swapEndianU32(colorBufferBE->viewFirstSlice)); #endif diff --git a/src/Cafe/OS/libs/gx2/GX2_Surface_Copy.cpp b/src/Cafe/OS/libs/gx2/GX2_Surface_Copy.cpp index 9bbc1b80..853405a3 100644 --- a/src/Cafe/OS/libs/gx2/GX2_Surface_Copy.cpp +++ b/src/Cafe/OS/libs/gx2/GX2_Surface_Copy.cpp @@ -397,7 +397,7 @@ void gx2Export_GX2CopySurfaceEx(PPCInterpreter_t* hCPU) forceLogDebug_printf("rect left-top: %d/%d size: %d/%d", _swapEndianU32(rectSrc->left), _swapEndianU32(rectSrc->top), _swapEndianU32(rectSrc->right) - _swapEndianU32(rectSrc->left), _swapEndianU32(rectSrc->bottom) - _swapEndianU32(rectSrc->top)); } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if( rectCount != 1 ) assert_dbg(); if( srcMip != 0 ) @@ -440,7 +440,7 @@ void gx2Export_GX2ResolveAAColorBuffer(PPCInterpreter_t* hCPU) uint32 srcSlice = _swapEndianU32(srcColorBuffer->viewFirstSlice); uint32 dstSlice = hCPU->gpr[6]; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if( _swapEndianU32(srcColorBuffer->viewMip) != 0 || _swapEndianU32(srcColorBuffer->viewFirstSlice) != 0 ) assert_dbg(); #endif diff --git a/src/Cafe/OS/libs/nlibcurl/nlibcurl.cpp b/src/Cafe/OS/libs/nlibcurl/nlibcurl.cpp index 9078ecc2..5ec75e6b 100644 --- a/src/Cafe/OS/libs/nlibcurl/nlibcurl.cpp +++ b/src/Cafe/OS/libs/nlibcurl/nlibcurl.cpp @@ -839,7 +839,7 @@ size_t header_callback(char* buffer, size_t size, size_t nitems, void* userdata) if (msg.order != QueueOrder_CBDone) cemu_assert_suspicious(); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT char debug[500]; cemu_assert_debug((size*nitems) < 500); memcpy(debug, buffer, size*nitems); diff --git a/src/Cafe/OS/libs/nn_fp/nn_fp.cpp b/src/Cafe/OS/libs/nn_fp/nn_fp.cpp index 2df51a94..db2b7401 100644 --- a/src/Cafe/OS/libs/nn_fp/nn_fp.cpp +++ b/src/Cafe/OS/libs/nn_fp/nn_fp.cpp @@ -592,7 +592,7 @@ namespace nn ppcDefineParamMPTR(funcMPTR, 1); ppcDefineParamMPTR(customParam, 2); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif fpdPrepareRequest(); diff --git a/src/Cafe/OS/libs/nsyshid/nsyshid.cpp b/src/Cafe/OS/libs/nsyshid/nsyshid.cpp index d43b486e..8c390c0a 100644 --- a/src/Cafe/OS/libs/nsyshid/nsyshid.cpp +++ b/src/Cafe/OS/libs/nsyshid/nsyshid.cpp @@ -537,7 +537,7 @@ namespace nsyshid _debugPrintHex("HIDSetReport", data, dataLength); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (reportRelatedUkn != 2 || reportId != 0) assert_dbg(); #endif diff --git a/src/Cafe/OS/libs/nsysnet/nsysnet.cpp b/src/Cafe/OS/libs/nsysnet/nsysnet.cpp index b49d2e80..ade207f9 100644 --- a/src/Cafe/OS/libs/nsysnet/nsysnet.cpp +++ b/src/Cafe/OS/libs/nsysnet/nsysnet.cpp @@ -116,7 +116,7 @@ sint32 _translateError(sint32 returnCode, sint32 wsaError, sint32 mode = _ERROR_ break; case WSAECONNABORTED: debug_printf("WSAECONNABORTED\n"); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif break; @@ -652,7 +652,7 @@ void nsysnetExport_inet_pton(PPCInterpreter_t* hCPU) invalidIp = true; if (d3 < 0 || d3 > 255) invalidIp = true; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (invalidIp) assert_dbg(); #endif @@ -1245,7 +1245,7 @@ void nsysnetExport_gethostbyaddr(PPCInterpreter_t* hCPU) return; } -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (he->h_addrtype != AF_INET) assert_dbg(); if (he->h_length != sizeof(in_addr)) diff --git a/src/Cafe/OS/libs/snd_core/ax_mix.cpp b/src/Cafe/OS/libs/snd_core/ax_mix.cpp index 8e959b28..fecace8e 100644 --- a/src/Cafe/OS/libs/snd_core/ax_mix.cpp +++ b/src/Cafe/OS/libs/snd_core/ax_mix.cpp @@ -692,7 +692,7 @@ namespace snd_core { if (internalShadowCopy->biquad.on == AX_BIQUAD_OFF) return; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (internalShadowCopy->biquad.on != 0x0200) { forceLogDebug_printf("AX_ApplyBiquad() with incorrect biquad.on value 0x%04x", _swapEndianU16(internalShadowCopy->biquad.on)); diff --git a/src/Cafe/OS/libs/snd_core/ax_voice.cpp b/src/Cafe/OS/libs/snd_core/ax_voice.cpp index f60e5853..746f04d3 100644 --- a/src/Cafe/OS/libs/snd_core/ax_voice.cpp +++ b/src/Cafe/OS/libs/snd_core/ax_voice.cpp @@ -702,7 +702,7 @@ namespace snd_core { AXVPBInternal_t* internal = __AXVPBInternalVoiceArray + (sint32)vpb->index; ratio *= 65536.0f; -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (ratio >= 4294967296.0f) assert_dbg(); #endif diff --git a/src/Cafe/OS/libs/sysapp/sysapp.cpp b/src/Cafe/OS/libs/sysapp/sysapp.cpp index 0085ee19..b27a7cf3 100644 --- a/src/Cafe/OS/libs/sysapp/sysapp.cpp +++ b/src/Cafe/OS/libs/sysapp/sysapp.cpp @@ -309,13 +309,13 @@ void cbDeserializeArg_MiiMaker(deserializedArg_t* deserializedArg, void* customP } else if (strcmp(deserializedArg->argument, "slot_id") == 0) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif } else { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif } diff --git a/src/Cemu/Logging/CemuDebugLogging.h b/src/Cemu/Logging/CemuDebugLogging.h index ac05c024..e386242e 100644 --- a/src/Cemu/Logging/CemuDebugLogging.h +++ b/src/Cemu/Logging/CemuDebugLogging.h @@ -2,7 +2,7 @@ // printf-style macros that are only active in non-release builds -#ifdef PUBLIC_RELEASE +#ifndef CEMU_DEBUG_ASSERTS #define debug_printf(...) static void debugBreakpoint() { } #else diff --git a/src/Cemu/Logging/CemuLogging.cpp b/src/Cemu/Logging/CemuLogging.cpp index f58e7984..7e6669a8 100644 --- a/src/Cemu/Logging/CemuLogging.cpp +++ b/src/Cemu/Logging/CemuLogging.cpp @@ -121,12 +121,8 @@ void cemuLog_writeLineToLog(std::string_view text, bool date, bool new_line) const auto temp_time = std::chrono::system_clock::to_time_t(now); const auto& time = *std::localtime(&temp_time); -#ifdef PUBLIC_RELEASE - auto time_str = fmt::format("[{:02d}:{:02d}:{:02d}] ", time.tm_hour, time.tm_min, time.tm_sec); -#else auto time_str = fmt::format("[{:02d}:{:02d}:{:02d}.{:03d}] ", time.tm_hour, time.tm_min, time.tm_sec, std::chrono::duration_cast(now - std::chrono::time_point_cast(now)).count()); -#endif LogContext.text_cache.emplace_back(std::move(time_str)); } diff --git a/src/Cemu/Logging/CemuLogging.h b/src/Cemu/Logging/CemuLogging.h index d89d9cec..20dba9bd 100644 --- a/src/Cemu/Logging/CemuLogging.h +++ b/src/Cemu/Logging/CemuLogging.h @@ -91,7 +91,7 @@ bool cemuLog_log(LogType type, const T* format, TArgs&&... args) template bool cemuLog_logDebug(LogType type, TFmt format, TArgs&&... args) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT return cemuLog_log(type, format, std::forward(args)...); #else return false; @@ -164,7 +164,7 @@ void cemuLog_force(TFmt format, TArgs&&... args) #define saveLog_printf(...) if( cafeLog_isLoggingFlagEnabled(LOG_TYPE_SAVE) ) cafeLog_log(LOG_TYPE_SAVE, __VA_ARGS__); #define nfpLog_printf(...) if( cafeLog_isLoggingFlagEnabled(LOG_TYPE_NFP) ) cafeLog_log(LOG_TYPE_NFP, __VA_ARGS__); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT #define forceLogDebug_printf(...) cafeLog_log(LOG_TYPE_FORCE, __VA_ARGS__); #define forceLogDebug_printfW(...) cafeLog_logW(LOG_TYPE_FORCE, __VA_ARGS__); diff --git a/src/Cemu/PPCAssembler/ppcAssembler.cpp b/src/Cemu/PPCAssembler/ppcAssembler.cpp index c8c28191..e84c9970 100644 --- a/src/Cemu/PPCAssembler/ppcAssembler.cpp +++ b/src/Cemu/PPCAssembler/ppcAssembler.cpp @@ -3497,7 +3497,7 @@ void ppcAsmTestDisassembler() void ppcAsmTest() { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT ppcAsmTestDisassembler(); #endif } diff --git a/src/Cemu/nex/nex.cpp b/src/Cemu/nex/nex.cpp index 010f806c..34c62ca0 100644 --- a/src/Cemu/nex/nex.cpp +++ b/src/Cemu/nex/nex.cpp @@ -29,7 +29,7 @@ sint32 nexService_parseResponse(uint8* data, sint32 length, nexServiceResponse_t protocolId &= 0x7F; if (isRequest) { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); // should never reach since we handle requests before this function is called #endif } diff --git a/src/Cemu/nex/prudp.cpp b/src/Cemu/nex/prudp.cpp index 7700e5eb..12e4570e 100644 --- a/src/Cemu/nex/prudp.cpp +++ b/src/Cemu/nex/prudp.cpp @@ -452,7 +452,7 @@ prudpIncomingPacket::prudpIncomingPacket(prudpStreamSettings_t* streamSettings, } else { -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT assert_dbg(); #endif } @@ -607,7 +607,7 @@ void prudpClient::sortIncomingDataPacket(prudpIncomingPacket* incomingPacket) uint16 seqDif = sequenceIdIncomingPacket - queue_incomingPackets[insertIndex]->sequenceId; if (seqDif&0x8000) break; // negative seqDif -> insert before current element -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT if (seqDif == 0) assert_dbg(); // same sequence id, sort by fragment index? #endif diff --git a/src/Common/precompiled.h b/src/Common/precompiled.h index 57f69c57..2a92ea3e 100644 --- a/src/Common/precompiled.h +++ b/src/Common/precompiled.h @@ -361,7 +361,7 @@ inline void cemu_assert(bool _condition) } } -#ifdef PUBLIC_RELEASE +#ifndef CEMU_DEBUG_ASSERT //#define cemu_assert_debug(__cond) -> Forcing __cond not to be evaluated currently has unexpected side-effects inline void cemu_assert_debug(bool _condition) diff --git a/src/Common/version.h b/src/Common/version.h index 0eff0197..74464393 100644 --- a/src/Common/version.h +++ b/src/Common/version.h @@ -7,10 +7,8 @@ // the minor version is used for experimental builds to indicate the build index. Set by command line option from CI build script // if zero, the version text will be constructed as LEAD.MAJOR, otherwise as LEAD.MAJOR-MINOR -#if !defined(PUBLIC_RELEASE) -#define EMULATOR_VERSION_SUFFIX " (dev)" -#elif defined(EMULATOR_VERSION_MINOR) && EMULATOR_VERSION_MINOR == 0 -#define EMULATOR_VERSION_SUFFIX "" // stable +#if defined(EMULATOR_VERSION_MINOR) && EMULATOR_VERSION_MINOR == 0 +#define EMULATOR_VERSION_SUFFIX "" #else #define EMULATOR_VERSION_SUFFIX " (experimental)" #endif diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7c1ce0e4..d8caabf4 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1375,11 +1375,7 @@ void MainWindow::OnKeyUp(wxKeyEvent& event) SetFullScreen(false); else if (code == WXK_RETURN && event.AltDown()) SetFullScreen(!IsFullScreen()); -#ifdef PUBLIC_RELEASE else if (code == WXK_F12) -#else - else if (code == WXK_F11) -#endif g_window_info.has_screenshot_request = true; // async screenshot request } @@ -2058,7 +2054,7 @@ void MainWindow::RecreateMenu() else { // add 'Stop emulation' menu entry to file menu -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT m_fileMenu->Append(MAINFRAME_MENU_ID_FILE_END_EMULATION, _("End emulation")); #endif } @@ -2179,7 +2175,7 @@ void MainWindow::RecreateMenu() 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)); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_ADVANCED_PPC_INFO, _("&Log PPC context for API"), wxEmptyString)->Check(cemuLog_advancedPPCLoggingEnabled()); #endif m_loggingSubmenu = debugLoggingMenu; @@ -2205,12 +2201,12 @@ void MainWindow::RecreateMenu() debugMenu->AppendSeparator(); -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT auto audioAuxOnly = debugMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_AUDIO_AUX_ONLY, _("&Audio AUX only"), wxEmptyString); audioAuxOnly->Check(ActiveSettings::AudioOutputOnlyAux()); #endif -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT debugMenu->Append(MAINFRAME_MENU_ID_DEBUG_VIEW_LOGGING_WINDOW, _("&Open logging window")); #endif debugMenu->Append(MAINFRAME_MENU_ID_DEBUG_VIEW_PPC_THREADS, _("&View PPC threads")); diff --git a/src/main.cpp b/src/main.cpp index 67b640b4..f782c33e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -246,7 +246,7 @@ int mainEmulatorHLE() wxMessageBox("Cemu doesn't have write access to it's own directory.\nPlease move it to a different location or run Cemu as administrator!", "Warning", wxOK|wxICON_ERROR); // todo - different error messages per OS LatteOverlay_init(); // run a couple of tests if in non-release mode -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT unitTests(); #endif // init common @@ -338,39 +338,30 @@ void ToolShaderCacheMerger(); #if BOOST_OS_WINDOWS -#ifndef PUBLIC_RELEASE -#include -int wmain(int argc, wchar_t* argv[]) -{ - SDL_SetMainReady(); - _CrtSetDbgFlag(_CRTDBG_CHECK_DEFAULT_DF); - //ToolShaderCacheMerger(); - - if (!LaunchSettings::HandleCommandline(argc, argv)) - return 0; - - ActiveSettings::LoadOnce(); - - HandlePostUpdate(); - return mainEmulatorHLE(); -} -#else +// entrypoint for release builds int wWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nShowCmd) { SDL_SetMainReady(); - if (!LaunchSettings::HandleCommandline(lpCmdLine)) return 0; - ActiveSettings::LoadOnce(); - HandlePostUpdate(); return mainEmulatorHLE(); } -#endif +// entrypoint for debug builds with console +int main(int argc, char* argv[]) +{ + SDL_SetMainReady(); + if (!LaunchSettings::HandleCommandline(argc, argv)) + return 0; + ActiveSettings::LoadOnce(); + HandlePostUpdate(); + return mainEmulatorHLE(); +} #else + int main(int argc, char *argv[]) { #if BOOST_OS_LINUX diff --git a/src/util/Zir/EmitterGLSL/ZpIREmitGLSL.cpp b/src/util/Zir/EmitterGLSL/ZpIREmitGLSL.cpp index cb42111b..d20adc60 100644 --- a/src/util/Zir/EmitterGLSL/ZpIREmitGLSL.cpp +++ b/src/util/Zir/EmitterGLSL/ZpIREmitGLSL.cpp @@ -95,7 +95,7 @@ namespace ZirEmitter void GLSL::GenerateBasicBlockCode(ZpIR::ZpIRBasicBlock& basicBlock) { // init context -#ifndef PUBLIC_RELEASE +#ifdef CEMU_DEBUG_ASSERT for (auto& itr : m_blockContext.regInlinedExpression) { cemu_assert_debug(itr == nullptr); // leaked buffer diff --git a/src/util/helpers/helpers.cpp b/src/util/helpers/helpers.cpp index a52aa439..99712296 100644 --- a/src/util/helpers/helpers.cpp +++ b/src/util/helpers/helpers.cpp @@ -139,8 +139,6 @@ typedef struct tagTHREADNAME_INFO void SetThreadName(const char* name) { #if BOOST_OS_WINDOWS - -#ifndef _PUBLIC_RELEASE THREADNAME_INFO info; info.dwType = 0x1000; info.szName = name; @@ -154,9 +152,6 @@ void SetThreadName(const char* name) __except (EXCEPTION_EXECUTE_HANDLER) { } #pragma warning(pop) - -#endif - #elif BOOST_OS_MACOS pthread_setname_np(name); #else