Commit Graph

  • 9eae98581f [Test] (SelfTest, POST): probe upload/draw ordering in persistently mapped vertex arenas - native GLES controls distinguish mapped destination corruption from staging and synchronization failures dev swung0x48 2026-09-07 00:44:08 -04:00
  • d7655247f7 [Fix, Test] (DirectGLES, Integration): rebind VAOs when an adopted buffer is respecified - the immediate retire path forgot the buffer-id generation, so cached vertex and element bindings kept the deleted store swung0x48 2026-09-06 22:55:06 -04:00
  • 4826806881 [CI] (Workflows): run the test and apk lanes on every push to feat/disaggregated feat/disaggregated swung0x48 2026-09-06 06:32:37 -04:00
  • e7a6a72f6a [Docs] (Disaggregated): record the P1 landing and what its verify lane found swung0x48 2026-09-06 06:17:12 -04:00
  • 62a7786184 [Fix] (Pipe, Purity): end a declared verb honestly, and gate the header MG_State now includes swung0x48 2026-09-06 06:14:10 -04:00
  • ef6227e19b [Test] (Pipe): let a test that drives a backend helper directly declare the verb it stands in swung0x48 2026-09-06 05:11:06 -04:00
  • 9bd6d39403 [Test] (Pipe): pin the push-on-mutation shape - a frontend write inside a verb refreshes the pushed field, and only its value swung0x48 2026-09-06 05:32:25 -04:00
  • 6b681c4a63 [Fix] (Pipe, State): refresh a pushed PipeInputs field when the frontend moves it inside a verb swung0x48 2026-09-06 05:32:13 -04:00
  • 80a6b39003 [Fix] (Pipe): fill the capability set on a texture op and a dispatch, and the shader blit's viewport, provoking vertex and buffer bindings swung0x48 2026-09-06 05:31:50 -04:00
  • 97b997d5da [CI] (Pipe): read the verify library's static symtab, grep only the arming lane's log, and stop the two retrace lanes overwriting each other's evidence swung0x48 2026-09-06 02:39:10 -04:00
  • 7d80c9678e [Test] (Retrace): scan a verify retrace's log for the third MGPipe Fatal too swung0x48 2026-09-06 02:39:10 -04:00
  • 72aa9191b4 [Fix] (Tooling): gate symbol_report on all four buckets and on a .text that moved in either direction swung0x48 2026-09-06 02:38:49 -04:00
  • 1e3a74686f [Test] (Pipe): give the arming assertion a lane and a log of its own, and stop the poison child calling a sequence it never ran a success swung0x48 2026-09-06 02:38:38 -04:00
  • 0fe7bf82d2 [CI] (Pipe): the third CI mode - a verify build, its integration and retrace lanes, and the two negative controls as always-on steps swung0x48 2026-09-06 02:07:03 -04:00
  • 416cd23c28 [Feat] (Tooling): give symbol_report.py the two hard gates G1 needs, with the report written first swung0x48 2026-09-06 02:01:22 -04:00
  • 5f8e8db1b9 [Test] (Retrace): make a retrace under MOBILEGL_PIPE_VERIFY prove it armed, and give the lane a label swung0x48 2026-09-06 01:59:39 -04:00
  • bdf05514c3 [Test] (Pipe): the integration-verify lanes and their two always-on negative controls swung0x48 2026-09-06 01:57:05 -04:00
  • bf8b39a867 [Refactor] (Magma): route every frontend read through MGB_CTX - 164 arrow sites sed'd, 49 non-arrow lines converted (43 asserts keep their meaning as MGB_CTX_LIVE); pull build byte-identical swung0x48 2026-09-06 01:46:50 -04:00
  • d4504e30f8 [Refactor] (Espryt): route every frontend read through MGB_CTX - 113 arrow sites sed'd, 9 non-arrow lines converted (the fb-slot cache keys on MGB_CTX_IDENTITY); pull build byte-identical swung0x48 2026-09-06 01:51:40 -04:00
  • 9087f13308 [Fix] (Pipe): let a readback fill the transform-feedback state its emulation reads swung0x48 2026-09-06 04:41:15 -04:00
  • 44ffafb2dc [Test] (Pipe): pin the pre-fill window - every stamp of 0 is stale at serial 0, a read before any fill aborts naming "<none>", and the FATAL=0 child leaves through std::exit so the teardown summary is observed swung0x48 2026-09-06 02:55:17 -04:00
  • 12b57055b7 [Docs] (Pipe): record why the forwarders carry no poison check, the InHook re-entry guard, and the Index slot no FillPoints.def row can fill swung0x48 2026-09-06 02:55:17 -04:00
  • d0ff647581 [Fix] (Pipe): re-arm the verify comparator when any of its three knobs changes, not only when PipeVerify does swung0x48 2026-09-06 02:55:17 -04:00
  • 30d72c5b4e [Fix] (Pipe): refuse a stamp of 0 as fresh on both branches - a read before the first fill is Fatal{UnmigratedPipeInput, "<Field>@<none>"}, not default storage swung0x48 2026-09-06 02:55:17 -04:00
  • d9f4698d98 [Test] (Pipe): give every PipeInputsTest process its own log file, and cover the compare-at-read arm, the three knob parsers and VERIFY_FATAL=0 with forked children swung0x48 2026-09-06 02:31:56 -04:00
  • 878db2c405 [Fix] (Pipe): re-parse the POISON_OMIT and VERIFY knobs when their Features value changes, not once per process swung0x48 2026-09-06 02:31:56 -04:00
  • 77ecde1524 [Fix] (Pipe): refuse an eighth sticky row at compile time - the forwarded count equals the generated sticky count swung0x48 2026-09-06 02:31:56 -04:00
  • 510ecd9293 [Fix] (Impl): move the DeleteSync fill of the orphan sweep inside its null-entry guard swung0x48 2026-09-06 02:31:56 -04:00
  • 440d3c5253 [Test] (Pipe): pin the P1 poison and verify shapes - 63 fields, 69 verbs, the seven sticky fields, an omitted GenerateMipmap field leaves exactly that field stale, a corrupted snapshot names its field, reading an unfilled field aborts with SIGABRT swung0x48 2026-09-06 02:06:37 -04:00
  • 83b16561c2 [Feat] (Pipe): give the six value structs G4 field lists and assert the lists cover their members - the memcmp fallback is now a compile error, floats in vector types compare bitwise swung0x48 2026-09-06 02:02:07 -04:00
  • 275dd3edb4 [Feat] (Pipe): the MOBILEGL_PIPE_VERIFY shadow comparator - a per-verb entry compare over the fill set and a compare-at-read in every accessor, first differing field and verb serial, fatal by default swung0x48 2026-09-06 01:56:44 -04:00
  • a196ada4c1 [Feat] (Impl): call MGP_FILL before every GLFunctionsTable entry - 83 statements over 69 verbs, a no-op in the pull build swung0x48 2026-09-06 01:51:16 -04:00
  • 3aa4d8af1f [Feat] (Pipe): fill PipeInputs per verb class from GLContext and stamp per-verb generations - a read of a field the verb did not fill is Fatal{UnmigratedPipeInput} swung0x48 2026-09-06 01:48:23 -04:00
  • bf86b1ede6 [Feat] (Pipe): land the P1 contract - PipeInputsSwitch.h with MGB_CTX, the 63-field PipeInputs block with type-identical accessors, FillPoints.def and its G5b generator, the MOBILEGL_PIPE_PUSH/VERIFY options and the three verify knobs; pull build unchanged swung0x48 2026-09-06 01:35:45 -04:00
  • 087685d19b [CI] (Purity): install libx11-dev for the include-graph-check job swung0x48 2026-09-05 23:27:10 -04:00
  • 5635e33ffe [Docs] (Disaggregated): record the P0.5 landing swung0x48 2026-09-05 23:22:15 -04:00
  • 5d99ee435f [CI] (Purity): require both P0.5 closure probes now that the headers exist swung0x48 2026-09-05 23:13:28 -04:00
  • b566bf4db9 [Fix] (Purity, Program, Pipe): close the review minors of the three P0.5 packages swung0x48 2026-09-05 23:13:24 -04:00
  • 09d2bb11b7 [Feat] (Program): add the reflection-archive field tables and sizeof trip wires to ProgramArtifacts.h swung0x48 2026-09-05 22:52:19 -04:00
  • 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 Feat/cts-subgroups 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