This commit is contained in:
lijunyu-cn 2022-09-08 23:29:24 +08:00
commit f712efafac
17 changed files with 41 additions and 51 deletions

View file

@ -108,14 +108,8 @@ uint64 PPCTimer_tscToMicroseconds(uint64 us)
uint128_t r{};
r.low = _umul128(us, 1000000ULL, &r.high);
uint64 remainder;
#if defined(_MSC_VER) && _MSC_VER >= 1923
const uint64 microseconds = _udiv128(r.high, r.low, _rdtscFrequency, &remainder);
#else
const uint64 microseconds = udiv128(r.low, r.high, _rdtscFrequency, &remainder);
#endif
return microseconds;
}
@ -159,12 +153,7 @@ uint64 PPCTimer_getFromRDTSC()
#endif
uint64 remainder;
#if defined(_MSC_VER) && _MSC_VER >= 1923
uint64 elapsedTick = _udiv128(_rdtscAcc.high, _rdtscAcc.low, _rdtscFrequency, &remainder);
#else
uint64 elapsedTick = udiv128(_rdtscAcc.low, _rdtscAcc.high, _rdtscFrequency, &remainder);
#endif
_rdtscAcc.low = remainder;
_rdtscAcc.high = 0;

View file

@ -242,7 +242,7 @@ LatteParsedGSCopyShader* LatteGSCopyShaderParser_parse(uint8* programData, uint3
// verify if all registers are exported
for(sint32 i=0; i<shaderContext->numParam; i++)
{
if( shaderContext->paramMapping[i].exportParam == 0xFFFF )
if( shaderContext->paramMapping[i].exportParam == 0xFF )
debugBreakpoint();
}
return shaderContext;

View file

@ -76,23 +76,23 @@ typedef struct
struct
{
// CPU
volatile uint64 lastCycleCount;
volatile uint64 skippedCycles;
volatile uint32 recompilerLeaveCount; // increased everytime the recompiler switches back to interpreter
volatile uint32 threadLeaveCount; // increased everytime a thread gives up it's timeslice
uint64 lastCycleCount;
uint64 skippedCycles;
uint32 recompilerLeaveCount; // increased everytime the recompiler switches back to interpreter
uint32 threadLeaveCount; // increased everytime a thread gives up it's timeslice
// GPU
volatile uint32 lastUpdate;
volatile uint32 frameCounter;
volatile uint32 drawCallCounter;
volatile uint32 shaderBindCount;
volatile uint64 vertexDataUploaded; // amount of vertex data uploaded to GPU (bytes)
volatile uint64 vertexDataCached; // amount of vertex data reused from GPU cache (bytes)
volatile uint64 uniformBankUploadedData; // amount of uniform buffer data (excluding remapped uniforms) uploaded to GPU
volatile uint64 uniformBankUploadedCount; // number of separate uploads for uniformBankDataUploaded
volatile uint64 indexDataUploaded;
volatile uint64 indexDataCached;
uint32 lastUpdate;
uint32 frameCounter;
uint32 drawCallCounter;
uint32 shaderBindCount;
uint64 vertexDataUploaded; // amount of vertex data uploaded to GPU (bytes)
uint64 vertexDataCached; // amount of vertex data reused from GPU cache (bytes)
uint64 uniformBankUploadedData; // amount of uniform buffer data (excluding remapped uniforms) uploaded to GPU
uint64 uniformBankUploadedCount; // number of separate uploads for uniformBankDataUploaded
uint64 indexDataUploaded;
uint64 indexDataCached;
}cycle[PERFORMANCE_MONITOR_TRACK_CYCLES];
volatile sint32 cycleIndex;
sint32 cycleIndex;
// new stats
LattePerfStatTimer gpuTime_frameTime;
LattePerfStatTimer gpuTime_shaderCreate;

View file

@ -10,6 +10,8 @@
#include "Cafe/Filesystem/fsc.h"
#include "Cafe/HW/Espresso/PPCState.h"
#include <inttypes.h>
static_assert(sizeof(acpMetaXml_t) == 0x3440);
static_assert(offsetof(acpMetaXml_t, title_id) == 0x0000);
static_assert(offsetof(acpMetaXml_t, boss_id) == 0x0008);
@ -85,7 +87,7 @@ namespace iosu
return;
const char* text = subElement->GetText();
uint64 value;
if (sscanf(text, "%llx", &value) == 0)
if (sscanf(text, "%" SCNx64, &value) == 0)
return;
*v = _swapEndianU64(value);
}

View file

@ -1,5 +1,3 @@
#pragma once
#include "Cafe/OS/libs/coreinit/coreinit_Thread.h"
#include "util/helpers/fspinlock.h"

View file

