swung0x48
|
6d86f9d9be
|
[Fix] (Client): share teardown refusal and gate live wire producers
|
2026-09-16 10:16:11 -04:00 |
|
swung0x48
|
5682f429d0
|
[Fix, Test] (MG_Remote/Client, MG_Impl/Pipe): c1 round 3 - route the five by-address delete sites (B1); observe the client arm (B3); readback requires Status=OK and the exact extent and refuses a pack-PBO read by name (M2/M8/codex11/ID-57); one ERROR->Fatal{ReplyError} rule across the two escapes and an honest ShutDown decline (M4/codex5); InitialBytesNotCarried is role-aware (M5); a routed call during teardown refuses by name not runs the applier (codex4); caps adopted on every make-current (codex12); set_dynamic_state carries an optional blob; PACK_SKIP_IMAGES ignored for a 2-D read (codex6); one tight-size function for production and test (M3/codex10); redcheck 9/9 red each on its own string (M6)
|
2026-09-16 09:11:47 -04:00 |
|
swung0x48
|
02f15bb675
|
[Feat] (MG_Pipe, MG_Remote/Client, MG_Impl/Pipe): R-17 - install the two generated MGPipe tables over the 37 apply entry points, 40 call sites onto the thunks, 37 wire emitters, the reply mailbox, and ID-47/ID-49 readback
|
2026-09-16 07:10:51 -04:00 |
|
swung0x48
|
d628d906d1
|
[Feat] (MG_Remote, P5): land the client role - BackendObject_Remote, the 71-slot emit table, the caps mirror and the verb barrier
|
2026-09-11 16:46:24 -04:00 |
|
swung0x48
|
3089ce8c1a
|
[Merge] (MGPipe, P5): integrate package b1
|
2026-09-11 15:57:13 -04:00 |
|
swung0x48
|
f858841c5f
|
[Fix] (MG_Remote, GLImpl): gate the transform-feedback reconciliation on the transport like every other new site, and give the unwritten writeback wait a named Fatal instead of an empty body
|
2026-09-11 15:48:28 -04:00 |
|
swung0x48
|
950968044c
|
[Fix] (MG_Impl, PipeFill): make buffer_subdata_resident declare the live-host-writes bit - ApplyBufferWrite assigns it, so a silent content record writes false over a live write map
|
2026-09-11 15:48:28 -04:00 |
|
swung0x48
|
0b847d462a
|
[Feat] (GLImpl): mark the pack PBO after a glReadPixels and the capture targets at glEndTransformFeedback, in place of a stall and an unbounded fence wait
|
2026-09-11 14:31:46 -04:00 |
|
swung0x48
|
13827e376f
|
[Feat] (MG_Pipe): give HasLiveHostWrites its producer, decline every persistent-map acquisition under split, and retire the verify pin that was waiting for exactly this
|
2026-09-11 14:31:46 -04:00 |
|
swung0x48
|
d709ef3ee9
|
[Feat] (MGPipe, MG_Util): stamp the poison generations at the server's verb boundary and withdraw what only the client can answer, so a barrier-pulled read is counted as rsp instead of reading fresh by accident
|
2026-09-11 14:12:32 -04:00 |
|
swung0x48
|
420c0dbdfd
|
[Fix, Test] (clientfb): heal a texture's record from its first set_texture_params - a texture born while the family was not live (the context's default textures are constructed before the backend registers its consumer) has no record, so the application's first glTexParameter* on texture 0 was refused, silently latched away before m-1 and the retrace census's one residual after it went loud; the params path now publishes the create, the storage if the texture has any, and then the parameters, the respecify path's own self-heal shape
|
2026-09-09 00:43:38 -04:00 |
|
swung0x48
|
35f3468edb
|
[Fix, Docs] (MG_Pipe, clientfb): latch set_texture_params on acceptance, and two comments - the emitter advanced its version latch before the applier answered, so a refused record (no record for the handle, no consumer) was not re-sent until the next glTexParameter* moved a version (final review m-1, audit F-7): the applier now returns whether the record took the parameters and the emitter latches on true, counting and naming a refusal; Config.h's mask table gains the fourth D-K2 row (0x400 requires 0x800), and MGPipeTypes.h's metadata paragraph says what the applier does (replaces the descriptor whole with the client's sticky OR) instead of "ORed, never replaced"
|
2026-09-09 00:16:35 -04:00 |
|
swung0x48
|
03082b8367
|
[Fix, Test] (clientsp, MG_Pipe, Espryt): produce kMGPipeBindSampler and kMGPipeBindShaderImage where D-A4 places them - nothing set either bit, so ImageBindableHint was always 0, the metadata respecify had no live trigger and the remint pull the hint prevents was neither prevented nor counted (final review M-A); the sampler-view resolution notes SAMPLER, glBindImageTexture's state setter notes SHADER_IMAGE at the bind (so the hint precedes the first sync) and the image walk notes it too, both through a contract door since neither may include TextureEmit.h, and Espryt counts every re-mint of storage it already held as tex-remint-pulls (trp= on the stats line, ROADMAP open question 2's number)
|
2026-09-09 00:09:30 -04:00 |
|
swung0x48
|
a7d56a2fe5
|
[Fix, Test] (MG_Pipe, clientfb, clientsp): retire every emitter's entry at the object's death - the six death helpers freed the slot and told no emitter, so a dead-but-unrecycled texture handle still resolved to the freed ITextureObject* (the allocator's generation moves only at the next hand-out) and the drain list kept the level: glTexImage2D; glDeleteTextures; <any verb> called a virtual on freed memory from the next validate point (final review C-2); the helpers now forward to the texture, renderbuffer, framebuffer, sampler-view and shader-CSO emitters between the wire delete and the free, ResolveTexture refuses a dead slot loudly on IsLive, the sticky-mask producers stamp the generation they write under, and the delete-then-use sequence is pinned for every kind, for a recycled slot, and under MALLOC_PERTURB_ on both backends
|
2026-09-08 23:59:48 -04:00 |
|
swung0x48
|
4bb5e082d3
|
[Fix, Test] (clientfb, MG_Pipe): pass the level a texture respecify redefines - every per-level glTexImage*D and glGenerateMipmap grow took the applier's whole-resource arm and dropped the texture's every pending upload, including a level the applier had accepted at an earlier verb with the client's dirty flag already clear, so L0; draw(other); L1; draw(T) read a black level 0 on the handle arm (final review C-1); the storage entry points now state the scope (one level, a chain cut, the whole resource), the emitter builds wire's MGPRespecifiedLevel with the drain's packed target, a per-level call is never deduped on the descriptor, and the applier drops a named level whether or not the descriptor moved
|
2026-09-08 23:55:44 -04:00 |
|
swung0x48
|
a6eb3c706f
|
[Docs] (Pipe): the record-field -> setter -> shutter table for the seven P4a dirty bits at the shutter block, and the bit-11 note that an attached object's storage redefinition moves it
|
2026-09-08 20:29:55 -04:00 |
|
swung0x48
|
0b1a540e91
|
[Fix, Test] (Pipe): mix the program identity into the shader-image shutter's plain arm - the per-program counter is equal across programs and against no program, so a switch never moved the image window and a buffer image never reached set_shader_images (P4a seam F-2, esprytdraw SD-4)
|
2026-09-08 20:28:56 -04:00 |
|
swung0x48
|
0f82c9d757
|
[Fix, Test] (Pipe): mix the program in use and the params aggregate into the sampler-view shutter - set_sampler_views is resolved for the current program and a glUseProgram alone never re-emitted it, so a texture bound to an empty slot under one program was never synced for the next (P4a seam F-1 / F-1b)
|
2026-09-08 20:28:29 -04:00 |
|
swung0x48
|
4399976942
|
[Fix] (Espryt, Pipe): carry the bound sampler state's CSO handle into the sampler twin's sync and mix the texture-bind generation into the shader-image shutter - the twin resolved a content-addressed record by an identity handle, and an image re-bind that only moved the level never re-emitted the set
|
2026-09-08 18:46:58 -04:00 |
|
swung0x48
|
150bc4292a
|
[Fix, Test] (MG_Impl, Pipe): gate the four P4a families on D-K2's dependency bits as well - Espryt refuses bit 10 without bit 11 or bit 7, but the client had already emitted and the acceptance-cleared level flags left its legacy arm nothing to upload
|
2026-09-08 18:35:01 -04:00 |
|
swung0x48
|
f96f22ebbd
|
[Fix] (MG_Pipe, MG_Impl): gate the four P4a families on a backend having registered MGPipeResourceOps - Magma emitted, the applier accepted, and the acceptance-cleared dirty flags left its legacy path nothing to upload
|
2026-09-08 17:37:37 -04:00 |
|
swung0x48
|
5663e0ca32
|
[Docs] (Pipe): restate what the records-reach-the-applier predicate is for now that the constant is set - the A/B arm it keeps compilable, and the two places a discarded call may not be treated as an accepted one
|
2026-09-08 16:52:11 -04:00 |
|
swung0x48
|
c134634919
|
[Fix] (GLImpl, Pipe): republish a texture parameters when a write lands on its built-in sampler and give every DSA entry point that hands a framebuffer over by name a record for it
|
2026-09-08 16:52:11 -04:00 |
|
swung0x48
|
cc1e68f136
|
[Fix] (Pipe, State): take the texture and framebuffer families through the contract own birth hooks, wire the texture subsystem bit, hand the applier the region tail it was promised and clear a level dirty flag only where the record was accepted
|
2026-09-08 16:52:11 -04:00 |
|
swung0x48
|
fcfdc41380
|
[Feat, Test] (Pipe): wire the framebuffer subsystem bit and pin the resolved read surface, the sticky bind mask, the level-shadow strides and the union-box/region-list invariant
|
2026-09-08 16:52:11 -04:00 |
|
swung0x48
|
b5f4660bcb
|
[Feat] (Pipe): push the bound framebuffers with a resolved read surface, inline attachment formats and a content hash that covers the draw-buffer array
|
2026-09-08 16:52:10 -04:00 |
|
swung0x48
|
0cd0a0846f
|
[Feat] (Pipe, State): mint a {slot, gen} handle for every texture and renderbuffer and publish its create, respecify, parameters and accumulated sub-data as pipe calls
|
2026-09-08 16:52:10 -04:00 |
|
swung0x48
|
d6e52f75c3
|
[Fix] (Pipe): count the sampler cache's unaccountable releases and its referenced evictions rather than asserting them, and state what a shared reference count, an over-capacity cache and the per-unit reconciliation really cost
|
2026-09-08 15:33:42 -04:00 |
|
swung0x48
|
ac09e5b37a
|
[Fix] (Pipe): key the composite resolver's memo on the context as well as the pipeline's GL name - the resolver is a process singleton while GL names are per context, so a make-current released the other context's live composite
|
2026-09-08 15:33:42 -04:00 |
|
swung0x48
|
820d1a60b9
|
[Fix] (Pipe): stop a make-current disarming the composite resolver's release path - the memo's freshness and the slot's release obligation were one flag, so after the first Reset no signature move ever spoke a delete
|
2026-09-08 15:24:22 -04:00 |
|
swung0x48
|
f0f8cab682
|
[Fix] (Pipe): give the program family its birth-hook entry point and publication latch, invalidate the global-constants key whenever a create_shader_state is re-issued, and count a truncated module tail instead of asserting it
|
2026-09-08 15:24:22 -04:00 |
|
swung0x48
|
b2edca2728
|
[Fix] (Pipe): give the sampler family the birth-hook entry points the contract declares, take the publication latch where its creates go out, and reference-count cache entries so an LRU eviction can never take a handle a standing record still names
|
2026-09-08 15:24:22 -04:00 |
|
swung0x48
|
ccde29064a
|
[Test] (Pipe): wire the sampler and program subsystems and pin the padding-proof CSO identity, the program-resolved unit sets, the linked-snapshot stage mask and the composite band's single release
|
2026-09-08 15:24:22 -04:00 |
|
swung0x48
|
bc2aad2176
|
[Feat] (Pipe): resolve a program pipeline into one shader CSO out of the reserved composite band and release it exactly once
|
2026-09-08 15:20:36 -04:00 |
|
swung0x48
|
5a3e9f0857
|
[Feat] (Pipe): publish a program's per-stage SPIR-V and reflection archive as a shader CSO and its default uniform block as global constants
|
2026-09-08 15:20:36 -04:00 |
|
swung0x48
|
1534cf3784
|
[Feat] (Pipe): content-address sampler states, mint one sampler view per texture and push the three unit sets behind their own content hashes
|
2026-09-08 15:20:36 -04:00 |
|
swung0x48
|
9ea44389e7
|
[Fix, Test] (Pipe): widen the two shutters that cannot see their own subject rather than gate their emitters on a second bit - glBindSampler moves only bit 12's generation, and GetCurrentProgram() is null for the whole life of a bound separable pipeline, so bind_sampler_states and the entire program family under-fired
|
2026-09-08 14:30:03 -04:00 |
|
swung0x48
|
32033d6993
|
[Fix] (Pipe): land the birth half of the P4a client API behind a publication latch both halves read, gate every emitter on its family's wired constant, raise the sampler view's death notice and count the shader composite band apart from the ordinary slots
|
2026-09-08 13:13:21 -04:00 |
|
swung0x48
|
08192d7266
|
[Feat] (Pipe): land the P4a contract - the resource target enum, the framebuffer target byte, the texture params' builtin sampler, the sampler-parameter field table, four subsystem bits, seven dirty arms and the program archive codec
|
2026-09-08 12:18:29 -04:00 |
|
swung0x48
|
fde5fda3b5
|
[Fix] (MG_Impl): never destroy the four remaining MGPipe singletons - the vertex-input emitter is on ~VertexArrayObject own death path since C-1 and answered RecordIsPublished out of a freed latch vector
|
2026-09-08 08:20:55 -04:00 |
|
swung0x48
|
6515c8e6ae
|
[Fix] (MG_Backend, MG_Impl): give the MGPipe input blocks leak-at-exit storage - gPipeInputs and the two verify blocks held the last SharedPtr to a deleted-but-bound vertex array, so __run_exit_handlers ran ~VertexArrayObject and ~BufferObject into a pipe and a backend that were already torn down
|
2026-09-08 08:20:55 -04:00 |
|
Swung0x48
|
d54ec57a5d
|
[Fix] (MG_Impl, MG_Pipe): outlive the exit handlers - a frontend object destroyed by __run_exit_handlers reached the slot allocator, the resource tracker and the applier after their own destructors had run
|
2026-09-08 07:33:16 -04:00 |
|
swung0x48
|
0bff6875b3
|
[Fix] (MG_Impl, DirectGLES, scripts): take the cheap review minors - the stale validate-point comment, G7's whole-log trip grep and missing INT/TERM traps, G5's CRLF stdout, and the dangling-twin invariant at its member
|
2026-09-08 07:04:20 -04:00 |
|
swung0x48
|
707bced438
|
[Fix] (MG_Impl, MG_Pipe, MG_IntegrationTest): close the four cross-package rows nobody claimed - symmetric vertex-input pairing asserts, the counter G10 reads, and the buffer ABA's Magma-only evidence
|
2026-09-08 07:04:19 -04:00 |
|
swung0x48
|
433f51a065
|
[Fix] (MG_Impl, MG_Test): publish the create a respecify's handle never got - a buffer born while the resource op table was unregistered had every later respecify refused and drew through id 0 with no diagnostic
|
2026-09-08 07:00:06 -04:00 |
|
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
|
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 |
|