GX2+TCL: Reimplement command buffer submission

- GX2 utilizes TCL(.rpl) API for command submission instead of directly writing to an internal GPU fifo
- Submission & retire timestamps are correctly implemented as incremental counters
- Command buffering behaviour matches console
- Fixes race conditions on aarch64
This commit is contained in:
Exzap 2025-05-14 18:59:50 +02:00
parent 96765e4ac6
commit 28ea70b6d8
21 changed files with 761 additions and 472 deletions

View file

@ -47,8 +47,6 @@ struct LatteGPUState_t
gx2GPUSharedArea_t* sharedArea; // quick reference to shared area
MPTR sharedAreaAddr;
// other
// todo: Currently we have the command buffer logic implemented as a FIFO ringbuffer. On real HW it's handled as a series of command buffers that are pushed individually.
std::atomic<uint64> lastSubmittedCommandBufferTimestamp;
uint32 gx2InitCalled; // incremented every time GX2Init() is called
// OpenGL control
uint32 glVendor; // GLVENDOR_*
@ -75,8 +73,6 @@ struct LatteGPUState_t
extern LatteGPUState_t LatteGPUState;
extern uint8* gxRingBufferReadPtr; // currently active read pointer (gx2 ring buffer or display list)
// texture
#include "Cafe/HW/Latte/Core/LatteTexture.h"