forked from Ports/goldeneye-pc-port
- Replace setjmp/longjmp green threads with real pthreads (8MB stacks); PortQueue side table (mutex+condvar) for OSMesgQueue; dedicated tick thread posts VI retrace + services timers (D24). - Dual-mapped N64 DRAM: one 8MB store at V1 0x70000000 (s32-safe, all game RAM symbols) and V2 0x80000000 (KSEG0 mirror for offset|0x80000000 rebuilds). Windows: CreateFileMappingW + MapViewOfFileEx; POSIX: memfd + MAP_FIXED. dram_syms.s pins cfb_16/_bssSegmentEnd/tlb block (D25). - Address-width shims: PHYS_TO_K0 identity, OS_K0_TO_PHYSICAL = offset from V1 base, OS_PHYSICAL_TO_K0 identity; fast3d seg_addr() remaps small offsets into V2 (D26). - ASLR off (-Wl,--disable-dynamicbase): absolute symbols referenced through pointer-typed externs (.refptr + BASE reloc) must not rebase; startup sanity check on image base 0x140000000 (D27). - osPiStartDma posts its completion message on every path (fixes romReceiveMesg deadlock) (D29). - SEH-free crash handler: raw fault log first, validated manual EBP-chain walk second (-fno-omit-frame-pointer), TerminateProcess; crashDumpThreads via Toolhelp32 for heartbeat hang dumps (D30). - PD fast3d integrated (port/fast3d/), replaces gfxstub.c; real src/sched.c compiled; mainproc runs as a real pthread, host thread pumps SDL events. - Docs: findings D24-D31 + Phase 2 status (section F/G). Current state: boots through bossInitMainthreadData to langInit(), then SIGSEGVs on the first file load — stack frame clobbered by a table of truncated s32 pointers (D31, open). Next: attribute the write with 'set scheduler-locking on' + hardware watchpoint.
76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
#ifndef GFX_CC_H
|
|
#define GFX_CC_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#ifdef __cplusplus
|
|
#include <compare>
|
|
#endif
|
|
|
|
enum {
|
|
SHADER_0,
|
|
SHADER_INPUT_1,
|
|
SHADER_INPUT_2,
|
|
SHADER_INPUT_3,
|
|
SHADER_INPUT_4,
|
|
SHADER_INPUT_5,
|
|
SHADER_INPUT_6,
|
|
SHADER_INPUT_7,
|
|
SHADER_TEXEL0,
|
|
SHADER_TEXEL0A,
|
|
SHADER_TEXEL1,
|
|
SHADER_TEXEL1A,
|
|
SHADER_1,
|
|
SHADER_COMBINED,
|
|
SHADER_NOISE,
|
|
SHADER_LOD_FRAC,
|
|
};
|
|
|
|
#define SHADER_OPT_ALPHA (1 << 0)
|
|
#define SHADER_OPT_FOG (1 << 1)
|
|
#define SHADER_OPT_TEXTURE_EDGE (1 << 2)
|
|
#define SHADER_OPT_NOISE (1 << 3)
|
|
#define SHADER_OPT_2CYC (1 << 4)
|
|
#define SHADER_OPT_ALPHA_THRESHOLD (1 << 5)
|
|
#define SHADER_OPT_INVISIBLE (1 << 6)
|
|
#define SHADER_OPT_GRAYSCALE (1 << 7)
|
|
#define SHADER_OPT_TEXEL0_CLAMP_S (1 << 8)
|
|
#define SHADER_OPT_TEXEL0_CLAMP_T (1 << 9)
|
|
#define SHADER_OPT_TEXEL1_CLAMP_S (1 << 10)
|
|
#define SHADER_OPT_TEXEL1_CLAMP_T (1 << 11)
|
|
#define SHADER_OPT_BLUR (1 << 12)
|
|
|
|
struct ColorCombinerKey {
|
|
uint64_t combine_mode;
|
|
uint64_t options;
|
|
auto operator<=>(const ColorCombinerKey&) const = default;
|
|
};
|
|
|
|
#define SHADER_MAX_TEXTURES 2
|
|
#define SHADER_FIRST_TEXTURE 0
|
|
|
|
struct CCFeatures {
|
|
uint8_t c[2][2][4];
|
|
bool opt_alpha;
|
|
bool opt_fog;
|
|
bool opt_texture_edge;
|
|
bool opt_noise;
|
|
bool opt_2cyc;
|
|
bool opt_alpha_threshold;
|
|
bool opt_invisible;
|
|
bool opt_grayscale;
|
|
bool opt_blur;
|
|
bool used_textures[2];
|
|
bool clamp[2][2];
|
|
int num_inputs;
|
|
bool do_single[2][2];
|
|
bool do_multiply[2][2];
|
|
bool do_mix[2][2];
|
|
bool color_alpha_same[2];
|
|
};
|
|
|
|
void gfx_cc_get_features(uint64_t shader_id0, uint32_t shader_id1, struct CCFeatures* cc_features);
|
|
|
|
#endif
|