mirror of
https://github.com/tangerineturtle1/NX2navi.git
synced 2026-11-15 19:19:58 -04:00
The NVN2 front end and the SM86 to Maxwell shader lowering (tools/xlate/AmpereLowering.cs, mesh and task stages, bindless texture pools, BRX jump tables, the NVN2 compute c0 layout) with four translator patches (0017-0020) bring the opening of the game to 58-60 fps on the Vulkan renderer. This round fixes the haze: SM86 IPA is lowered as a plain Maxwell IPA.PASS (texture coordinates were corrected for perspective twice); LDSM, TXD, both F2IP byte forms, HMMA, MOVM and HFMA2.RELU are lowered and spill mode has eight uniform register groups; conditional rendering keeps the newest counter report per address and treats a report as pending until its value is in guest memory, so occlusion tests and the depth clears around the depth copy behave; and the upscaler stand-in decodes the post pass's sRGB picture before writing the linear target. Tensor-core programs keep the stand-in unless NX2NAVI_NATIVE_TENSOR=1, because their lowering does not match the hardware yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
42 lines
2.1 KiB
C
42 lines
2.1 KiB
C
// Kernel internals shared by kernel.c, svc.c and the kernel probe (kernel_probe.c). Not part of the host.h contract.
|
|
#pragma once
|
|
#include "host.h"
|
|
|
|
// Horizon kernel results (module 1).
|
|
#define KERN_R_OUT_OF_RESOURCE 0xCE01u
|
|
#define KERN_R_INVALID_STATE_MEM 0xD401u
|
|
#define KERN_R_BAD_HANDLE 0xE401u
|
|
#define KERN_R_TIMEOUT 0xEA01u
|
|
#define KERN_R_CANCELLED 0xEC01u
|
|
#define KERN_R_INVALID_ENUM 0xF001u
|
|
#define KERN_R_BAD_STATE 0xFA01u
|
|
#define KERN_H_CURRENT_THREAD 0xFFFF8000u
|
|
#define KERN_WAITERS_BIT 0x40000000u
|
|
|
|
// Fiber overrides, linked as HOST_OVERRIDE entries in kernel.c.
|
|
#define KERN_SYM_INITIALIZE_FIBER "_ZN2nn2os15InitializeFiberEPNS0_9FiberTypeEPFS2_PvES3_S3_mi"
|
|
#define KERN_SYM_FINALIZE_FIBER "_ZN2nn2os13FinalizeFiberEPNS0_9FiberTypeE"
|
|
#define KERN_SYM_SWITCH_TO_FIBER "_ZN2nn2os13SwitchToFiberEPNS0_9FiberTypeE"
|
|
#define KERN_SYM_GET_CURRENT_FIBER "_ZN2nn2os15GetCurrentFiberEv"
|
|
void kern_fiber_initialize(Cpu *c);
|
|
void kern_fiber_finalize(Cpu *c);
|
|
void kern_fiber_switch(Cpu *c);
|
|
void kern_fiber_current(Cpu *c);
|
|
|
|
uint64_t kern_threads_created(void);
|
|
void kern_seed_tls(void); // put the running thread's TLS where the SDK looks for it (TLR+0x1F0)
|
|
|
|
// The guest frame-pointer chain from c->x[29] to stderr.
|
|
void kern_backtrace(const Cpu *c);
|
|
|
|
// ---- probe support
|
|
enum { KERN_WAIT_NONE, KERN_WAIT_LOCK, KERN_WAIT_CONDVAR, KERN_WAIT_ADDRESS, KERN_WAIT_SYNC };
|
|
#define KERN_THREAD_EXITED 100
|
|
int kern_thread_state(uint32_t handle); // KERN_WAIT_*, KERN_THREAD_EXITED, or -1 for a bad handle
|
|
void kern_core_stats(int *held_now, int *held_max); // virtual-core holders now and the most ever at once
|
|
void kern_core_stats_reset(void);
|
|
extern volatile int kern_test_cv_old_order; // WaitProcessWideKeyAtomic: release the lock before setting
|
|
// the key (MNG's pre-fix order, the negative control)
|
|
extern void (*volatile kern_test_cv_hook)(void); // called right after the lock release, holding the kernel lock
|
|
extern void (*volatile svc_test_exit_hook)(unsigned code); // svc 0x07 calls it instead of ExitProcess (probes)
|