swung0x48
78ff014547
[Fix] (MG_Impl, MG_State, DirectGLES): give the vertex-elements CSO a backend-neutral death path - the client minted every VAO's slot and only Espryt ever freed one, so under Magma each VAO leaked a slot and a 1.3 KB applier record for the life of the process
2026-09-08 06:49:59 -04:00
swung0x48
3e298c9ad1
[CI] (Pipe): add FlushPendingRangesNow's three-tier drain to G5's byte-identical set
2026-09-08 06:02:36 -04:00
swung0x48
fd6b5bdbf2
[Fix] (Pipe): restore and rebuild on every exit path of the vertex-input negative control, and keep its logs out of the repository
2026-09-08 06:02:36 -04:00
swung0x48
8d3cd67b94
[CI] (Pipe): select the P3a subsystem and map-persistent lanes in the only job that unpacks a push build
2026-09-08 06:02:36 -04:00
swung0x48
f6c7dcd1b6
[Fix] (Pipe): raise the four CSO stats lanes to the P3a subsystem mask so they stop asserting on a configuration nothing ships
2026-09-08 06:02:36 -04:00
swung0x48
4ad88214cd
[Test] (Pipe): count the map-persistent round trips over a re-specified adopted arena in both arms, now that the VAO rebind fix is in the branch
2026-09-08 06:02:36 -04:00
swung0x48
4412cef00c
[CI] (Pipe): gate that the buffer pool, the deferred-release drain and the three rings did not move
2026-09-08 06:02:36 -04:00
swung0x48
6e9943b36e
[Test] (Pipe): assert a regrown adopted store costs one map-persistent round trip per storage definition, not one per draw
2026-09-08 06:02:36 -04:00
swung0x48
0cb46fe2bd
[Test] (Pipe): reproduce the buffer handle ABA through public GL and prove the pre-rekey guards are what stops it
2026-09-08 06:02:36 -04:00
swung0x48
83302ca247
[Test] (MG_Test): scope the pipe resource op table in BufferTest's fixture the way it scopes BufferBackendOps - a push build installs both at bring-up, and these 86 cases are the BufferBackendOps arm's
2026-09-08 06:00:46 -04:00
swung0x48
3c55e02797
[Fix] (Espryt): republish the live shadow base on the ensure path so a lazily twinned store is not left with none for the readers that hold no frontend object
2026-09-08 05:27:19 -04:00
swung0x48
75ea7ee2df
[Fix] (Espryt): ask the frontend object whether the shadow the ensure path is about to upload holds bytes, instead of a descriptor no content call refreshes
2026-09-08 05:27:03 -04:00
swung0x48
13b380feda
[Fix] (Espryt): resolve an attribute's pushed vertex buffer by its attribute index, not by the GL binding point the wire attribute carries
2026-09-08 05:26:48 -04:00
swung0x48
ed83424c75
[Fix, Test] (Espryt): pin that a live host map keeps the handle arm's draw probe dirty and that a backwards generation is refused
2026-09-08 04:52:15 -04:00
swung0x48
df055eab13
[Fix] (Espryt): treat an unbound vertex-elements record as a memo miss and record the applier-reset serial rule the twin's gate depends on
2026-09-08 04:52:15 -04:00
swung0x48
511b3752c0
[Fix] (Espryt): make the vertex-input bit require the resource bit and give both new subsystems a named verdict when the knobs leave no arm
2026-09-08 04:52:15 -04:00
swung0x48
b28058f37c
[Fix] (Espryt): walk all 32 attribute slots so a vertex-elements record that shrinks still disables the arrays it dropped
2026-09-08 04:52:15 -04:00
swung0x48
14137bc9a6
[Fix] (Espryt): refuse a backwards generation and an out-of-range slot in the handle-keyed GetOrCreate instead of adopting them
2026-09-08 04:52:15 -04:00
swung0x48
39933613ae
[Fix] (Espryt): re-read the client's shadow base at every use and forget it at the two events that free the allocation it names
2026-09-08 04:52:15 -04:00
swung0x48
816373ffd9
[Fix] (Espryt): keep the live-map question in the handle arm's draw-clean probe instead of a record field P3a pins false
2026-09-08 04:52:15 -04:00
swung0x48
7047331a41
[Fix] (Espryt): clamp the handle readback to the backend store past its offset, memoise the buffer handle lookup, and write down the two contracts the ops owed their callers
2026-09-08 04:52:15 -04:00
swung0x48
7ef8cb93fc
[Fix] (Espryt): leave FlushPendingRangesNow as this file's only definition and call the one shared range ladder from both arms
2026-09-08 04:52:15 -04:00
swung0x48
b97a228cea
[Fix] (Espryt): carry the adopted-store respecify's buffer-id generation bump into the handle arm as well
2026-09-08 04:52:15 -04:00
swung0x48
3840cf734b
[Test] (Espryt): extend the slot-table suite to the buffer kind and pin that its death crosses as resource_destroy
2026-09-08 04:52:15 -04:00
swung0x48
68db6db7f8
[Refactor] (Espryt): key the narrowed fp64 vertex stream on the buffer's handle instead of its lifetime id
2026-09-08 04:52:15 -04:00
swung0x48
cd05de504e
[Refactor] (Espryt): drive the driver VAO from the pushed vertex-elements record and retire the wrapping index-slot version and its identity patch
2026-09-08 04:52:15 -04:00
swung0x48
ce24e2a734
[Refactor] (Espryt): answer a readback through the reverse channel and bump the mutation epoch after it, never before
2026-09-08 04:52:15 -04:00
swung0x48
4e44650199
[Refactor] (Espryt): take the buffer ops by handle and payload instead of by frontend object reference
2026-09-08 04:52:15 -04:00
swung0x48
9951961d9c
[Refactor] (Espryt): give the buffer resource its own {slot, gen} table instead of hanging it off the frontend object
2026-09-08 04:52:15 -04:00
swung0x48
31e370bed5
[Test] (Pipe): pin the base instance across a make-current and both of the validate point's exits, the record surviving one, the draw-time bind mask, the create-destroy pairing latch, and the bind-mask table against literals
2026-09-08 04:47:51 -04:00
swung0x48
0c55560510
[Fix] (Pipe, State): look the resource handle up on the content paths instead of minting it, publish the bind mask from the two draw-time emitters, pair the destroy with the create's own latch, and state the record-lifetime rule the applier now holds
2026-09-08 04:47:51 -04:00
swung0x48
f11e78b0a4
[Feat] (Pipe, GLImpl): set the pending base instance from the three glDraw*BaseInstance entry points, through a pull-safe macro beside MGP_FILL
2026-09-08 04:47:51 -04:00
swung0x48
d9bde13127
[Fix] (Pipe): stop the tracker's context Reset eating the pending base instance the same call is about to read, and clear it on the validate point's no-context exit too
2026-09-08 04:47:51 -04:00
swung0x48
cc427ec4de
[Test] (Pipe): pin the buffer and vertex-input emitters - every attribute field survives the wire, a bare baseInstance change still emits, and the index-buffer bit ignores unrelated writes
2026-09-08 04:47:51 -04:00
swung0x48
b11bb9650a
[Feat] (Pipe): widen the dirty-surface scan to MG_State so the MGP_NOTE_MUTATION sites stop being outside the gate
2026-09-08 04:47:51 -04:00
swung0x48
14efd6eb24
[Feat] (Pipe): push the bound VAO's format, its vertex buffers with an explicit baseInstance, and its index binding as their own calls
2026-09-08 04:47:51 -04:00
swung0x48
874d1ee77d
[Feat] (Pipe, State): mint a {slot, gen} handle for every buffer object and publish its create, respecify, sub-data, flush, readback and destroy as pipe calls
2026-09-08 04:47:51 -04:00
swung0x48
b9eaa47480
[Build] (Config): bump CoreVersion to 26.9 so GL_VERSION, the POST stamp and the Magma pipeline-cache key follow the 26.09 plugin version
2026-09-08 04:42:02 -04:00
swung0x48
42d43af25b
[Build] (Android): bump the plugin version to 26.09 - versionCode 26090000 + this month's revision count, versionName 26.09.<hash>
2026-09-08 04:41:03 -04:00
swung0x48
12e6bfcf14
[Fix, Test] (Pipe): a make-current is not a teardown - the applier keeps its object records across one, counts every call refused on a record it does not have, advances the two vertex-input serials instead of restarting them at 0, and bounds the slot it grows a record table on
2026-09-08 03:51:21 -04:00
swung0x48
e6452ce948
[Fix] (Pipe): give both blob-carrying record families one Blob rule, and name the wire views the vertex-elements blob actually carries
2026-09-08 03:51:21 -04:00
swung0x48
56366331dc
[Fix] (Pipe): account for DispatchIndirect and Query in Coverage.def's target-by-target split, re-sort the new emitted row, and name the P3a default mask in ConfigLoader's include comment
2026-09-08 03:51:21 -04:00
swung0x48
355c60b901
[Test] (Pipe): pin the resource record's lifecycle and the buffer sub-data range encoding at both of its bounds
2026-09-08 03:51:21 -04:00
swung0x48
6eb0e675ad
[Feat] (Pipe): apply vertex elements, vertex buffers and the index buffer into the server's own working state
2026-09-08 03:51:21 -04:00
swung0x48
45c8f1a8be
[Feat] (Pipe): apply the resource calls into a per-context slot-indexed record and dispatch them to the backend by handle
2026-09-08 03:51:21 -04:00
swung0x48
5cb826b01e
[Merge] (dev): bring dev@9eae9858 into feat/disaggregated - the adopted-store respecify VAO rebind fix ( d7655247) and the persistent-buffer ordering POST probe
2026-09-08 03:15:31 -04:00
swung0x48
e01c0ccc53
[Feat] (Pipe): land the P3a contract - the handle-shaped resource op table, the applier's resource and vertex-elements records, the two vertex wire views, an explicit baseInstance on set_vertex_buffers, and the first kNeedsAck
2026-09-08 02:43:19 -04:00
swung0x48
c036900d72
[Docs] (Disaggregated): add the Oppo Mali half of the P2 paired A/B - 16 rows per device, Espryt +8-18% and Magma +10-11% per-thread CPU over the pull baseline, plus the harness single-sample pidof kill recorded as a dev-side follow-up
2026-09-08 02:20:24 -04:00
swung0x48
44c2b5cf3a
[Docs] (Disaggregated): record the P2 landing - the five-part gate results, the two-device paired A/B protocol with all 16 Xiaomi rows, DriverBench T1/T2 with the CSO control, the push-side counters, and the 2026-09-08 rule that performance is recorded against the pull baseline rather than gated
2026-09-08 01:40:51 -04:00
swung0x48
738b289df8
[Fix] (Magma, MG_IntegrationTest): drop the fourth ABA-control consumer, which was unreachable, and the scenario comment its own body contradicts
...
- VulkanRenderer::LookupVaoDrawMemo's legacy arm read MG_Config::Features.PipeHandleAbaControl
a fourth time, bypassing the one-question accessor MagmaPipeAbaControlDefeatsIdentity that
55d2af9b's own message says all the control's sites go through. It could never be false
there: the control's early return fires ahead of BOTH arms, so a run that reaches the legacy
compare has the knob off. The compare is unconditional again, with a note saying where the
question is answered and to route through the accessor if that early return is ever narrowed
- which is the trap the dead line was, since narrowing it would have silently restored D18's
retired semantics at this one site.
- HandleRecycleScenario's vertex-array case still said "BOTH the VAO and the buffer are
recycled here so that a key built out of raw addresses matches", which the body has
contradicted since 55d2af9b : both buffers are created before the ABA window and neither is
deleted inside it, deliberately, so that no buffer traffic moves VkBufferManager's
slice-epoch counter inside the window. Only the VAO is recycled, and only its GL name - the
heap block is not handed back, which is why the knob rather than the allocator constructs the
AbaControl arms' collision.
2026-09-08 01:08:51 -04:00