From 067b1866778945c848c4078f632160e6e1284d7c Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sun, 6 Sep 2026 10:28:06 -0400 Subject: [PATCH] [Docs] (Pipe): say what actually fails to publish a program, a pipeline and a shader dying, instead of naming a scope - the kUnpublishedDestroy note said the three kinds were outside the six D13 scopes explicit destroy to; the tree's reason is sharper and does not depend on reading D13's prose one way or the other: those three have no per-object handle on the wire at all, so their DirectGLES twins are still reclaimed by the backend's own registry teardown - records the brief/tree disagreement in place: D13 says "six kinds" while the Core.cpp line ranges it cites also cover MarkProgram/MarkShaderForDeletion --- MobileGL/MG_Pipe/DirtySurface.def | 35 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/MobileGL/MG_Pipe/DirtySurface.def b/MobileGL/MG_Pipe/DirtySurface.def index fbee04a9..84be476d 100644 --- a/MobileGL/MG_Pipe/DirtySurface.def +++ b/MobileGL/MG_Pipe/DirtySurface.def @@ -40,19 +40,24 @@ // mutation is published inline and needs no shutter at all. // kReverseChannel not state: a write INTO the frontend from the backend's side. // kNoBackendRead no backend read point observes this state at all. -// kExplicitDestroy published by the delete_* call the Track H slice emits when the -// object's last reference drops - an object's DEATH, which no -// generation shutters because there is no longer an object to carry -// one. Only the six object kinds P2 brief D13 scopes Espryt 0b's -// explicit destroy to (buffers, framebuffers, renderbuffers, -// samplers, textures, vertex arrays) may use this answer. +// kExplicitDestroy published by the delete_* / resource_destroy call the Track H slice +// emits when the object's last reference drops - an object's DEATH, +// which no generation shutters because there is no longer an object +// to carry one. Only for a kind that HAS an identity on the wire to +// destroy: the resources and CSOs of PipeCalls.def, which is what P2 +// brief D13 scopes Espryt 0b's explicit destroy to. // kUnpublishedDestroy -// the same event for a kind NO call publishes yet: programs, program -// pipelines and shaders are outside D13's six, so their death reaches -// a backend only through the object's own teardown path. Recorded as -// a hole rather than dressed up as a mechanism that exists - naming -// kExplicitDestroy here would be the same defect the RenderState -// check above exists to stop, one class down in stakes. +// the same event for a kind NOTHING publishes: a program, a program +// pipeline and a shader have no per-object handle on the wire at all +// in P2 - resource_destroy and the delete_* family name resources and +// CSOs - so their DirectGLES twins are still reclaimed by the +// backend's own registry teardown and no frontend call says they +// died. Recorded as a hole rather than dressed up as a mechanism that +// exists; naming kExplicitDestroy here would be the same defect the +// RenderState derivation above exists to stop, one class down in +// stakes. (D13's prose says 'six kinds' while the Core.cpp ranges it +// cites also cover MarkProgram/MarkShaderForDeletion; the tree +// decides, and the tree has no wire object for those three.) // kPulledEveryVerb no shutter exists, and none is needed yet: the PipeInputs field this // writes is in its verb class's may-read mask, so the residual fill copies // it at EVERY verb of that class. A shutter here is a P3/P4 optimisation, @@ -148,9 +153,9 @@ X(BumpTextureBindGeneration, NEW_SAMPLER_VIEWS) \ X(SetNamedTransformFeedbackBinding, NEW_SO_TARGETS) \ /* ---- an object's death: no generation, because there is no longer an object */ \ - /* to carry one. Espryt 0b's delete_* publishes the six kinds D13 scopes it to; */ \ - /* programs, program pipelines and shaders are NOT among them and nothing else */ \ - /* publishes their death, so they answer kUnpublishedDestroy - a recorded hole. */ \ + /* to carry one. Espryt 0b's delete_* / resource_destroy publishes the kinds */ \ + /* that have a handle on the wire; programs, program pipelines and shaders have */ \ + /* none in P2, so nothing publishes theirs - kUnpublishedDestroy, a known hole. */ \ X(MarkBufferObjectForDeletion, kExplicitDestroy) \ X(MarkFramebufferObjectForDeletion, kExplicitDestroy) \ X(MarkProgramForDeletion, kUnpublishedDestroy) \