Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
582 commits
Select commit Hold shift + click to select a range
7c25130
[Feat] (MG_Remote, Protocol): delete CapsSnapshot's four redundant tr…
Swung0x48 Sep 11, 2026
558fb21
[Feat] (MG_Remote, Client, Server): the Hello/Welcome/CapsSnapshot ha…
Swung0x48 Sep 11, 2026
1f953c0
[Test] (MG_Test, Wire): pin the session pair - twenty thousand record…
Swung0x48 Sep 11, 2026
75c0bca
[Docs] (MG_Remote): correct the sparse-caps comment - 13 targets by 7…
Swung0x48 Sep 11, 2026
76140c3
[Fix] (MG_Remote, Wire): stop the decoder writing RingControl - appli…
Swung0x48 Sep 11, 2026
eaf2b28
[Feat] (MG_Pipe): give MGPSubData's pad byte to HasLiveHostWrites - t…
Swung0x48 Sep 11, 2026
851a0b6
[Feat] (MG_Remote, Client): the conservative GPU-write set and the pe…
Swung0x48 Sep 11, 2026
feca399
[Feat] (MG_State, BufferObject): under split cut the mapped span into…
Swung0x48 Sep 11, 2026
13827e3
[Feat] (MG_Pipe): give HasLiveHostWrites its producer, decline every …
Swung0x48 Sep 11, 2026
142bf92
[Fix] (DirectGLES): retire the probe's last frontend read under split…
Swung0x48 Sep 11, 2026
d9ade1e
[Feat, Docs] (PipeStats, MEASUREMENTS): wire persistent-map-push to t…
Swung0x48 Sep 11, 2026
0b847d4
[Feat] (GLImpl): mark the pack PBO after a glReadPixels and the captu…
Swung0x48 Sep 11, 2026
db1a5db
[Test] (MG_Test): one case per GPU-write row, the lifted live-host-wr…
Swung0x48 Sep 11, 2026
31de231
[Test] (MG_Test, Wire): assert a payload crosses byte for byte includ…
Swung0x48 Sep 11, 2026
7ad0ff3
[Test] (MG_IntegrationTest): assert which persistent-map arm the scen…
Swung0x48 Sep 11, 2026
fb70704
[Fix] (scripts): assert every field-ownership negative control agains…
Swung0x48 Sep 11, 2026
c16411a
[Feat] (MG_Pipe, scripts): refuse an OMITTED stamp row and not only a…
Swung0x48 Sep 11, 2026
3cb2c4a
[Fix] (MGPipe): make the applier's own verb-boundary clear mandatory …
Swung0x48 Sep 11, 2026
126bd9a
[Test] (MG_Test, Pipe): pin the applier's own clear on the path a spa…
Swung0x48 Sep 11, 2026
3aa48bc
[Test] (CI): run the field-ownership generator's --check and --self-t…
Swung0x48 Sep 11, 2026
c5c12b4
[Fix] (MG_Remote, Server): delete CallMask's two derived defaults and…
Swung0x48 Sep 11, 2026
ed60c06
[Fix] (MG_Remote, Protocol): mark CapsSnapshot's four retired fields …
Swung0x48 Sep 11, 2026
da8f030
[Fix] (MG_Remote, Transport): the knob names the ring and the segment…
Swung0x48 Sep 11, 2026
8024dab
[Fix] (MG_Remote, Client): fold the null union payload into both hand…
Swung0x48 Sep 11, 2026
3f1eaee
[Test] (MG_Test, Wire): pin the seven findings of fix round one - the…
Swung0x48 Sep 11, 2026
79b7866
[Fix] (MG_Remote, Wire): close R-2 arm 4 over MGHostSpan, stop the pr…
Swung0x48 Sep 11, 2026
8b425a9
[Test] (MG_IntegrationTest): arm the split lanes from the running pro…
Swung0x48 Sep 11, 2026
949ed1f
[Test, CI] (tools/trace_replay, workflows): give retrace-split the ne…
Swung0x48 Sep 11, 2026
f33e5d6
[Fix] (MG_Remote, Transport, Client): SEG_STAGE is w1's encoder-local…
Swung0x48 Sep 11, 2026
d55e373
[Fix] (MG_Pipe): give the four acceptance calls the kReplySlot their …
Swung0x48 Sep 11, 2026
ab112eb
[Fix, Test] (gen_pipe, Wire): stop the generated header comment invit…
Swung0x48 Sep 11, 2026
6e858fa
[Docs] (MG_Remote): record R-16 and R-17 - the fourteen reply-slot ro…
Swung0x48 Sep 11, 2026
3a5e262
[Fix] (MG_State, BufferObject): publish the live-host-writes bit on t…
Swung0x48 Sep 11, 2026
9509680
[Fix] (MG_Impl, PipeFill): make buffer_subdata_resident declare the l…
Swung0x48 Sep 11, 2026
0598cff
[Fix, Test] (MG_Pipe): replace the always-false live-host-writes wire…
Swung0x48 Sep 11, 2026
3dadd4c
[Fix] (DirectGLES): make the extent hostBase is good for a parameter …
Swung0x48 Sep 11, 2026
f858841
[Fix] (MG_Remote, GLImpl): gate the transform-feedback reconciliation…
Swung0x48 Sep 11, 2026
6afa044
[Docs] (PipeStats): state in both entries that persistent-map-push an…
Swung0x48 Sep 11, 2026
505b508
[Test] (MG_Test): drive the live-host-writes probe through the produc…
Swung0x48 Sep 11, 2026
511e902
[Merge] (MGPipe, P5): integrate package w1
Swung0x48 Sep 11, 2026
2de7d40
[Merge] (MGPipe, P5): integrate package s1
Swung0x48 Sep 11, 2026
a6bcf28
[Merge] (MGPipe, P5): integrate package p1
Swung0x48 Sep 11, 2026
3089ce8
[Merge] (MGPipe, P5): integrate package b1
Swung0x48 Sep 11, 2026
bfaf5f9
[Merge] (MGPipe, P5): integrate package t1
Swung0x48 Sep 11, 2026
d628d90
[Feat] (MG_Remote, P5): land the client role - BackendObject_Remote, …
Swung0x48 Sep 11, 2026
5e5bf7b
[Merge] (dev): bring fff9d639 - the DirectVulkan resident-buffer orde…
Swung0x48 Sep 16, 2026
87c1e1b
Merge branch 'feat/disaggregated' into p5/c1
Swung0x48 Sep 16, 2026
4ba14fa
[Test] (MG_Test, Wire): ID-43 - RingTest.TheTwoFlagSpacesAreDisjointB…
Swung0x48 Sep 16, 2026
377356f
[Feat] (DirectGLES/Managers, MG_Remote/Server): R-11 - copy staged by…
Swung0x48 Sep 16, 2026
8dbe230
[Feat] (MG_Remote/Server): PipeApplier - attach the decoder on the ap…
Swung0x48 Sep 16, 2026
23c0468
[Feat] (MG_Remote/Server): ServerLoop - the mgl-srv-apply thread, its…
Swung0x48 Sep 16, 2026
d623118
[Feat] (MG_Backend, MobileGL/Init): the single split hook in MG_Backe…
Swung0x48 Sep 16, 2026
7ea3b1d
[Test] (MG_Test/Wire): ServerLoopTest - the apply thread, the control…
Swung0x48 Sep 16, 2026
571cbab
[Fix] (MobileGL/Init, MG_Backend): ShutdownSplitRoles exists only und…
Swung0x48 Sep 16, 2026
f63c948
[Fix] (scripts): compare G5's eleventh row against its pin ALWAYS and…
Swung0x48 Sep 16, 2026
6cabc6b
[Fix, Test] (MG_IntegrationTest, MG_Test): make the persistent-map me…
Swung0x48 Sep 16, 2026
ce53553
[Merge] (MGPipe, P5): integrate package b1, round 2 - ID-41 and ID-42
Swung0x48 Sep 16, 2026
7110cdb
[Fix] (scripts): make gen_pipe.py's expect_trip require the tripped g…
Swung0x48 Sep 16, 2026
1a06b40
[Fix] (MG_Remote, Wire): let an empty SEG_STAGE take a blob that fits…
Swung0x48 Sep 16, 2026
ba6dc4f
[Fix] (MG_Remote, Wire): require every client-server content blob to …
Swung0x48 Sep 16, 2026
bb6ba28
[Fix] (MG_Remote, Wire): send the codec's MapPersistent arm through t…
Swung0x48 Sep 16, 2026
3fb97cc
Merge branch 'feat/disaggregated' into p5/v1
Swung0x48 Sep 16, 2026
aa7ad67
Merge branch 'p5/v1' into p5/c1
Swung0x48 Sep 16, 2026
cd2079e
[Merge] (MGPipe, P5): integrate package w1, round 2 - ID-48 findings …
Swung0x48 Sep 16, 2026
2e2b41a
[Fix, Test] (workflows, scripts/ci): make the three CI negative contr…
Swung0x48 Sep 16, 2026
0a22f36
[Doc] (workflows): correct the two G5 self-test descriptions to b1 ro…
Swung0x48 Sep 16, 2026
129969c
[Merge] (MGPipe, P5): integrate package t1, round 2 - ID-48 finding 8
Swung0x48 Sep 16, 2026
949ba50
[Fix, Test] (MG_Remote, MG_Test, CONTRACT): wave 1.5 s1 - ID-47 SEG_R…
Swung0x48 Sep 16, 2026
3929295
[Merge] (MGPipe, P5): integrate package s1, round 3 - ID-47 and ID-48…
Swung0x48 Sep 16, 2026
02f15bb
[Feat] (MG_Pipe, MG_Remote/Client, MG_Impl/Pipe): R-17 - install the …
Swung0x48 Sep 16, 2026
c3e736a
[Docs] (Disaggregated): SEG_REPLY is 16 MiB in eight 2 MiB slots (ID-…
Swung0x48 Sep 16, 2026
4199264
Merge branch 'feat/disaggregated' into p5/c1
Swung0x48 Sep 16, 2026
e7fe3b9
[Fix] (MG_Remote/Server): ServerLoop - clear m_running under m_contro…
Swung0x48 Sep 16, 2026
0244fc4
[Fix] (MG_Backend/Init): ShutdownSplitRoles stops the apply thread an…
Swung0x48 Sep 16, 2026
0fde953
[Fix] (DirectGLES/Managers): under an active transport the server sta…
Swung0x48 Sep 16, 2026
7a925b3
[Fix] (DirectGLES): the seven backend format-capability reads use the…
Swung0x48 Sep 16, 2026
61d6cd8
[Fix] (MG_Remote/Server): OnReadPixels reads with neutral pack state …
Swung0x48 Sep 16, 2026
05bcb73
[Fix] (MGPipe): resource_flush_range carries no companion bytes under…
Swung0x48 Sep 16, 2026
a85aa95
[Test] (MG_Test/Wire): ServerLoopTest - the R-11 production gate thro…
Swung0x48 Sep 16, 2026
455b475
[Fix] (DirectGLES/Managers, MG_Remote/Server): m-5 nulls a stale host…
Swung0x48 Sep 16, 2026
f280baf
Merge branch 'feat/disaggregated' into p5/c1
Swung0x48 Sep 16, 2026
c9d84e3
[Fix] (DirectGLES/Managers): under an active transport a resource_sub…
Swung0x48 Sep 16, 2026
b2dcae7
[Fix] (IntegrationTest): give Split entries private diagnostic logs
Swung0x48 Sep 16, 2026
5682f42
[Fix, Test] (MG_Remote/Client, MG_Impl/Pipe): c1 round 3 - route the …
Swung0x48 Sep 16, 2026
2536ffb
[Merge] (MGPipe, P5): joint - c1@5682f429d0c877ae5d50ad723b76253b182c…
Swung0x48 Sep 16, 2026
65a4032
[Merge] (MGPipe, P5): joint - v1@c9d84e33c5e51075e9c6ec7374740fb314cc…
Swung0x48 Sep 16, 2026
e61d001
[Feat] (MG_Backend, MG_Remote/Server): construct BackendObject_Remote…
Swung0x48 Sep 16, 2026
68d8ef9
[Fix] (IntegrationTest): gate private split logs and repair control r…
Swung0x48 Sep 16, 2026
ca92308
Merge branch 'feat/disaggregated' into p5/v1
Swung0x48 Sep 16, 2026
cc20de3
[Fix] (IntegrationTest): reject skipped split control selections
Swung0x48 Sep 16, 2026
fa924d3
[Merge] (MGPipe, P5): land j0 rounds 2-3 - the split-lane private log…
Swung0x48 Sep 16, 2026
eec0e83
[Build] (Android): map mobilegl.buildDisaggregated and mobilegl.build…
Swung0x48 Sep 16, 2026
6d86f9d
[Fix] (Client): share teardown refusal and gate live wire producers
Swung0x48 Sep 16, 2026
a838c78
[Fix] (MG_Remote/Server, DirectGLES/BackendObject): ID-54 bind-once a…
Swung0x48 Sep 16, 2026
49fecc1
[Fix] (DirectGLES/Managers, MG_Backend/Init, MG_Remote/Server): N-7 m…
Swung0x48 Sep 16, 2026
13043e3
[Test] (MG_Test/Wire): ServerLoopTest round 3 - an EGL fixture brings…
Swung0x48 Sep 16, 2026
1646049
[Fix, Test] (DirectGLES/Managers, MG_Test/Wire): M-3's two whole-stor…
Swung0x48 Sep 16, 2026
fbeea87
[Merge] (MGPipe, P5): land c1f - the client's missing gates and contr…
Swung0x48 Sep 16, 2026
a48bc46
[Docs] (Disaggregated): document the landed P5 inproc milestone
Swung0x48 Sep 16, 2026
edcdf77
[Merge] (Docs, P5): land the P5 sections of README, ROADMAP, ARCHITEC…
Swung0x48 Sep 16, 2026
74060e8
[Fix, Test] (DirectGLES/BackendObject, MG_Remote/Server, MG_Test/Wire…
Swung0x48 Sep 16, 2026
c9878d6
[Test] (MG_Test, Client): align make-current caps controls with ID-67
Swung0x48 Sep 16, 2026
b13f2b0
[Fix, Test] (DirectGLES/BackendObject, MG_Test/Wire): G1 - the two Cr…
Swung0x48 Sep 16, 2026
9f52878
[Feat] (MG_Remote, MG_Util): the wire ledger - maxrec/maxcap/ringwrap…
Swung0x48 Sep 16, 2026
a7b43cb
[Test] (MG_IntegrationTest): exit gate E3(e) drives the small ring pa…
Swung0x48 Sep 16, 2026
579118a
[Test, CI] (scripts/ci, workflows): E2's draw-drop control requires t…
Swung0x48 Sep 16, 2026
f561499
[Merge] (MGPipe, P5): land v1 round 3 - the review residue closed, bi…
Swung0x48 Sep 16, 2026
4dd4027
[Feat] (MG_Pipe, P5b): append the five P5b verb rows at opcodes 72..7…
Swung0x48 Sep 16, 2026
a164113
[Feat] (MG_Remote, P5b): decode every P5b row to a WireVerbSink metho…
Swung0x48 Sep 16, 2026
02972f7
[Test] (MG_Test, P5b): pin the 76-row catalogue, the 18 stamp rows an…
Swung0x48 Sep 16, 2026
538c3c1
[Docs] (MG_Remote): CONTRACT-P5B.md - the wire records, sinks, refusa…
Swung0x48 Sep 16, 2026
f567610
[Merge] (P5b, c0b): merge feat/disaggregated at f5614995 (v1 round 3,…
Swung0x48 Sep 16, 2026
94ce2ee
[CI] (apk): pin cmdline-tools and drop the removed 'tools' package so…
Swung0x48 Sep 16, 2026
bd11ab1
[Merge] (MGPipe, P5): land x2 - the E2 draw-drop control, R-10 maxrec…
Swung0x48 Sep 16, 2026
37fc4fd
[Merge] (MGPipe, P5): land x2 via x2m - the E2 draw-drop control, R-1…
Swung0x48 Sep 16, 2026
7ffa499
[Feat] (Remote): migrate f1 clear copy and mipmap verbs under inproc
Swung0x48 Sep 16, 2026
fe5ac00
[Merge] (Remote): bring f1 up to the integrated P5 wire ledger
Swung0x48 Sep 16, 2026
734287a
[Feat] (MG_Remote, P5b): emit i1 seven image/compute/barrier/copy-ima…
Swung0x48 Sep 16, 2026
b82c63a
[Feat] (MG_Pipe, DirectGLES, P5b): move GetProgramForDispatch FATAL t…
Swung0x48 Sep 16, 2026
a72a96d
[Test] (MG_Test, MG_IntegrationTest, P5b): pin i1 seven class-B slots…
Swung0x48 Sep 16, 2026
e352e9a
[Merge] (P5b, i1): merge feat/disaggregated at 37fc4fdb (x2 via x2m, …
Swung0x48 Sep 16, 2026
e564939
[Feat] (MG_Remote, P5b d1): flip the nineteen indexed / instanced / m…
Swung0x48 Sep 16, 2026
fbe17d0
[Test] (MG_IntegrationTest, P5b d1): keep GuiBatchScenario out of the…
Swung0x48 Sep 16, 2026
c240557
[Feat] (MG_Pipe, MG_Remote, P5b/t2): add kCapBackendOwnsXfbCapture, p…
Swung0x48 Sep 16, 2026
dd29320
[Feat] (MG_Remote, P5b/t2): emit the four stream-output span rows, th…
Swung0x48 Sep 16, 2026
c831ab0
[Test] (MG_Test, MG_IntegrationTest, P5b/t2): pin the span order and …
Swung0x48 Sep 16, 2026
fc5b52e
[Merge] (P5b, t2): merge feat/disaggregated at 37fc4fdb (x2 via x2m, …
Swung0x48 Sep 16, 2026
6fa6a92
[Fix] (CI): make split controls mandatory and isolate runner evidence
Swung0x48 Sep 16, 2026
d50183c
[Fix] (IntegrationTest): assert actual staging backpressure in the sm…
Swung0x48 Sep 16, 2026
a523d61
Merge branch 'p5b/r2' into p5b/integrate-codex
Swung0x48 Sep 16, 2026
2deca99
[Merge] (P5b): integrate i1 alongside f1 and r2, preserving the combi…
Swung0x48 Sep 16, 2026
5443bce
[Merge] (P5b): integrate t2 and reconcile all migrated emitter families
Swung0x48 Sep 16, 2026
9606466
[Merge] (MG_Remote, P5b): combine d1 draw migration with f1 i1 t2 and r2
Swung0x48 Sep 16, 2026
cc0d56e
[Docs] (Disaggregated): record P5 final gate stop and scoped control …
Swung0x48 Sep 16, 2026
db8b347
[Fix] (Remote): preserve server ownership and wait for ring retirement
Swung0x48 Sep 16, 2026
12905a7
[Merge] (P5b): land r1 core fixes with multi-tail command-ring retry
Swung0x48 Sep 16, 2026
56c6e49
[Feat] (MG_Remote): lower named framebuffer blits through scoped wire…
Swung0x48 Sep 16, 2026
f018c0e
[Feat] (MG_Remote, P5b sync): migrate fence lifecycle and wait replie…
Swung0x48 Sep 16, 2026
348d22a
[Fix] (DirectGLES): verify generated mip storage from pushed descriptors
Swung0x48 Sep 16, 2026
a021e3c
[Fix] (MG_Remote): bound user-index draws by the declared span
Swung0x48 Sep 16, 2026
82683d4
[Fix] (Remote): honor fence wait budgets and reject invalid readback …
Swung0x48 Sep 16, 2026
696acce
[Docs] (Disaggregated): record the P5b inproc verb migration - the cl…
Swung0x48 Sep 17, 2026
171f186
[Merge] (Docs, P5b): land the P5b documentation
Swung0x48 Sep 17, 2026
7cb29d4
[Fix, Test] (MG_Test/Wire): empty the log before each forked child an…
Swung0x48 Sep 17, 2026
ef35ea0
[Docs] (Disaggregated): move the integrator's running progress log in…
Swung0x48 Sep 17, 2026
c77831e
[Docs] (Disaggregated): rewrite the staged-progress log as a concise …
Swung0x48 Sep 17, 2026
ea34bcc
[Docs] (Disaggregated): close out P5b - record the completed host gat…
Swung0x48 Sep 17, 2026
a79a0af
[Docs] (Disaggregated): consolidate the five documents at the P5b clo…
Swung0x48 Sep 17, 2026
11ac3de
[Docs] (Disaggregated): plan P5c - audit the inproc split's remaining…
Swung0x48 Sep 17, 2026
851bc70
[MG_Remote] (Disaggregated): CONTRACT-P5C - the wire contract for zer…
Swung0x48 Sep 17, 2026
4b54a6f
[MG_Remote, MG_Backend] (Disaggregated): P5c tx - the server's textur…
Swung0x48 Sep 17, 2026
930ad01
[MG_Remote, MG_Impl, MG_Backend] (Disaggregated): P5c ev - SEG_EVENT …
Swung0x48 Sep 17, 2026
1eeb474
Merge branch 'p5c-ev' into feat/disaggregated (P5c ev: SEG_EVENT reve…
Swung0x48 Sep 17, 2026
7f5bdd3
[MG_Backend, MG_Remote, MG_Impl, MG_State] (Disaggregated): P5c hd - …
Swung0x48 Sep 17, 2026
a7e55ee
[MG_Pipe, MG_Remote, MG_Backend, MG_Impl, MG_IntegrationTest] (Disagg…
Swung0x48 Sep 17, 2026
b45bf68
Merge branch 'p5c-hd' into feat/disaggregated (P5c hd: handle-keyed r…
Swung0x48 Sep 17, 2026
63f8bb1
[Docs, MG_Pipe] (Disaggregated): CONTRACT-P5C amendments ratified at …
Swung0x48 Sep 17, 2026
04650ca
Merge branch 'p5c-ct' into feat/disaggregated (P5c ct: applier_reset …
Swung0x48 Sep 17, 2026
82b1f74
[MG_Pipe, MG_Impl, MG_Remote, MG_Backend] (Disaggregated): P5c rv - s…
Swung0x48 Sep 17, 2026
c74de6b
Merge branch 'p5c-rv' into feat/disaggregated (P5c rv: residual-value…
Swung0x48 Sep 17, 2026
a0865b0
[MG_State, MG_Backend, MG_Remote, MG_Impl, CI] (Disaggregated): P5c g…
Swung0x48 Sep 17, 2026
ab92502
[Docs, MG_Backend] (Disaggregated): P5c housekeeping - the death-swit…
Swung0x48 Sep 17, 2026
39d1a5d
Merge branch 'p5c-gt' into feat/disaggregated (P5c gt: role guards, I…
Swung0x48 Sep 17, 2026
b88e848
[MG_Remote, MG_State, MG_Impl, MG_Backend, MG_IntegrationTest] (Disag…
Swung0x48 Sep 17, 2026
36176b9
[Docs, MG_Remote] (Disaggregated): close out P5c - the inproc split's…
Swung0x48 Sep 17, 2026
7cdc8d7
[Docs] (Disaggregated): refresh the P5c close-out status lines - READ…
Swung0x48 Sep 17, 2026
cb06538
[MG_Remote, MG_Pipe, MG_Impl, MG_Test, MG_IntegrationTest, Docs] (Dis…
Swung0x48 Sep 18, 2026
56a7734
[MG_Remote, MG_State] (Disaggregated): inproc performance, round 2 - …
Swung0x48 Sep 18, 2026
85362a8
[Docs] (Disaggregated): P5d close-out - the inproc performance report…
Swung0x48 Sep 18, 2026
1f8de61
[MG_Remote, MG_Pipe, MG_Impl, MG_State, MG_Backend, MG_Test, MG_Integ…
Swung0x48 Sep 18, 2026
2fde703
[Docs] (Disaggregated): P5d round 3 close-out - the report, the measu…
Swung0x48 Sep 18, 2026
7568161
[MG_Pipe, MG_Impl, MG_Test] (Disaggregated): P5e c0e - the types, the…
Swung0x48 Sep 18, 2026
e99796d
[MG_Pipe, MG_Remote, MG_Test] (Disaggregated): P5e c0e - the wait-cla…
Swung0x48 Sep 18, 2026
5ef4701
[Config, MG_Backend, MG_Test] (Disaggregated): P5e c0e - the two knob…
Swung0x48 Sep 18, 2026
f40a57c
[MG_Pipe, MG_Impl, MG_Remote, MG_Backend] (Disaggregated): P5e id - t…
Swung0x48 Sep 18, 2026
69a2785
[MG_Backend] (Disaggregated): P5e id - the composite band, ForEachLiv…
Swung0x48 Sep 18, 2026
0d54de6
[MG_Backend] (Disaggregated): P5e id - ResolveVaoTwin / ResolveTextur…
Swung0x48 Sep 18, 2026
287bade
[MG_Backend] (Disaggregated): P5e id - the NoSession mailbox hop dele…
Swung0x48 Sep 18, 2026
0117d15
[MG_Test] (Disaggregated): P5e id - the band case, and the exemption …
Swung0x48 Sep 18, 2026
c06878e
[MG_Pipe, MG_Impl, MG_Backend, MG_Test] (Disaggregated): P5e c0e - th…
Swung0x48 Sep 18, 2026
b4cf9b0
[Docs, MG_Remote] (Disaggregated): P5e c0e - the contract lands, and …
Swung0x48 Sep 18, 2026
a513c53
[Docs] (Disaggregated): P5e c0e - fix the one citation the draft got …
Swung0x48 Sep 18, 2026
11cbf4b
Merge branch 'p5e/c0e' into feat/disaggregated (P5e c0e: the contract…
Swung0x48 Sep 18, 2026
367e473
Merge branch 'p5e/id' into feat/disaggregated (P5e id: handle-keyed t…
Swung0x48 Sep 18, 2026
f6cfcbd
[MG_Pipe, MG_Backend, MG_Remote, MG_Test] (Disaggregated): P5e wave 1…
Swung0x48 Sep 18, 2026
39d0677
[MG_Pipe, MG_Impl, MG_Remote, MG_State, MG_Test] (Disaggregated): P5e…
Swung0x48 Sep 18, 2026
3012d52
[MG_Backend] (Disaggregated): P5e fb - the attachment surface, the tw…
Swung0x48 Sep 18, 2026
72e7902
[MG_Backend, MG_State, MG_Remote] (Disaggregated): P5e tx2 - the text…
Swung0x48 Sep 18, 2026
a3466e6
[MG_Remote] (Disaggregated): P5e ra - SEG_EVENT stops aborting and st…
Swung0x48 Sep 18, 2026
6e6b86e
[MG_Remote, MG_Pipe, MG_Impl, MG_Backend] (Disaggregated): P5e ra - t…
Swung0x48 Sep 18, 2026
8595909
[MG_Backend, MG_State] (Disaggregated): P5e tx2 - the two the lane fo…
Swung0x48 Sep 18, 2026
6c37c20
[MG_Backend] (Disaggregated): P5e fb - the FBO doors, both attachment…
Swung0x48 Sep 18, 2026
a08b337
[MG_Test] (Disaggregated): P5e tx2 - the seven shape reads become pin…
Swung0x48 Sep 18, 2026
f4675d1
[MG_Backend] (Disaggregated): P5e fb - SCAFFOLD, REVERTED BEFORE HEAD…
Swung0x48 Sep 18, 2026
1ebe6ab
[MG_Pipe, MG_Impl, MG_State, MG_Remote, MG_Backend, MG_Test] (Disaggr…
Swung0x48 Sep 18, 2026
fcd7c5c
[MG_Backend] (Disaggregated): P5e fb - the eager image-bind funnel st…
Swung0x48 Sep 18, 2026
a04cf05
[MG_Backend] (Disaggregated): P5e vi - the VAO, its buffers and its i…
Swung0x48 Sep 18, 2026
4fc93c1
[MG_Remote] (Disaggregated): P5e vi - kDrawClientArrays on the wire, …
Swung0x48 Sep 18, 2026
112c1d8
[MG_Test] (Disaggregated): P5e vi - the two source decisions, the win…
Swung0x48 Sep 18, 2026
c5491ca
[MG_Backend] (Disaggregated): P5e pg - the program twin is keyed by t…
Swung0x48 Sep 18, 2026
aa38f0a
[MG_Test] (Disaggregated): P5e fb - the three constants on both sides…
Swung0x48 Sep 18, 2026
99211a4
[MG_Test] (Disaggregated): P5e tx2 - the ABA case asks the twin table…
Swung0x48 Sep 18, 2026
bbfd4fe
[MG_Test, MG_Impl, MG_Pipe] (Disaggregated): P5e ra - the wait rule's…
Swung0x48 Sep 18, 2026
b004e5d
[MG_Backend] (Disaggregated): P5e sb - Espryt's four binding-point wa…
Swung0x48 Sep 18, 2026
6ee4c09
[CI, Docs] (Disaggregated): P5e ra - the strict lane becomes one step…
Swung0x48 Sep 18, 2026
1c87271
[MG_Backend] (Disaggregated): P5e tx2 - name the two entries that act…
Swung0x48 Sep 18, 2026
48b2f56
[MG_Remote] (Disaggregated): P5e ra - the run-ahead latch goes down w…
Swung0x48 Sep 18, 2026
ca1beb6
[MG_Backend] (Disaggregated): P5e fb - revert the tx2 scaffold; the s…
Swung0x48 Sep 18, 2026
4d1499e
[MG_Test] (Disaggregated): P5e pg - four cases for the bindings recor…
Swung0x48 Sep 18, 2026
e0f69e8
Merge branch 'p5e/vi' into feat/disaggregated (P5e vi)
Swung0x48 Sep 18, 2026
5b226f1
Merge branch 'p5e/sb' into feat/disaggregated (P5e sb)
Swung0x48 Sep 18, 2026
30e3858
Merge branch 'p5e/pg' into feat/disaggregated (P5e pg)
Swung0x48 Sep 18, 2026
db2196f
Merge branch 'p5e/tx2' into feat/disaggregated (P5e tx2)
Swung0x48 Sep 18, 2026
cae6899
Merge branch 'p5e/fb' into feat/disaggregated (P5e fb)
Swung0x48 Sep 18, 2026
e7a66d2
Merge branch 'p5e/ra' into feat/disaggregated (P5e ra)
Swung0x48 Sep 18, 2026
44f91c7
[MG_Backend, MG_Test] (Disaggregated): P5e wave 2 integration - the t…
Swung0x48 Sep 18, 2026
6662176
[MG_Backend, MG_Test] (Disaggregated): P5e fix1 - the by-handle attac…
Swung0x48 Sep 18, 2026
3cc4e1e
[MG_Backend] (Disaggregated): P5e ID-110 - the record arm's selector …
Swung0x48 Sep 18, 2026
7c6f688
[Docs] (Disaggregated): P5e 进度、monolith 回归与设备验证写回
Swung0x48 Sep 18, 2026
98ea160
[MG_Backend] (Disaggregated): P5e mv - the multi-draw path stops read…
Swung0x48 Sep 18, 2026
8df7861
[MG_Remote, MG_Test] (Disaggregated): P5e ID-111 - the barriered stam…
Swung0x48 Sep 18, 2026
f94752c
[MG_Impl] (Disaggregated): P5e ID-112 - a compile-time trip wire on a…
Swung0x48 Sep 18, 2026
53b8346
[MG_Backend, MG_Remote] (Disaggregated): P5e pa - the draw and dispat…
Swung0x48 Sep 18, 2026
a211756
[MG_Pipe, MG_Test, CI] (Disaggregated): P5e ID-116 - the section 7 al…
Swung0x48 Sep 18, 2026
dd89951
[MG_Test] (Disaggregated): P5e pa - the strict lane gets four entries…
Swung0x48 Sep 18, 2026
4f492ed
[MG_Backend, MG_Test] (Disaggregated): P5e ID-117 - the strict knob g…
Swung0x48 Sep 18, 2026
5c777b4
[MG_Test] (Disaggregated): P5e mv - the multi-draw tiers get gated en…
Swung0x48 Sep 18, 2026
a6ddeb0
[MG_Pipe, MG_Test] (Disaggregated): P5e ID-118 - resource_copy_region…
Swung0x48 Sep 18, 2026
b4789e8
Merge branch p5e/mv into feat/disaggregated (P5e mv)
Swung0x48 Sep 18, 2026
d8b9848
Merge branch p5e/pa into feat/disaggregated (P5e pa)
Swung0x48 Sep 18, 2026
3c13fa4
[MG_Backend] (Disaggregated): P5e ID-124 - the pull and push flavours…
Swung0x48 Sep 18, 2026
faf19a6
[MG_Pipe, MG_Test, CI] (Disaggregated): P5e ID-125 - admission gains …
Swung0x48 Sep 18, 2026
a083656
[MG_Pipe, MG_Remote, MG_Backend, MG_Test] (Disaggregated): P5e ID-128…
Swung0x48 Sep 18, 2026
bc6e24f
[MG_IntegrationTest, MG_Util, MG_Backend, CI, Docs] (Disaggregated): …
Swung0x48 Sep 18, 2026
664cbf3
[MG_IntegrationTest, CI, Docs] (Disaggregated): P5e - Magma's named-b…
Swung0x48 Sep 18, 2026
e5b7402
[Docs] (Disaggregated): P5e ID-120 - contract amendment 8's sticky-fo…
Swung0x48 Sep 18, 2026
97a6a46
Merge branch p5e/gl into feat/disaggregated (P5e gl)
Swung0x48 Sep 18, 2026
72bc426
[MG_Test] (Disaggregated): P5e wave 3 - the strict lane's expected-ma…
Swung0x48 Sep 18, 2026
985ae62
[MG_Backend, MG_Pipe] (Disaggregated): P5e - throw both run-ahead con…
Swung0x48 Sep 18, 2026
2d03565
[MG_Impl, MG_Remote, MG_Test] (Disaggregated): P5e ra2 - a barriered …
Swung0x48 Sep 18, 2026
f286548
[MG_Pipe, MG_Impl, MG_IntegrationTest, CI, Docs] (Disaggregated): P5e…
Swung0x48 Sep 18, 2026
efe58ea
[MG_Backend, MG_Pipe, MG_Impl, Docs] (Disaggregated): P5e ra2 ID-136 …
Swung0x48 Sep 18, 2026
25fba0d
Merge branch p5e/flip into feat/disaggregated (P5e: run-ahead armed)
Swung0x48 Sep 18, 2026
05cb47a
[Docs] (Disaggregated): P5e wave 3 - strict 硬绿、run-ahead 武装、设备矩阵写回
Swung0x48 Sep 18, 2026
5c007b2
[Docs] (Disaggregated): P5e - 渲染距离 32 的对照,inproc 与 monolith 齐平
Swung0x48 Sep 18, 2026
a71adc2
[Docs] (Disaggregated): P5e 进度全量更新 — 落地内容表、开放项、裁定索引与阶段报告
Swung0x48 Sep 19, 2026
ff9b798
[Docs] (Disaggregated): ROADMAP 的 P5e 行只改过状态格,其余三格仍是开工前的计划
Swung0x48 Sep 19, 2026
0f37511
[CI, MG_Test] (Disaggregated): P5e ID-122 - E1 对照的两个遮蔽性缺陷,以及它真正的病灶
Swung0x48 Sep 19, 2026
f23fbc1
[Docs] (Disaggregated): P5e 收官 — 出口门逐条跑过,附一条具名未决
Swung0x48 Sep 19, 2026
2acea1b
[Docs] (Disaggregated): P6 计划与契约草稿;工作笔记从本地目录移进仓库
Swung0x48 Sep 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .github/workflows/apk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ on:
- dev
- Feat/Backend-Direct-GLES
- Feat/Backend-Direct-Vulkan
# TEMPORARY, remove before merging the MGPipe work into dev: the disaggregation
# branch runs the full lane on every push so a phase's landing is not gated on
# someone remembering to dispatch the workflow by hand.
- feat/disaggregated
workflow_dispatch:

jobs:
Expand Down Expand Up @@ -61,6 +65,8 @@ jobs:
uses: android-actions/setup-android@v4
with:
accept-android-sdk-licenses: false
packages: platform-tools
cmdline-tools-version: 13114758

- name: Accept Android SDK licenses
run: yes | sdkmanager --licenses >/dev/null
Expand Down Expand Up @@ -293,6 +299,8 @@ jobs:
uses: android-actions/setup-android@v4
with:
accept-android-sdk-licenses: false
packages: platform-tools
cmdline-tools-version: 13114758

- name: Accept Android SDK licenses
run: yes | sdkmanager --licenses >/dev/null
Expand Down Expand Up @@ -368,6 +376,8 @@ jobs:
uses: android-actions/setup-android@v4
with:
accept-android-sdk-licenses: false
packages: platform-tools
cmdline-tools-version: 13114758

- name: Accept Android SDK licenses
run: yes | sdkmanager --licenses >/dev/null
Expand Down
1,964 changes: 1,960 additions & 4 deletions .github/workflows/test.yml

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@
[submodule "include/ska"]
path = include/ska
url = https://github.com/MobileGL-Dev/flat_hash_map.git
[submodule "3rdparty/flatbuffers"]
path = 3rdparty/flatbuffers
url = https://github.com/google/flatbuffers.git
1 change: 1 addition & 0 deletions 3rdparty/flatbuffers
Submodule flatbuffers added at 7e1630
245 changes: 245 additions & 0 deletions CMakeLists.txt

Large diffs are not rendered by default.

236 changes: 235 additions & 1 deletion MobileGL/Config.h

Large diffs are not rendered by default.

197 changes: 197 additions & 0 deletions MobileGL/ConfigLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
// End of Source File Header

#include "Config.h"
#if MOBILEGL_PIPE_PUSH
// For kMGPipeSubsystemsMigratedAtP5e, the push build's PipePush default (the P2, P3a and P4a
// constants beside it are the phase-by-phase controls, not the default). Push-only, so the
// pull build's translation unit is unchanged.
#include <MG_Pipe/MGPipe.h>
#endif

#include <cerrno>
#include <cstdlib>
Expand All @@ -19,6 +25,15 @@ namespace MobileGL::MG_Config {
// Zero/default-initialized at static-init time (all fields have constexpr-friendly
// defaults), so it is safe to read even if MG_ConfigLoader::Init has not run yet.
FeaturesTable Features;
#if MOBILEGL_BUILD_DISAGGREGATED
// Same contract, and for the same reason: MG_Backend::Init() reads Transport, and a
// build order that put it before MG_ConfigLoader::Init() must see Monolith rather than
// a torn enum. Defined only here - in a pull build Config.h makes Transport a constexpr
// and there is nothing to define.
TransportMode Transport = TransportMode::Monolith;
String TransportEndpoint;
IpcTable Ipc;
#endif
} // namespace MobileGL::MG_Config

namespace MobileGL::MG_ConfigLoader {
Expand Down Expand Up @@ -159,6 +174,38 @@ namespace MobileGL::MG_ConfigLoader {
return static_cast<Uint32>(parsedValue);
}

// Same contract as QueryEnvUint32, over 64 bits and accepting an explicit 0x prefix: the
// one consumer is a subsystem BITMASK, and a bitmask written in decimal is unreadable.
// Decimal otherwise - never strtoull's base 0, whose "leading zero means octal" rule
// silently read MOBILEGL_PIPE_PUSH=010 as 8 - and a '-' anywhere is rejected rather than
// wrapped, which strtoull would otherwise do without complaint (-1 -> every bit set).
inline Uint64 QueryEnvUint64(const String& key, Uint64 defaultValue) {
auto it = acceptedEnvVariablesMap->find(key);
if (it == acceptedEnvVariablesMap->end()) {
return defaultValue;
}

const String& value = it->second;
const char* text = value.c_str();
int base = 10;
if (value.size() > 2 && text[0] == '0' && (text[1] == 'x' || text[1] == 'X')) {
text += 2;
base = 16;
}
char* parseEnd = nullptr;
errno = 0;
const bool negative = value.find('-') != String::npos;
const unsigned long long parsedValue = negative ? 0 : std::strtoull(text, &parseEnd, base);
if (negative || parseEnd == text || *parseEnd != '\0' || errno == ERANGE) {
MGLOG_W("Config: Ignoring invalid env variable %s='%s'; expected a non-negative integer "
"(decimal, or 0x-prefixed hexadecimal), using default %llu",
key.c_str(), value.c_str(), static_cast<unsigned long long>(defaultValue));
return defaultValue;
}

return static_cast<Uint64>(parsedValue);
}

inline void InitFeatures() {
auto& features = MG_Config::Features;
features.DisableTimerQuery = QueryEnvFlag("MOBILEGL_DISABLE_TIMERQUERY");
Expand Down Expand Up @@ -207,6 +254,40 @@ namespace MobileGL::MG_ConfigLoader {
features.EsprytWidenPacked16Storage =
QueryEnvQuirkOverride("MOBILEGL_ESPRYT_WIDEN_PACKED16_STORAGE");
features.MagmaPrimGenQueryReroute = QueryEnvQuirkOverride("MOBILEGL_MAGMA_PRIMGEN_QUERY_REROUTE");
// MGPipe. Nothing here needs adding to an allow-list: InitializeAcceptedEnvVariables
// accepts every MOBILEGL_ / LIBGL_ prefixed variable in the environment, so a name
// that starts with MOBILEGL_ is visible to these queries by construction.
#if MOBILEGL_PIPE_PUSH
// A push build with the knob unset runs every subsystem migrated so far, so the
// shipped path is the one the gates measure; MOBILEGL_PIPE_PUSH=0 in the
// environment is the all-subsystems-pull control that reproduces P1 exactly, and
// kMGPipeSubsystemsMigratedAtP3a (0x1ff) is the phase-by-phase control - P4a's four
// subsystems off, everything P3a landed still on.
features.PipePush = QueryEnvUint64("MOBILEGL_PIPE_PUSH", MG_Pipe::kMGPipeSubsystemsMigratedAtP5e);
#else
// Meaningless in a pull build: there is nothing to push. Config.h documents 0 as
// "pull everything" and that stays literally true.
features.PipePush = QueryEnvUint64("MOBILEGL_PIPE_PUSH", 0);
#endif
features.PipeVerify = QueryEnvFlag("MOBILEGL_PIPE_VERIFY");
#if MOBILEGL_PIPE_PUSH
// Defaults ON: read as a tri-state so only an explicitly falsy value turns it off.
features.PipeVerifyFatal =
QueryEnvQuirkOverride("MOBILEGL_PIPE_VERIFY_FATAL") != MG_Config::QuirkOverride::ForceOff;
QueryEnvVariable("MOBILEGL_PIPE_VERIFY_CORRUPT", features.PipeVerifyCorrupt, "");
QueryEnvVariable("MOBILEGL_PIPE_POISON_OMIT", features.PipePoisonOmit, "");
features.PipeHandleAbaControl = QueryEnvFlag("MOBILEGL_PIPE_HANDLE_ABA_CONTROL");
#endif
features.PipeStats = QueryEnvFlag("MOBILEGL_PIPE_STATS");
// Defaults ON, so the flag has to be read as a tri-state rather than as a plain
// truthy check: unset must keep the memos, and only an explicitly falsy value may
// drop them.
features.PipeLegacyMemos =
QueryEnvQuirkOverride("MOBILEGL_PIPE_LEGACY_MEMOS") != MG_Config::QuirkOverride::ForceOff;
features.PipeTexelRetainMb = QueryEnvUint32("MOBILEGL_PIPE_TEXEL_RETAIN_MB", 0, 0, 4096);
features.PipeIndexMirrorMb = QueryEnvUint32("MOBILEGL_PIPE_INDEX_MIRROR_MB", 64, 0, 4096);
features.PipeStatsPeriod = QueryEnvUint32("MOBILEGL_PIPE_STATS_PERIOD", 120, 1, 1000000);
QueryEnvVariable("MOBILEGL_PIPE_STATS_FILE", features.PipeStatsFile, "");
}

inline void InitBackendType() {
Expand All @@ -225,12 +306,128 @@ namespace MobileGL::MG_ConfigLoader {
#undef ENTRY
}

#if MOBILEGL_BUILD_DISAGGREGATED
// MOBILEGL_TRANSPORT = monolith | inproc | spawn | unix:<path> | pipe:<name>
// (ARCHITECTURE.md:583). Shaped after InitBackendType above: an exact-name table, then
// one fallback that names what it did instead. The two prefixed forms are the only
// reason this is not literally that function's ENTRY macro.
//
// spawn / unix: / pipe: PARSE AND THEN REFUSE. They are P6's, and the refusal is NAMED
// rather than silent, because the failure this avoids is a P6 lane that set
// MOBILEGL_TRANSPORT=spawn, fell back to monolith, and went green on the wrong arm.
// The mode is left at Monolith so nothing half-initializes.
inline void InitTransport() {
String value;
QueryEnvVariable("MOBILEGL_TRANSPORT", value, "monolith");
String lowered = value;
std::transform(lowered.begin(), lowered.end(), lowered.begin(),
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });

MG_Config::TransportEndpoint.clear();
if (lowered.empty() || lowered == "monolith") {
MG_Config::Transport = MG_Config::TransportMode::Monolith;
return;
}
if (lowered == "inproc") {
MG_Config::Transport = MG_Config::TransportMode::InProcess;
MGLOG_I("Config: MOBILEGL_TRANSPORT=inproc - the MGPipe record stream crosses a real "
"ring to an apply thread");
return;
}
// The three P6 forms. Recognised precisely, so the diagnostic can say "not yet"
// rather than "unknown", which are different bugs on the operator's side.
if (lowered == "spawn" || lowered.compare(0, 5, "unix:") == 0 ||
lowered.compare(0, 5, "pipe:") == 0) {
MGLOG_E("Config: MOBILEGL_TRANSPORT='%s' names a transport P6 implements and P5 does "
"not; staying on monolith. This run is NOT a split run.",
value.c_str());
MG_Config::Transport = MG_Config::TransportMode::Monolith;
return;
}
MGLOG_W("Config: Ignoring invalid env variable MOBILEGL_TRANSPORT='%s'; expected "
"monolith|inproc|spawn|unix:<path>|pipe:<name>, using monolith",
value.c_str());
MG_Config::Transport = MG_Config::TransportMode::Monolith;
}

// The MOBILEGL_IPC_* family (Config.h IpcTable). Parsed unconditionally rather than only
// when Transport != Monolith: a knob that silently means nothing on one arm of an A/B is
// how an A/B stops being one, and the ranges below are the diagnostics.
inline void InitIpc() {
auto& ipc = MG_Config::Ipc;
QueryEnvVariable("MOBILEGL_IPC_SERVER_PATH", ipc.ServerPath, "");
// Both ring floors are 1 MiB, not 0: a ring caps ONE record at half its size, and
// the catalogue's largest fixed payload (MGPFramebufferState, 304 bytes) plus a
// create_shader_state archive already needs far more than a toy ring. The ceilings
// are sanity, not policy.
ipc.RingMb = QueryEnvUint32("MOBILEGL_IPC_RING_MB", 8, 1, 1024);
ipc.StageMb = QueryEnvUint32("MOBILEGL_IPC_STAGE_MB", 32, 1, 4096);
ipc.SpinUs = QueryEnvUint32("MOBILEGL_IPC_SPIN_US", 50, 0, 1000000);
// 0 is admitted ON PURPOSE and is the negative control of exit gate E3(a): it turns
// the persistent-map push OFF, and PersistentCoherentMapScenario must go red.
ipc.PersistentBlockKb = QueryEnvUint32("MOBILEGL_IPC_PERSISTENT_BLOCK_KB", 64, 0, 65536);
// Whole-range push is the 0 arm; with it on (default) only blocks whose
// xxHash64 changed since the last push are shipped.
ipc.PersistentHashSuppress = QueryEnvUint32("MOBILEGL_IPC_PERSISTENT_HASH_SUPPRESS", 1, 0, 1);
ipc.BatchWaits = QueryEnvUint32("MOBILEGL_IPC_BATCH_WAITS", 1, 0, 1);
// The verify harness compares the pushed block against the applier per verb; a
// batched queue lets the comparer read a supplied field mid-apply, which is a
// torn read rather than a divergence. The batch is therefore off whenever the
// shadow comparer is armed.
if (MG_Config::Features.PipeVerify) ipc.BatchWaits = 0;
// 2 is the only tier P5 implements (R-6). 0 and 1 parse here and are refused at the
// point of use, which is where the "P11" in the message belongs.
ipc.AdoptTier = QueryEnvUint32("MOBILEGL_IPC_ADOPT_TIER", 2, 0, 2);
ipc.VerbBarrier = QueryEnvUint32("MOBILEGL_IPC_VERB_BARRIER", 1, 0, 1);
// P5e (MG_Remote/CONTRACT-P5E.md §1). The wait rule's A/B, parsed here like every
// other IPC knob and armed only where the server publishes kCapRunAheadApply.
ipc.RunAhead = QueryEnvUint32("MOBILEGL_IPC_RUN_AHEAD", 1, 0, 1);
// ... and forced OFF by the verify harness for BatchWaits' reason, one step further:
// run-ahead's whole point is that the client stops filling gPipeInputs for an
// unbarriered record, and the comparator has nothing left to compare when it does.
if (MG_Config::Features.PipeVerify) ipc.RunAhead = 0;
// The present credit (ruling 4). 1 is one frame of overlap; 8 is the ceiling because a
// deeper queue buys nothing on a CPU-bound client and pays for it in latency. 0 is NOT
// admitted: a credit of zero would mean "publish no present at all".
ipc.PresentCredit = QueryEnvUint32("MOBILEGL_IPC_PRESENT_CREDIT", 1, 1, 8);
ipc.StrictErrors = QueryEnvFlag("MOBILEGL_IPC_STRICT_ERRORS");
ipc.Audit = QueryEnvFlag("MOBILEGL_IPC_AUDIT");
QueryEnvVariable("MOBILEGL_IPC_SERVER_AFFINITY", ipc.ServerAffinity, "auto");

if (MG_Config::Transport == MG_Config::TransportMode::Monolith) return;
// One line, on the arm where these numbers decide behaviour, because every one of
// them is a number a bug report has to quote.
MGLOG_I("Config: IPC ring=%uMiB stage=%uMiB spin=%uus persistent-block=%uKiB "
"adopt-tier=%u verb-barrier=%u run-ahead=%u present-credit=%u strict=%d "
"audit=%d affinity='%s'",
ipc.RingMb, ipc.StageMb, ipc.SpinUs, ipc.PersistentBlockKb, ipc.AdoptTier,
ipc.VerbBarrier, ipc.RunAhead, ipc.PresentCredit,
static_cast<int>(ipc.StrictErrors), static_cast<int>(ipc.Audit),
ipc.ServerAffinity.c_str());
if (ipc.VerbBarrier == 0) {
MGLOG_W("Config: MOBILEGL_IPC_VERB_BARRIER=0 is the R-1 NEGATIVE CONTROL and is "
"expected to fail: the client still pulls 31 of 63 PipeInputs fields from a "
"live GLContext, so an unbarriered queue lets the server read future values");
}
if (ipc.PersistentBlockKb == 0) {
MGLOG_W("Config: MOBILEGL_IPC_PERSISTENT_BLOCK_KB=0 is the E3(a) NEGATIVE CONTROL: "
"the persistent-map push is OFF and a coherent-map scenario must go red");
}
}
#endif

void Init() {
MGLOG_D("Loading configuration from environment variables...");
InitializeAcceptedEnvVariables();

InitBackendType();
InitFeatures();
#if MOBILEGL_BUILD_DISAGGREGATED
// After InitFeatures, so the one line InitIpc logs is the last word on this run's
// configuration, and before the accepted-env map is destroyed just below.
InitTransport();
InitIpc();
#endif

// Destroy the map since we won't need it anymore
acceptedEnvVariablesMap.reset();
Expand Down
19 changes: 19 additions & 0 deletions MobileGL/Init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <MG_Impl/GLImpl/Sync/GL_Sync.h>
#include <MG_Impl/GLImpl/Query/GL_Query.h>
#include <MG_Util/Async/ShaderCompilePool.h>
#include <MG_Util/Metrics/PipeStats.h>
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
#include <MG_State/GLState/ProgramState/ProgramTranslationCache.h>
#include <MG_Util/ShaderTranspiler/TranslationCache.h>
Expand All @@ -42,6 +43,20 @@ namespace MobileGL {
if (logLifecycle) {
MGLOG_I("MobileGL closing...");
}
#if MOBILEGL_BUILD_DISAGGREGATED
// P5: the split roles come down FIRST - ARCHITECTURE.md:537's order puts the whole
// of it before MobileGL::Destroy(), and this function IS MobileGL::Destroy. A no-op
// in a monolith RUN; absent from a monolith BUILD, because G1 admits no new pull
// symbol and no resized one (the first version called it unconditionally and moved
// DestroyImpl by 32 bytes). See BackendObjects.h for why the position rather than
// the call is the load-bearing part.
MG_Backend::ShutdownSplitRoles();
#endif
// Before any subsystem the counters name goes away, and before the last frame's
// numbers can be lost: emits the final summary line and, when
// MOBILEGL_PIPE_STATS_FILE is set, the JSON dump. A no-op when the counters are
// off, and idempotent.
MG_Util::PipeStats::Shutdown();
// First, before anything else is torn down. In-flight compile/link jobs own
// their own inputs and are safe against everything below EXCEPT glslang's
// process globals and the TShader/TProgram objects hanging off pGLContext,
Expand Down Expand Up @@ -102,6 +117,10 @@ namespace MobileGL {
MGLOG_I("Initializing MobileGL...");
MG_ConfigLoader::Init();
MGLOG_I("Config loaded");
// Immediately after the config load and before anything can count: the MGPipe
// boundary counters latch their enable flag here, so every counting site in the
// two backends is a load of an already-settled global for the rest of the run.
MG_Util::PipeStats::Init();
MG_State::Init();
MGLOG_D("MG_State initialized");
MG_Backend::Init();
Expand Down
Loading
Loading