forked from Ports/goldeneye-pc-port
v0.4.0 M5: low-end performance preset row (D372)
Video.LowEndMode (default off) in F10 VIDEO: ON writes FpsCap 30 + MSAA x1 (restart row); OFF restores the compiled defaults (60/2) rather than per-user pre-preset values. The key records the last selected preset; the effect flows through the two real knobs.
This commit is contained in:
1 parent
40ef53e395
commit
b95b54ecc7
4 files changed
+47
No files matched your search
@@ -248,3 +248,4 @@ D368,?,Simplify F10 click targets:,"INPUT RULE KEPT; tinted strips user-rejected
|
|||||||
D369,FIXED,Remove F10 row boxes/strips entirely (2026-09-27).,FIXED (awaiting live acceptance):
|
D369,FIXED,Remove F10 row boxes/strips entirely (2026-09-27).,FIXED (awaiting live acceptance):
|
||||||
D370,PARTIAL,F10 distance/volume drags hurt frame rate (2026-09-27).,PARTIAL (user live test):
|
D370,PARTIAL,F10 distance/volume drags hurt frame rate (2026-09-27).,PARTIAL (user live test):
|
||||||
D371,FIXED,"GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).",FIXED (headless-verified; awaiting user live accept):
|
D371,FIXED,"GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).",FIXED (headless-verified; awaiting user live accept):
|
||||||
|
D372,FIXED,"Low-end perf preset (v0.4.0 modern options wave M5, 2026-09-27).",FIXED (headless-verified; awaiting user live accept):
|
||||||
|
@@ -656,6 +656,7 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121).
|
|||||||
| D369 | **Remove F10 row boxes/strips entirely (2026-09-27).** — full `## D369` entry at file tail | FIXED (awaiting live acceptance): no row backgrounds, control rectangles or hover paint; selected setting distinguished by brighter text, slider tracks remain. Input rule from D368 unchanged. |
|
| D369 | **Remove F10 row boxes/strips entirely (2026-09-27).** — full `## D369` entry at file tail | FIXED (awaiting live acceptance): no row backgrounds, control rectangles or hover paint; selected setting distinguished by brighter text, slider tracks remain. Input rule from D368 unchanged. |
|
||||||
| D370 | **F10 distance/volume drags hurt frame rate (2026-09-27).** — full `## D370` entry at file tail | PARTIAL (user live test): mostly improved; rapid spam can still lower FPS. Unchanged-detent/audio and Draw/LOD reapply fixed; other image sliders still request full video pass (live log shows frequent FOV passes). No further churn without focused repro. |
|
| D370 | **F10 distance/volume drags hurt frame rate (2026-09-27).** — full `## D370` entry at file tail | PARTIAL (user live test): mostly improved; rapid spam can still lower FPS. Unchanged-detent/audio and Draw/LOD reapply fixed; other image sliders still request full video pass (live log shows frequent FOV passes). No further churn without focused repro. |
|
||||||
| D371 | **GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).** full `## D371` entry at file tail | FIXED (headless-verified; awaiting user live accept): `Input.Layout` (0=FPS, 1=GEPD) + `Input.CrouchMode` (hold/toggle) in F10 INPUT; GEPD preset acts as per-key effective default under `[Input.Bind]` overrides; new IA_RELOAD/IA_CROUCH emit B (unbound by default). MODERN section dropped per D356 Turok-standard rule (rows land in functional INPUT). Boot/ini-round-trip/F10-page verified; in-game feel-check owed. |
|
| D371 | **GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).** full `## D371` entry at file tail | FIXED (headless-verified; awaiting user live accept): `Input.Layout` (0=FPS, 1=GEPD) + `Input.CrouchMode` (hold/toggle) in F10 INPUT; GEPD preset acts as per-key effective default under `[Input.Bind]` overrides; new IA_RELOAD/IA_CROUCH emit B (unbound by default). MODERN section dropped per D356 Turok-standard rule (rows land in functional INPUT). Boot/ini-round-trip/F10-page verified; in-game feel-check owed. |
|
||||||
|
| D372 | **Low-end perf preset (v0.4.0 modern options wave M5, 2026-09-27).** full `## D372` entry at file tail | FIXED (headless-verified; awaiting user live accept): one-row `Video.LowEndMode` in F10 VIDEO; ON writes FpsCap 30 + MSAA x1 (restart), OFF restores compiled defaults (60/2). Registered key persists through orderly exit. |
|
||||||
|
|
||||||
Phase 2 replaced the Phase-1 demo loop with the real `mainproc()` on real OS
|
Phase 2 replaced the Phase-1 demo loop with the real `mainproc()` on real OS
|
||||||
threads, compiled GE's real `src/sched.c`, and brought in PD's fast3d software
|
threads, compiled GE's real `src/sched.c`, and brought in PD's fast3d software
|
||||||
@@ -14357,3 +14358,31 @@ always saved there with bare leaf names). F10 INPUT page
|
|||||||
(`GE_OPTIONSOVERLAY=2`) boots clean, both rows resolve. **Owed:** live F10
|
(`GE_OPTIONSOVERLAY=2`) boots clean, both rows resolve. **Owed:** live F10
|
||||||
layout-switch feel-check (GEPD vs FPS), in-game crouch toggle/reload B
|
layout-switch feel-check (GEPD vs FPS), in-game crouch toggle/reload B
|
||||||
semantics + menu-latch-reset, PAL/JP.
|
semantics + menu-latch-reset, PAL/JP.
|
||||||
|
|
||||||
|
## D372 — Low-end performance preset row (v0.4.0 modern options wave, M5) (2026-09-27)
|
||||||
|
|
||||||
|
**Spec:** `docs/dev/notes/MODERN-OPTIONS-PLAN.md` M5. One row in the
|
||||||
|
functional VIDEO section (no MODERN bucket — same D356 Turok-standard
|
||||||
|
decision as D371).
|
||||||
|
|
||||||
|
**Implementation (port-only; `port/src/video.c`, `port/src/optionsoverlay.c`):**
|
||||||
|
- `Video.LowEndMode` (0/1, default 0) registered in `videoConfigInit`. The
|
||||||
|
key only records which preset the user last selected; the effect flows
|
||||||
|
through the two real knobs.
|
||||||
|
- F10 row "Low-end mode (restart)" (VIDEO section, after Frame rate cap):
|
||||||
|
ON → `rowSet(Video.FpsCap, 30)` + `rowSet(Video.MSAA, 1)`; OFF → 60 / 2
|
||||||
|
(the compiled defaults). We do NOT remember per-user pre-preset values —
|
||||||
|
the defaults are the N64-original setting, and a single well-known restore
|
||||||
|
point is simpler and predictable (deviation from plan §M5's
|
||||||
|
"pre-toggle values" wording; plan's parenthetical already notes the
|
||||||
|
defaults are the expected pre-toggle state).
|
||||||
|
- FpsCap applies live (`videoRequestLiveConfig` via the row's own commit);
|
||||||
|
MSAA is a restart row (applied at next GL context rebuild), hence the
|
||||||
|
"(restart)" label.
|
||||||
|
- `kResetDefaults`: `Video.LowEndMode = 0`.
|
||||||
|
|
||||||
|
**Verification:** NTSC build clean. F10 VIDEO page (`GE_OPTIONSOVERLAY=6`)
|
||||||
|
boots clean — row resolves, no "not registered" warning. `LowEndMode=1`
|
||||||
|
survives an orderly `GE_QUITFRAME` exit. **Owed:** live F10 preset
|
||||||
|
toggle (ON→FpsCap/MSAA written, FPS readout drops to 30), restart-for-MSAA
|
||||||
|
check, PAL/JP.
|
||||||
@@ -307,6 +307,9 @@ static struct Row rows[] = {
|
|||||||
{ .key="__Resolution", .label="Resolution", .kind=ROW_RES },
|
{ .key="__Resolution", .label="Resolution", .kind=ROW_RES },
|
||||||
{ .key="Video.VSync", .label="VSync", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
|
{ .key="Video.VSync", .label="VSync", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
|
||||||
{ .key="Video.FpsCap", .label="Frame rate cap", .kind=ROW_FPSCAP },
|
{ .key="Video.FpsCap", .label="Frame rate cap", .kind=ROW_FPSCAP },
|
||||||
|
/* v0.4.0 M5 (D372): one-row low-end preset -- writes FpsCap 30 +
|
||||||
|
* MSAA x1 (restart). OFF restores the compiled defaults (60/2). */
|
||||||
|
{ .key="Video.LowEndMode", .label="Low-end mode (restart)", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
|
||||||
{ .key="Video.DisplayFPS", .label="Show FPS", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
|
{ .key="Video.DisplayFPS", .label="Show FPS", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
|
||||||
{ .key="__ResetVideo", .label="Reset to defaults", .kind=ROW_ACTION },
|
{ .key="__ResetVideo", .label="Reset to defaults", .kind=ROW_ACTION },
|
||||||
/* D356: the D353 BOND FILE header + "Edit file" chooser row are retired --
|
/* D356: the D353 BOND FILE header + "Edit file" chooser row are retired --
|
||||||
@@ -753,6 +756,17 @@ static void rowSetCommit(struct Row *r, double v, int commit)
|
|||||||
inputLayoutApply();
|
inputLayoutApply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* v0.4.0 M5 (D372): low-end perf preset -- one row, two writes:
|
||||||
|
* cap the frame rate at 30 (half the sim tick rate, D186) and drop
|
||||||
|
* MSAA to x1. OFF restores the compiled defaults (60 / 2) rather
|
||||||
|
* than remembering per-user pre-preset values (the defaults ARE
|
||||||
|
* the N64-original setting; simpler and predictable). */
|
||||||
|
if (strcmp(r->key, "Video.LowEndMode") == 0) {
|
||||||
|
int on = (int)lround(v) != 0;
|
||||||
|
rowSet(rowByKey("Video.FpsCap"), on ? 30 : 60);
|
||||||
|
rowSet(rowByKey("Video.MSAA"), on ? 1 : 2);
|
||||||
|
}
|
||||||
|
|
||||||
/* Linked aim/turn sensitivity (Input.SensLink, default on): moving either
|
/* Linked aim/turn sensitivity (Input.SensLink, default on): moving either
|
||||||
* knob scales the other to hold the stock default ratio -- AimModeSens 38
|
* knob scales the other to hold the stock default ratio -- AimModeSens 38
|
||||||
* : MouseTurnSpeed 50 (the D194/D238 calibrated defaults). */
|
* : MouseTurnSpeed 50 (the D194/D238 calibrated defaults). */
|
||||||
@@ -902,6 +916,7 @@ static const struct { const char *key; double def; } kResetDefaults[] = {
|
|||||||
{ "Input.CrouchMode", 0 }, /* = 0 (hold) */
|
{ "Input.CrouchMode", 0 }, /* = 0 (hold) */
|
||||||
/* GRAPHICS (port/src/video.c initializers) */
|
/* GRAPHICS (port/src/video.c initializers) */
|
||||||
{ "Video.MSAA", 2 }, /* = 2 */
|
{ "Video.MSAA", 2 }, /* = 2 */
|
||||||
|
{ "Video.LowEndMode", 0 }, /* = 0 (preset off) */
|
||||||
{ "Video.TextureFilter", 1 }, /* = 1 (bilinear) */
|
{ "Video.TextureFilter", 1 }, /* = 1 (bilinear) */
|
||||||
{ "Video.Anisotropy", 4 }, /* = 4 */
|
{ "Video.Anisotropy", 4 }, /* = 4 */
|
||||||
{ "Video.FovScale", 100 }, /* = 100 */
|
{ "Video.FovScale", 100 }, /* = 100 */
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ static int initDone = 0;
|
|||||||
static int cfgVSync = 1; /* swap interval: 0 = off, 1 = on */
|
static int cfgVSync = 1; /* swap interval: 0 = off, 1 = on */
|
||||||
static int cfgFpsCap = 60; /* frame cap in fps; 0 = uncapped (vsync); menu only exposes 30/60 */
|
static int cfgFpsCap = 60; /* frame cap in fps; 0 = uncapped (vsync); menu only exposes 30/60 */
|
||||||
static int cfgMSAA = 2; /* 1/2/4/8 samples; 2x default is lighter on low-end GPUs */
|
static int cfgMSAA = 2; /* 1/2/4/8 samples; 2x default is lighter on low-end GPUs */
|
||||||
|
static int cfgLowEndMode = 0; /* v0.4.0 M5 (D372): 1 = low-end preset active (FpsCap 30 + MSAA x1) */
|
||||||
static int cfgTexFilter = 1; /* 0 = nearest, 1 = bilinear (default), 2 = N64 3-point + trilinear */
|
static int cfgTexFilter = 1; /* 0 = nearest, 1 = bilinear (default), 2 = N64 3-point + trilinear */
|
||||||
static int cfgFixMipTex = 1; /* RC2: clip mip-contaminated texture uploads to base height */
|
static int cfgFixMipTex = 1; /* RC2: clip mip-contaminated texture uploads to base height */
|
||||||
static int cfgDetailBaseTile = 1; /* D236: TEXTURETYPE_DETAIL -> sample the base image, not the detail tile */
|
static int cfgDetailBaseTile = 1; /* D236: TEXTURETYPE_DETAIL -> sample the base image, not the detail tile */
|
||||||
@@ -349,6 +350,7 @@ PD_CONSTRUCTOR static void videoConfigInit(void)
|
|||||||
configRegisterInt("Video.VSync", &cfgVSync, 0, 1);
|
configRegisterInt("Video.VSync", &cfgVSync, 0, 1);
|
||||||
configRegisterInt("Video.FpsCap", &cfgFpsCap, 0, 1000);
|
configRegisterInt("Video.FpsCap", &cfgFpsCap, 0, 1000);
|
||||||
configRegisterInt("Video.MSAA", &cfgMSAA, 1, 8);
|
configRegisterInt("Video.MSAA", &cfgMSAA, 1, 8);
|
||||||
|
configRegisterInt("Video.LowEndMode", &cfgLowEndMode, 0, 1); /* v0.4.0 M5 (D372) */
|
||||||
configRegisterInt("Video.TextureFilter", &cfgTexFilter, 0, 2);
|
configRegisterInt("Video.TextureFilter", &cfgTexFilter, 0, 2);
|
||||||
configRegisterInt("Video.FixMipTextures", &cfgFixMipTex, 0, 1);
|
configRegisterInt("Video.FixMipTextures", &cfgFixMipTex, 0, 1);
|
||||||
configRegisterInt("Video.DetailBaseTile", &cfgDetailBaseTile, 0, 1);
|
configRegisterInt("Video.DetailBaseTile", &cfgDetailBaseTile, 0, 1);
|
||||||
|
|||||||
Reference in new issue
Block a user