Files
MobileGL/docs/archive/notes/recovered/wf4/part1.md
T

7.3 KiB

P1 pull-site catalogue — every backend read of frontend state

Tree: C:/Users/geekerwan/AndroidStudioProjects/FoldCraftLauncher/MobileGL-disagg, branch feat/disaggregated @ 5635e33f. Scope: MobileGL/MG_Backend/** (.cpp + .h), 55 files, both backends plus the shared BackendObject.h / BackendObject.cpp / Init.cpp. Every file:line below was opened; expressions are verbatim from the tree.

0. Headline counts (measured on THIS tree, not on the vendored inventory)

what count how it was measured
lines containing pGLContext anywhere in MG_Backend 332 grep -rn pGLContext --include=*.cpp --include=*.h
pGLContext-> / pGLContext. member-access sites 278 regex `pGLContext\s*(?:->
lines mentioning pGLContext with no arrow on that line 58 grep -v 'pGLContext->' — matches the design's 58 exactly
distinct GLContext accessors actually called 62 (61 named accessors + one .get()) histogram below
SyncPersistentMappedRange() call sites 20 matches the design's 20
SyncGpuWrites() call sites 6 matches the design's 6
lines declaring/passing SharedPtr<MG_State…> or WeakPtr<MG_State…> 177 (76 in headers, 101 in .cpp) these are the "handle-ify" rows
GetLifetimeId() reads on frontend objects 39
version reads (GetChangeSerial / GetContentVersion / GetVersion) 36
BufferBackendOps touchpoints 17 lines in MG_Backend 2 register calls + 2 tables + register/unregister plumbing
other MG_State:: globals reached by the backends 0 only MG_State::pGLContext; everything else is MG_State::GLState::<type>

0.1 Drift against the vendored inventory — READ THIS FIRST

scripts/data/backend_read_inventory.md:1-30 is a stale, vendored copy (generated by extract_backend_read_inventory.py, which lives in MobileGL-CS, not in this repo). It claims "pGLContext accesses: 293", "SharedPtr<MG_State wire args: 167", "scanned files: 57", "total read points: 477". This tree has 278 arrow sites, 177 SharedPtr lines and 55 scannable files. The design's "293" is therefore an over-count of about 15 relative to the code P1 will actually edit; the "58 non-arrow lines" figure is exact.

Three concrete accessor-level drifts, each of which will bite a mechanical P1 sweep:

drift evidence
GetBoundTransformFeedbackName is a MGPipeInputField (MG_Pipe/generated/PipeFilled.inc:32) and a Coverage.def accessor (MG_Pipe/Coverage.def:34), but no backend reads it any more. Its only readers are the frontend (MG_Impl/GLImpl/Drawing/GL_Drawing.cpp:1562, MG_Impl/GLImpl/Getter/GL_Getter.cpp:2678). It is a dead PipeInputs field. grep for the name over MG_Backend returns nothing
GetBoundTransformFeedbackLifetimeId is read by a backend (DirectVulkan/Renderer/VulkanRenderer.cpp:11219) and is absent from both PipeFilled.inc and Coverage.def. MG_State/GLState/Core.h:441 declares it
HasOpenTransformFeedbackSpan is read by a backend (DirectVulkan/Renderer/VulkanRenderer.cpp:11236) and is absent from both. MG_State/GLState/Core.h:450 declares it

Net: the PipeInputs field set must go 61 → 62 (drop one dead field, add two real ones), and Coverage.def's MGP_COVERAGE_ACCESSOR_LIST must gain the same two rows or gen_pipe.py's coverage join will report them UNMAPPED.

Also note: there is no MobileGL/MG_Pipe/generated/PipeInputs.inc. The file the design means is MobileGL/MG_Pipe/generated/PipeFilled.inc; the 61 is asserted at PipeFilled.inc:92 (static_assert(kMGPipeInputFieldCount == 61, "the PipeInputs field set moved")).

0.2 Accessor histogram (all 278 member-access sites)

accessor sites accessor sites
GetBufferBindingSlot 29 GetPrimitiveRestartIndex 3
IsCapabilityEnabled 29 GetProgramForDispatch 3
GetFramebufferBindingSlot 19 GetProgramObject 3
GetTextureUnitObject 19 GetScissorBox 3
GetBoundVertexArray 12 GetTransformFeedbackProgram 3
GetRenderStateParameters 11 ValidateProgramName 3
GetBufferBindingPoint 9 GetCurrentVertexAttribute 2
GetSamplingResolutionGeneration 9 GetRenderStateParametersVersion 2
GetActiveTextureUnit 8 GetTouchedBufferBindingPointCount 2
GetStencilState 8 GetTransformFeedbackPausedPrimitiveCounter 2
GetImageTextureBinding 7 InvalidateCompileEnv 2
GetProgramForDraw 7 IsTransformFeedbackPaused 2
GetColorMaskIndexed 6 GetBlendColor 1
GetPixelStoreParameters 6 GetBlendEquationIndexed 1
GetTextureContextId 6 GetBlendFuncIndexed 1
RecordError 6 GetBoundTransformFeedbackLifetimeId 1
GetDepthMask 5 GetClampReadColor 1
GetTextureBindGeneration 5 GetClearColor 1
IsTransformFeedbackActive 5 GetClearDepth 1
GetBufferBindingPointCount 3 GetClearStencil 1
GetPatchDefaultInnerLevel 3 GetCullFaceMode 1
GetPatchDefaultOuterLevel 3 GetDepthFunc 1
GetPatchVertices 3 GetDepthRangeIndexed 1
GetPipelineStateVersion 3 GetLineWidth 1
GetLogicOp 1 GetMaxTouchedTextureUnit 1
GetMinSampleShadingValue 1 GetPolygonModeFront 1
GetPolygonOffsetFactor 1 GetPolygonOffsetUnits 1
GetProvokingVertexMode 1 GetTextureObject 1
GetTransformFeedbackCapturedVertices 1 GetTransformFeedbackGeneration 1
GetViewport 1 GetViewportIndexed 1
HasOpenTransformFeedbackSpan 1 IsCapabilityEnabledIndexed 1
.get() (raw context pointer) 1

0.3 Per-file distribution of the 278 sites

file sites
DirectVulkan/Renderer/VulkanRenderer.cpp 130
DirectGLES/DirectGLES.cpp 92
DirectGLES/Managers.cpp 15
DirectVulkan/Renderer/UniformManager.cpp 14
DirectVulkan/DirectVulkan.cpp 12
DirectGLES/MultiDraw.cpp 5
DirectVulkan/Renderer/VkRenderPassManager.cpp 3
DirectGLES/Utils.cpp 2
DirectVulkan/BackendObject_DirectVulkan.cpp 2
DirectVulkan/Renderer/VkTextureManager.cpp 2
DirectVulkan/Renderer/VkClearManager.cpp 1

(DirectGLES/BackendObject_DirectGLES.cpp, DirectGLES/Utils.h, DirectGLES/Managers.h, DirectGLES/DirectGLES.h, DirectVulkan/DirectVulkan.h, DirectVulkan/Renderer/VulkanRenderer.h, .../UniformManager.h, .../VkBufferManager.*, .../VkSamplerManager.cpp, .../VertexInputStateFactory.*, .../ProgramFactory.*, .../PipelineFactory.*, .../FrameContext.*, .../SwapchainObject.*, BackendObject.h/.cpp, Init.cpp contain zero pGLContext member accesses — they reach the frontend only through handles/objects, §2.)


1. The complete site catalogue

Legend for the accessor column: _(non-arrow)_ marks one of the 58 lines that names pGLContext without dereferencing it on that line (null guards, asserts, ternary conditions, the raw-pointer cache, a comment). The verb path column names the verb boundary the site sits under; where a helper serves more than one verb the entry says so.