Commit Graph

  • fee3902472 [Refactor] (Program): stop ProgramObject.h including SpvcSession.h - it names no spirv-cross or SPIRV-Reflect symbol swung0x48 2026-09-05 22:48:48 -04:00
  • da249f30e2 [Refactor] (Program): extract ProgramArtifacts.h - move TypeFacts, ResourceReflection, XfbVarying, LinkArtifacts and SpirvArtifacts to namespace scope with in-class aliases so every existing spelling compiles unchanged; pure move swung0x48 2026-09-05 22:47:07 -04:00
  • 8566a288f8 [Refactor] (Pipe, State): extract MGPipeValueTypes.h - move the render-state, sampler and vertex value types and their enums out of MG_State/GLState so MG_Pipe no longer reaches RenderState.h; pure move, member order and namespaces unchanged swung0x48 2026-09-05 22:52:39 -04:00
  • 2318f6ae44 [Tooling] (Purity): add scripts/symbol_report.py - per-symbol nm/.text attribution between two libMobileGL.so builds swung0x48 2026-09-05 22:51:32 -04:00
  • fe3dc1dde8 [CI] (Purity): add scripts/check_include_closure.py - the -H include-closure gate for the P0.5 headers with an always-on negative control, wired as a unit ctest and the include-graph-check job swung0x48 2026-09-05 22:51:32 -04:00
  • 6672778b80 [Merge] (dev): merge dev@50fb1343 into feat/disaggregated swung0x48 2026-09-05 22:05:41 -04:00
  • 6e0e3df372 [Docs] (Disaggregated): point the history note at commit hashes only swung0x48 2026-09-05 21:58:28 -04:00
  • bee22f9d26 [Docs] (Disaggregated): separate the dirty-surface totals from the immediate-publish subset in MEASUREMENTS swung0x48 2026-09-05 21:57:11 -04:00
  • 8952b14024 [Docs] (Disaggregated): rewrite the MGPipe plan into a design and architecture set - README, ARCHITECTURE, ROADMAP, MEASUREMENTS - and retire PLAN.md and REVIEW.md to git history swung0x48 2026-09-05 21:56:31 -04:00
  • 458ccde176 [Feat] (Metrics, Config): make the boundary-counter summary cadence a knob, because the device harness never reaches the teardown dump swung0x48 2026-09-05 21:21:29 -04:00
  • 901d48a678 [Fix] (MGPipe, Metrics, Config, CI): exchange the per-frame stats instead of racing a store, carry the three uncarried table entries, drop the inline host span from a buffer range, spell the buffer subdata range, and close the small gate holes swung0x48 2026-09-05 21:06:26 -04:00
  • e8ee7b1a88 [Feat] (Backend, MGPipe): carry the six per-axis compute limits in DynamicBackendParameters so MGPCaps has every backend-owned indexed answer, and pin them against glGetIntegeri_v on both backends swung0x48 2026-09-05 21:03:22 -04:00
  • 1154f9a00d [Fix] (MG_Remote, Transport): give the inproc doorbell a death state so Shutdown can join a parked waiter, and bound a ring record at half the capacity so a refusal can never look like backpressure swung0x48 2026-09-05 20:54:13 -04:00
  • 7ef7c7e543 [Fix] (Spikes): answer the tier question for DirectGLES too, make an OK mean bytes round-tripped through a real GPU access, and exercise T3 in the direction that makes it a tier swung0x48 2026-09-05 20:45:21 -04:00
  • 6c7ad0a1bf [Feat] (Spikes): add the standalone external-memory probe that decides the persistent-map tier swung0x48 2026-09-05 13:48:27 -04:00
  • 38d4c2372c [Feat] (TraceApp, CI): pass arbitrary env vars through the retrace lane swung0x48 2026-09-05 20:34:22 -04:00
  • 8a239177ac [Feat] (Build, TraceApp): ship and exec a second native binary on android swung0x48 2026-09-05 20:33:42 -04:00
  • 87ee17c68c [Docs] (Disaggregated): fold the P0 measurements and corrections into the plan swung0x48 2026-09-05 20:29:30 -04:00
  • aa005720d0 [Test] (MG_Remote, Wire): pin the hung-up doorbell, the wakeup that must not be eaten, the ring's capacity ceiling and the publish-then-ring handoff swung0x48 2026-09-05 14:42:44 -04:00
  • c1a7ffac94 [Fix] (MG_Remote, Transport): give descriptor offers their own condition variable, cap the ring at what a 32-bit size field can describe, and keep the frontend umbrella out of Framing.h swung0x48 2026-09-05 14:42:44 -04:00
  • bdd4bed431 [Fix] (MG_Remote, Transport): close the doorbell's lost-wakeup window with two seq_cst fences and stop a hung-up peer turning every park into a spin swung0x48 2026-09-05 14:42:44 -04:00
  • 10315e71f3 [Test] (MG_Remote, CI): cover the wire layer with five suites and gate the generated header with flatc-check swung0x48 2026-09-05 14:06:12 -04:00
  • bfa087d0f7 [Feat] (MG_Remote, Transport): land the transport skeleton behind MOBILEGL_BUILD_DISAGGREGATED - framing, the SPSC ring, doorbells, shm segments and SCM_RIGHTS swung0x48 2026-09-05 14:05:47 -04:00
  • a1e22c26ab [Build] (MG_Remote, Protocol): pin the flatbuffers submodule, add the control-plane schema and commit its generated header swung0x48 2026-09-05 14:05:12 -04:00
  • bd2b4158e0 [Fix] (DirectVulkan, State): key the transform-feedback counter slots on the object's identity, not on its recycled GL name swung0x48 2026-09-05 14:04:07 -04:00
  • 9c7339b214 [Feat] (State): give RenderbufferObject the never-reused lifetime id every other cache-keyable state object already has swung0x48 2026-09-05 13:46:49 -04:00
  • 50815a232e [Fix] (Backend, Getter): retire the two frontend queries that were never asked and strip the unreachable frontend arms from the third swung0x48 2026-09-05 13:44:50 -04:00
  • d380a01f32 [Fix] (Metrics, DirectGLES, DirectVulkan): stop the summary line printing window totals under a per-frame label, and wire the six staging paths the site inventory claimed were covered or absent swung0x48 2026-09-05 15:20:13 -04:00
  • 7566a0b002 [Feat] (DirectGLES, DirectVulkan): instrument the six memo gates, the staging byte paths and both Present hooks with the MGPipe counters swung0x48 2026-09-05 14:40:17 -04:00
  • 42e0f47ebb [Feat] (Metrics): land the MGPipe boundary counters - bytes, dynamic accessor calls and the six memo gates, off unless MOBILEGL_PIPE_STATS is set swung0x48 2026-09-05 14:39:55 -04:00
  • 9bbf71990c [Build] (CI): add the pipe-gen check, the stdio-instrumentation gate and the citation lint swung0x48 2026-09-05 14:07:33 -04:00
  • 2f8d0f0d51 [Feat] (Config): parse the six MOBILEGL_PIPE_* switches swung0x48 2026-09-05 14:07:33 -04:00
  • 3363258908 [Test] (MGPipe): pin the catalogue arithmetic, the wire opcodes and the comparator swung0x48 2026-09-05 14:07:33 -04:00
  • 9c773182bb [Feat] (MGPipe): land the interface skeleton - the complete call catalogue, the payload PODs and the seven generators swung0x48 2026-09-05 14:07:33 -04:00
  • 8349babe90 [Docs] (Disaggregated): consolidate into a single MGPipe plan and drop the replica plan swung0x48 2026-09-05 14:06:24 -04:00
  • 1794ac94b1 [Docs] (Disaggregated): land plan B - MGPipe, a gallium-style explicit frontend/backend interface with a backend-owned state machine (client-allocated {slot,gen} handles, CSOs keyed on the pipeline subset with dynamic state pushed separately, set_* catalogue derived from the twins the two backends already keep, per-verb validate with aggregate generations, reverse channel as ten named callbacks plus a pull terminator, strangler migration behind PipeInputs with per-verb poison and a field-wise verify harness, three purity gates replacing byte identity), the item-by-item comparison against the replica plan A (memory, copies, drift surface, monolith benefit vs 4x effort and 7x later first frame) with a day-43 GO/NO-GO hedge, and the round-2 design-competition and adversarial-review record; mark plan A as superseded except for its inherited transport sections swung0x48 2026-09-05 13:05:43 -04:00
  • 8b31de2f8d [Docs] (Disaggregated): land the two-process split plan - server runs the unchanged backends against a replica GLContext driven by mutator replay, the client is the sole originator of every implicit-publish semantic (persistent-map push, MarkGpuWritten, texture dirty clear, XFB accounting, generated-mip allocation), SPSC shm ring with FlatBuffers structs on the hot path and tables on the control socket, two-way doorbells, present credit 1, spawn-only shipping build with an inproc CI variant, and a P0-P9 schedule gated on the existing unit/integration/retrace/CTS suites; plus the design-competition and adversarial-review record swung0x48 2026-09-05 09:21:58 -04:00
  • 50fb13430f [Merge] (MG_State, ShaderTranspiler, tools/cts): land the write-map landing and open-ended fp64 storage block fixes that take KHR-Single-GL45.subgroups to 100% on Magma swung0x48 2026-09-05 05:43:34 -04:00
  • d4f8adcf6d [Tools, Test] (tools/cts, MG_Test): make the CTS runner's chunk timeout idle-based so a healthy 20-minute invocation is no longer killed and its in-flight case mis-recorded as a crash, and link MSVC test executables with /WHOLEARCHIVE so the dllimport gl* references in GetProcAddress.cpp resolve swung0x48 2026-09-05 05:36:50 -04:00
  • 795e08f7e6 [Fix, Test] (ShaderTranspiler): flatten fp64 storage blocks whose last member is a runtime array - the pass declined them, so the fp64 demotion re-derived ArrayStride 4 over the application's 8/16/32-byte double buffer and every double/dvecN data[] SSBO read raw words swung0x48 2026-09-05 05:36:49 -04:00
  • 1e7ecab4db [Fix, Test] (MG_State, BufferObject): land a non-persistent write map's staged bytes into a GPU-resident store at unmap and explicit flush instead of dropping them - SSBO binding and large-store adoption make resident stores reachable through glMapBufferRange, so every per-draw re-initialisation was silently lost swung0x48 2026-09-05 05:36:48 -04:00
  • 81b17c0b75 [Test] (ShaderTranspiler, Integration): pin the five reworked shapes - the read-only capture stage through the real link, the seeded carrier's ESSL declaration, the metadata-driven block redeclaration and its decline, the control-stage-less evaluation decline, and a carrier clearing an i64vec4 swung0x48 2026-08-28 06:06:21 -04:00
  • d1edf765f5 [Fix] (Link, Async): carry the resolved gl_PointSize capture request into the SPIR-V handoff and let a deferred verdict name its own severity - the demotion read the request off a reflection slice phase A never fills it into, so its forced carrier was dead code, and its decline reason replayed at a level no shipped build keeps swung0x48 2026-08-28 06:06:20 -04:00
  • 97e07190ac [Fix] (ShaderTranspiler): seed a forced point-size carrier nothing writes and decline a control stage whose live clip/cull distance would still print gl_PointSize - an ES front end deletes a never-written output, and SPIRV-Cross redeclares that block from member decorations rather than access swung0x48 2026-08-28 06:06:11 -04:00
  • a4dcdf989e [Fix] (ShaderTranspiler): stop the point-size carrier landing on a location a live varying owns, and decline the evaluation stage a synthesized pass-through control stage cannot feed - an i64vec4 counted as one location, and a located input carrier trips both backends' pass-through guard swung0x48 2026-08-28 06:06:11 -04:00
  • 1c113e4b26 [Fix] (ShaderTranspiler): count a 64-bit integer vector as two locations in the XFB flattener's LocationSpan - it read 64-bitness off the element's float type alone, so an i64vec3/4 member packed the members after it onto locations it already owns swung0x48 2026-08-28 06:06:01 -04:00
  • bf9cfb3079 [Test] (Integration): PointSizeDemotionScenario - the demoted value chain is client-invisible in both configurations, with pinned per-backend lanes and a log-latch arming guard swung0x48 2026-08-28 04:23:37 -04:00
  • e1818d497a [Test] (ShaderTranspiler): pin the point-size demotion's shapes - capability stripped, carriers named and located past the program's varyings, byte-identical no-ops, whole-struct-copy decline, and the two new L1 key bits swung0x48 2026-08-28 04:23:36 -04:00
  • d7f66722d1 [Fix] (ShaderTranspiler, Link, DirectGLES, DirectVulkan): demote tessellation/geometry gl_PointSize to an ordinary varying where the device cannot host the built-in - the value survives for gl_in reads and by-name capture, both backends' declines stay for shapes the pass refuses, and the verdict rides the L1 key swung0x48 2026-08-28 04:23:28 -04:00
  • 92dc41ebf9 [Test] (DirectVulkan, SelfTest): pin the probe's fence-timeout teardown against a fake driver, the never-worse arming refusal, and paused-span patch/instanced counting against an unpaused control swung0x48 2026-08-28 06:08:10 -04:00
  • feea131d8b [Fix] (DirectVulkan, SelfTest): honour the primitives-generated probe's leak-on-timeout contract in both of its callers, count paused-span draws the frontend cannot price, refuse a substitute measured worse than the stream query, and derive the POST row's failure clause from the measurement swung0x48 2026-08-28 06:08:04 -04:00
  • 19f4402fbf [Test] (DirectVulkan): pin the primitives-generated probe's verdict and override mapping, and hold the reroute's GL answers and arming observable on the integration lane swung0x48 2026-08-28 04:35:47 -04:00
  • 1350031368 [Fix] (DirectVulkan): count GL_PRIMITIVES_GENERATED for transform-feedback-inactive draws - a bring-up probe measures the silent stream query and reroutes such draws through the dedicated primitives-generated query or a clipping-statistics pool, reported from the Vulkan POST swung0x48 2026-08-28 04:35:40 -04:00
  • 0ee3384b22 [Fix] (Espryt): land a SubData into an adopted store as a GPU-ordered copy - the in-place coherent write tore the frames still reading the old section bytes swung0x48 2026-08-28 04:50:07 -04:00
  • ba3f8d6774 [Test] (Integration): pin the adopted mesh-arena store - cross-frame SubData visibility, readback identity, and the GPU-written readback swung0x48 2026-08-28 03:50:36 -04:00
  • 3327784fd0 [Fix] (Espryt): adopt mesh-arena-sized stores into coherent persistent maps at definition, and stop the flush tiers from re-synchronizing them swung0x48 2026-08-28 03:48:15 -04:00
  • ff426da3a9 [Fix, Test] (MG_State, DirectVulkan): order host writes to an adopted store after recorded GPU work - a SubData issued after a dispatch landed in coherent memory before the deferred dispatch executed, so its increments overwrote the newer bytes; un-skip the DirectVulkan half of the SubData-after-dispatch scenario swung0x48 2026-08-28 03:01:15 -04:00
  • 08419a1fe6 [Chore] (Config): point the two stale comments at the renamed feature fields swung0x48 2026-08-28 00:47:35 -04:00
  • 5d51372c44 [Chore] (Config): triage backend-scoped env toggles under MOBILEGL_ESPRYT_ and MOBILEGL_MAGMA_ prefixes swung0x48 2026-08-28 00:38:09 -04:00
  • 7fd4550968 [Fix] (Espryt): copy before any FBO attach in the packed16 probe - attaching the array relayouts it to the plain order and was neutralizing the subject swung0x48 2026-08-27 23:20:00 -04:00
  • 971537058e [Fix] (Espryt): probe every allocation recipe of the packed16 shape - the Mali layout heuristic inverts between contexts, so one recipe cannot speak for the storage swung0x48 2026-08-27 23:16:53 -04:00
  • dd98c450ad [Test] (SelfTest): model the params-before-upload escape so a params-first probe regression reads as a red test swung0x48 2026-08-27 23:13:45 -04:00
  • 5dbbbbd7eb [Fix] (Espryt): allocate the packed16 probe's textures uploads-first, the order a minted backend texture performs and the one the Mali layout choice keys on swung0x48 2026-08-27 23:12:40 -04:00
  • 5d140a41ce [Fix] (Espryt): re-arm the packed16 probe on the allocation-scoped mirror the device actually has and let any mirrored level trigger the widening swung0x48 2026-08-27 23:06:31 -04:00
  • bf376b230f [CI] (Integration): rerun the buffer scenarios with the map flush disabled so the upload-ring tier keeps coverage swung0x48 2026-08-28 00:15:15 -04:00
  • 29599dcf90 [Fix] (DirectGLES): flush queued buffer ranges through a range-invalidating map first, so a partial write into a busy store is priced by the range swung0x48 2026-08-27 23:54:19 -04:00
  • 734fab9f90 [Test] (Integration): scope the SubData-after-dispatch readback case to DirectGLES, naming the DirectVulkan upload-ordering gap it exposed swung0x48 2026-08-27 23:04:52 -04:00
  • 2cd1809c29 [Fix] (Review): rebuild the packed16 probe on the CTS's three-level chains and let the POST row answer for the widening knob actually in force swung0x48 2026-08-27 21:26:19 -04:00
  • faed498476 [Test] (IntegrationTest): shield the packed16 renderbuffer clear from an inherited scissor swung0x48 2026-08-27 20:19:38 -04:00
  • 8282eecbfa [Fix] (Espryt): store RGB565/RGB5_A1/RGBA4 as 8-bit channels where a POST probe measures the Mali packed16 array-mip field-order mirror swung0x48 2026-08-27 20:16:59 -04:00
  • f4f3afb0b6 [Test] (Integration): pin that a queued SubData survives an immediate readback of a GPU-written buffer swung0x48 2026-08-27 22:19:45 -04:00
  • a28da07641 [Fix] (DirectGLES): queue app buffer updates and flush them through a staged-copy upload ring instead of stalling in glBufferSubData swung0x48 2026-08-27 22:19:44 -04:00
  • 200c21336f [Fix] (Readback): size a cube-face pack buffer by one face, and give a cube view's face its owner layer swung0x48 2026-08-27 22:05:23 -04:00
  • 2c3fc583d5 [Test] (Readback): pin the one-face pixel pack buffer and a cube view's per-face layers swung0x48 2026-08-27 21:58:51 -04:00
  • 645a12d8bc [Fix] (Readback): read the cube face a readback names, and let glGetTextureSubImage name one swung0x48 2026-08-27 21:23:22 -04:00
  • 8e6acc5528 [Test] (Readback): pin that a cube map's readback answers the face it was asked for swung0x48 2026-08-27 21:16:48 -04:00
  • 525ffe0f14 [Test] (Review): pin the inverted override mapping, the probe's controls, and that the pinned-on lane is really armed swung0x48 2026-08-27 21:06:01 -04:00
  • ad28d2b744 [Fix, Test] (Review): strip a block's member-level locations too, restore the probe's colour mask, and let the POST verdict follow the override swung0x48 2026-08-27 20:15:31 -04:00
  • eab622388f [Test] (TranslationCache): pin the two interface-block location-strip flags as L2 key material swung0x48 2026-08-27 20:07:49 -04:00
  • 75e573c923 [Fix] (SelfTest): give the located-interface-block probe its own entry-point gate instead of the storage probe's swung0x48 2026-08-27 19:56:26 -04:00
  • 0d0ef13619 [Fix] (DirectGLES): run the interface-block location strip last, where its deliberately Vulkan-invalid module reaches no validator swung0x48 2026-08-27 19:44:18 -04:00
  • 23565fcacd [Fix, Test] (DirectGLES, SelfTest, MG_Test): probe the located-interface-block defect with its controls and cover the strip in both gates swung0x48 2026-08-27 19:38:39 -04:00
  • 5dc26e3e2c [Fix] (DirectGLES, ShaderTranspiler): drop the location qualifier from inter-stage interface blocks on a driver that loses their payload swung0x48 2026-08-27 19:18:35 -04:00
  • 90564aa82e [Test] (Review): give the geometry point-size case its own capability probe swung0x48 2026-08-27 15:42:04 -04:00
  • 7520607d47 [Fix] (Review): decline a point-size program the device cannot run, bound the compile-failure source dump, and correct the pass-through rationale swung0x48 2026-08-27 15:42:04 -04:00
  • 57635a9198 [Test] (Tessellation): unit and headless-GPU coverage for capturing a patch draw's per-vertex payload swung0x48 2026-08-27 15:06:02 -04:00
  • c19d0f0b75 [Fix] (DirectVulkan): mirror gl_PointSize for capture and enable the feature its stages need swung0x48 2026-08-27 15:06:02 -04:00
  • e42e7d00f5 [Fix] (DirectGLES): request the point-size extension a tessellation or geometry stage's ESSL needs swung0x48 2026-08-27 15:06:01 -04:00
  • 62695ee3c2 [Test] (Review): pin the single-sample sample mask, the completeness-flip sampled set, and the integer multisample placeholders swung0x48 2026-08-27 13:17:56 -04:00
  • 02cc0ce83c [Fix] (Review): scope the sample mask to a multisample target, version the sampled-set memo on completeness, clamp the mask word count, give the multisample placeholder every numeric domain, unwind the fixup revert one pass at a time, and bound the validator log swung0x48 2026-08-27 13:03:51 -04:00
  • 9e52a0b23e [Test] (DirectVulkan): pin the incomplete-default-texture draw, the unbound multisample sampler, and the unwritten redeclared gl_Position swung0x48 2026-08-27 12:20:37 -04:00
  • 9dee53337f [Fix] (DirectVulkan): give an unbound multisample sampler a placeholder, clear a multisample texture through a load-op pass, and plumb glSampleMaski into the pipeline swung0x48 2026-08-27 11:54:30 -04:00
  • 28c5badf8f [Fix] (SPIR-V): keep the entry-point interface consistent when the clip fixup and the XFB position mirror inject through gl_Position swung0x48 2026-08-27 11:47:54 -04:00
  • 01116f7b41 [Fix] (DirectVulkan): treat an incomplete sampled texture as unbound in the collect path too, and stop dereferencing a declined texture sync swung0x48 2026-08-27 11:47:54 -04:00
  • 05d627ba2d [Fix] (Xfb): never issue a transform feedback capture-point bind the application did not ask for, and error-check the driver span instead of losing it silently swung0x48 2026-08-27 10:02:07 -04:00
  • ea5d52f126 [Test] (Tessellation): assert the patch-array cross-stage link outright now that the fork pin carries the guard swung0x48 2026-08-27 10:52:00 -04:00
  • 3c70b4fc0f [Fix] (Program): read an API colour index of zero as no override, matching the IO resolver and ProgramInterface swung0x48 2026-08-27 10:52:00 -04:00
  • b6d6316333 [Fix] (Blend): decline a GL_SRC1_* factor on an incapable GLES driver even when blending is off swung0x48 2026-08-27 10:51:59 -04:00
  • 3c9ab5a68f [Test] (Blend): make the dual-source scenario's capability gate skip the case, not just the helper swung0x48 2026-08-27 10:14:52 -04:00
  • 532b5e9cc5 [Fix] (Program): let two fragment outputs share a colour number when their colour index differs swung0x48 2026-08-27 10:11:25 -04:00