@ -470,7 +470,7 @@ namespace coreinit
// mark current block as free
block->isFree = _swapEndianU32(1);
// attempt to merge with previous block
if (_swapEndianU32(block->previousBlock) != NULL)
if (_swapEndianU32(block->previousBlock) != MPTR_NULL)
{
MPTR previousBlockMPTR = _swapEndianU32(block->previousBlock);
MEMBlockHeapTrackDEPR* previousBlock = (MEMBlockHeapTrackDEPR*)memory_getPointerFromVirtualOffset(previousBlockMPTR);
@ -494,7 +494,7 @@ namespace coreinit
}
}
// attempt to merge with next block
if (_swapEndianU32(block->nextBlock) != NULL)
if (_swapEndianU32(block->nextBlock) != MPTR_NULL)
{
MPTR nextBlockMPTR = _swapEndianU32(block->nextBlock);
MEMBlockHeapTrackDEPR* nextBlock = (MEMBlockHeapTrackDEPR*)memory_getPointerFromVirtualOffset(nextBlockMPTR);

View file

@ -34,7 +34,7 @@ namespace coreinit
{
debug_printf("coreinitVirtualMemory_alloc(): Unable to allocate memory\n");
debugBreakpoint();
return NULL;
return MPTR_NULL;
}
// check for overlapping regions
OSVirtMemory* virtMemItr = virtualMemoryList;
@ -66,7 +66,7 @@ namespace coreinit
return currentAddress;
}
}
return NULL;
return MPTR_NULL;
}
void coreinitExport_OSGetAvailPhysAddrRange(PPCInterpreter_t* hCPU)

View file

@ -99,7 +99,7 @@ namespace snd_core
}
coreinit::OSInitMutexEx(__AXAppFrameCallbackMutex.GetPtr(), NULL);
for (sint32 i = 0; i < AX_DEV_COUNT; i++)
__AXDeviceFinalMixCallback[i] = NULL;
__AXDeviceFinalMixCallback[i] = MPTR_NULL;
}
sint32 AXRegisterAppFrameCallback(MPTR funcAddr)

View file

@ -3,11 +3,9 @@
// printf-style macros that are only active in non-release builds
#ifdef PUBLIC_RELEASE
#define debug_printf //
#define debug_puts //
#define debug_printf(...)
static void debugBreakpoint() { }
#else
#define debug_printf printf
#define debug_puts puts
#define debug_printf(...) printf(__VA_ARGS__)
static void debugBreakpoint() {}
#endif

View file

@ -26,7 +26,7 @@ void handler_SIGINT(int sig)
* by any mean ends up with a SIGABRT from the standard library destroying
* threads.
*/
exit(0);
_Exit(0);
}
void ExceptionHandler_init()

View file

@ -210,6 +210,15 @@ typedef union _LARGE_INTEGER {
inline T& operator^= (T& a, T b) { return reinterpret_cast<T&>( reinterpret_cast<std::underlying_type<T>::type&>(a) ^= static_cast<std::underlying_type<T>::type>(b) ); }
#endif
#if !defined(_MSC_VER) || defined(__clang__) // clang-cl does not have built-in _udiv128
inline uint64 _udiv128(uint64 highDividend, uint64 lowDividend, uint64 divisor, uint64 *remainder)
{
unsigned __int128 dividend = (((unsigned __int128)highDividend) << 64) | ((unsigned __int128)lowDividend);
*remainder = (uint64)((dividend % divisor) & 0xFFFFFFFFFFFFFFFF);
return (uint64)((dividend / divisor) & 0xFFFFFFFFFFFFFFFF);
}
#endif
#if defined(_MSC_VER)
#define UNREACHABLE __assume(false)
#elif defined(__GNUC__)

View file

@ -1,5 +1,4 @@
#pragma once
extern "C" uint64 ATTR_MS_ABI udiv128(uint64 low, uint64 hi, uint64 divisor, uint64 *remainder);
extern "C" void recompiler_fres();
extern "C" void recompiler_frsqrte();

View file

@ -1,12 +1,5 @@
.code
udiv128 PROC
mov rax, rcx
div r8
mov [r9], rdx
ret
udiv128 ENDP
recompiler_fres PROC
; store all modified registers
push rdx

View file

@ -142,7 +142,7 @@ int CemuApp::OnExit()
#if BOOST_OS_WINDOWS
ExitProcess(0);
#else
exit(0);
_Exit(0);
#endif
}

View file

@ -47,6 +47,8 @@
#if BOOST_OS_WINDOWS
#define exit(__c) ExitProcess(__c)
#else
#define exit(__c) _Exit(__c)
#endif
#if BOOST_OS_LINUX || BOOST_OS_MACOS

View file

@ -216,7 +216,7 @@ DefaultControllerSettings::DefaultControllerSettings(wxWindow* parent, const wxP
m_timer = new wxTimer(this);
Bind(wxEVT_TIMER, &DefaultControllerSettings::on_timer, this);
m_timer->Start();
m_timer->Start(100);
}
DefaultControllerSettings::~DefaultControllerSettings()

View file

@ -234,7 +234,7 @@ WiimoteControllerSettings::WiimoteControllerSettings(wxWindow* parent, const wxP
m_timer = new wxTimer(this);
Bind(wxEVT_TIMER, &WiimoteControllerSettings::on_timer, this);
m_timer->Start();
m_timer->Start(100);
}
WiimoteControllerSettings::~WiimoteControllerSettings()