swung0x48
8349babe90
[Docs] (Disaggregated): consolidate into a single MGPipe plan and drop the replica plan
...
- docs/Disaggregated/PLAN.md is now the one plan: the MGPipe design with the transport, control-plane, present, threading, EGL/process, monolith/build chapters inlined as real chapters (7-13) instead of references, sections renumbered 0-17 + appendices, every internal citation updated
- the replica-GLContext plan and its review record are removed at the user's request; REVIEW.md is the MGPipe design-competition and adversarial-review record only, with the comparison verdicts dropped and the remaining finding text reworded to the new section numbers
- day-43 GO/NO-GO now names its two outcomes (continue / shrink to headless tooling or re-evaluate) without any rollback path
2026-09-05 14:06:24 -04:00
swung0x48
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
2026-09-05 13:05:43 -04:00
swung0x48
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
2026-09-05 09:21:58 -04:00
swung0x48
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
2026-08-28 06:22:12 -04:00
swung0x48
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
2026-08-28 06:22:12 -04:00
swung0x48
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
2026-08-28 06:22:11 -04:00
swung0x48
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
2026-08-28 06:22:11 -04:00
swung0x48
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
2026-08-28 06:22:11 -04:00
swung0x48
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
2026-08-28 06:22:10 -04:00
swung0x48
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
2026-08-28 06:21:31 -04:00
swung0x48
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
2026-08-28 06:21:30 -04:00
swung0x48
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
2026-08-28 06:19:41 -04:00
swung0x48
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
2026-08-28 06:19:40 -04:00
swung0x48
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
2026-08-28 06:19:40 -04:00
swung0x48
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
2026-08-28 06:19:39 -04:00
swung0x48
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
2026-08-28 04:50:07 -04:00
swung0x48
ba3f8d6774
[Test] (Integration): pin the adopted mesh-arena store - cross-frame SubData visibility, readback identity, and the GPU-written readback
2026-08-28 04:19:11 -04:00
swung0x48
3327784fd0
[Fix] (Espryt): adopt mesh-arena-sized stores into coherent persistent maps at definition, and stop the flush tiers from re-synchronizing them
2026-08-28 04:19:11 -04:00
swung0x48
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
2026-08-28 03:01:15 -04:00
swung0x48
08419a1fe6
[Chore] (Config): point the two stale comments at the renamed feature fields
2026-08-28 00:47:35 -04:00
swung0x48
5d51372c44
[Chore] (Config): triage backend-scoped env toggles under MOBILEGL_ESPRYT_ and MOBILEGL_MAGMA_ prefixes
2026-08-28 00:38:17 -04:00
swung0x48
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
2026-08-28 00:22:16 -04:00
swung0x48
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
2026-08-28 00:22:16 -04:00
swung0x48
dd98c450ad
[Test] (SelfTest): model the params-before-upload escape so a params-first probe regression reads as a red test
2026-08-28 00:22:15 -04:00
swung0x48
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
2026-08-28 00:22:15 -04:00
swung0x48
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
2026-08-28 00:22:15 -04:00
swung0x48
bf376b230f
[CI] (Integration): rerun the buffer scenarios with the map flush disabled so the upload-ring tier keeps coverage
2026-08-28 00:15:15 -04:00
swung0x48
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
2026-08-27 23:54:19 -04:00
swung0x48
734fab9f90
[Test] (Integration): scope the SubData-after-dispatch readback case to DirectGLES, naming the DirectVulkan upload-ordering gap it exposed
2026-08-27 23:04:52 -04:00
swung0x48
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
2026-08-27 22:46:13 -04:00
swung0x48
faed498476
[Test] (IntegrationTest): shield the packed16 renderbuffer clear from an inherited scissor
2026-08-27 22:46:13 -04:00
swung0x48
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
2026-08-27 22:46:12 -04:00
swung0x48
f4f3afb0b6
[Test] (Integration): pin that a queued SubData survives an immediate readback of a GPU-written buffer
2026-08-27 22:19:45 -04:00
swung0x48
a28da07641
[Fix] (DirectGLES): queue app buffer updates and flush them through a staged-copy upload ring instead of stalling in glBufferSubData
2026-08-27 22:19:44 -04:00
swung0x48
200c21336f
[Fix] (Readback): size a cube-face pack buffer by one face, and give a cube view's face its owner layer
2026-08-27 22:05:23 -04:00
swung0x48
2c3fc583d5
[Test] (Readback): pin the one-face pixel pack buffer and a cube view's per-face layers
2026-08-27 21:58:51 -04:00
swung0x48
645a12d8bc
[Fix] (Readback): read the cube face a readback names, and let glGetTextureSubImage name one
2026-08-27 21:54:47 -04:00
swung0x48
8e6acc5528
[Test] (Readback): pin that a cube map's readback answers the face it was asked for
2026-08-27 21:54:46 -04:00
swung0x48
525ffe0f14
[Test] (Review): pin the inverted override mapping, the probe's controls, and that the pinned-on lane is really armed
2026-08-27 21:06:01 -04:00
swung0x48
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
2026-08-27 20:15:31 -04:00
swung0x48
eab622388f
[Test] (TranslationCache): pin the two interface-block location-strip flags as L2 key material
2026-08-27 20:07:49 -04:00
swung0x48
75e573c923
[Fix] (SelfTest): give the located-interface-block probe its own entry-point gate instead of the storage probe's
2026-08-27 19:56:26 -04:00
swung0x48
0d0ef13619
[Fix] (DirectGLES): run the interface-block location strip last, where its deliberately Vulkan-invalid module reaches no validator
2026-08-27 19:44:18 -04:00
swung0x48
23565fcacd
[Fix, Test] (DirectGLES, SelfTest, MG_Test): probe the located-interface-block defect with its controls and cover the strip in both gates
2026-08-27 19:38:39 -04:00
swung0x48
5dc26e3e2c
[Fix] (DirectGLES, ShaderTranspiler): drop the location qualifier from inter-stage interface blocks on a driver that loses their payload
2026-08-27 19:18:35 -04:00
swung0x48
90564aa82e
[Test] (Review): give the geometry point-size case its own capability probe
2026-08-27 15:42:04 -04:00
swung0x48
7520607d47
[Fix] (Review): decline a point-size program the device cannot run, bound the compile-failure source dump, and correct the pass-through rationale
2026-08-27 15:42:04 -04:00
swung0x48
57635a9198
[Test] (Tessellation): unit and headless-GPU coverage for capturing a patch draw's per-vertex payload
2026-08-27 15:06:02 -04:00
swung0x48
c19d0f0b75
[Fix] (DirectVulkan): mirror gl_PointSize for capture and enable the feature its stages need
2026-08-27 15:06:02 -04:00
swung0x48
e42e7d00f5
[Fix] (DirectGLES): request the point-size extension a tessellation or geometry stage's ESSL needs
2026-08-27 15:06:01 -04:00
swung0x48
62695ee3c2
[Test] (Review): pin the single-sample sample mask, the completeness-flip sampled set, and the integer multisample placeholders
2026-08-27 13:17:56 -04:00
swung0x48
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
2026-08-27 13:03:51 -04:00
swung0x48
9e52a0b23e
[Test] (DirectVulkan): pin the incomplete-default-texture draw, the unbound multisample sampler, and the unwritten redeclared gl_Position
2026-08-27 12:52:19 -04:00
swung0x48
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
2026-08-27 12:52:19 -04:00
swung0x48
28c5badf8f
[Fix] (SPIR-V): keep the entry-point interface consistent when the clip fixup and the XFB position mirror inject through gl_Position
2026-08-27 12:52:18 -04:00
swung0x48
01116f7b41
[Fix] (DirectVulkan): treat an incomplete sampled texture as unbound in the collect path too, and stop dereferencing a declined texture sync
2026-08-27 12:52:18 -04:00
swung0x48
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
2026-08-27 12:28:32 -04:00
swung0x48
ea5d52f126
[Test] (Tessellation): assert the patch-array cross-stage link outright now that the fork pin carries the guard
2026-08-27 10:52:00 -04:00
swung0x48
3c70b4fc0f
[Fix] (Program): read an API colour index of zero as no override, matching the IO resolver and ProgramInterface
2026-08-27 10:52:00 -04:00
swung0x48
b6d6316333
[Fix] (Blend): decline a GL_SRC1_* factor on an incapable GLES driver even when blending is off
2026-08-27 10:51:59 -04:00
swung0x48
3c9ab5a68f
[Test] (Blend): make the dual-source scenario's capability gate skip the case, not just the helper
2026-08-27 10:48:22 -04:00
swung0x48
532b5e9cc5
[Fix] (Program): let two fragment outputs share a colour number when their colour index differs
2026-08-27 10:48:22 -04:00
swung0x48
06605ed0ea
[Test] (Tessellation): include the standard headers the link test uses directly
2026-08-27 10:48:21 -04:00
swung0x48
e1d5bdc4a5
[Fix] (Blend): decline an unsupported dual-source blend instead of throwing through the GL ABI
2026-08-27 10:48:21 -04:00
swung0x48
66867a41ba
[Fix] (Program): count the tessellation control stage as a transform-feedback capture stage
2026-08-27 10:48:20 -04:00
swung0x48
ebff4b21f7
[Fix] (Query): tie the two tessellation pipeline-statistics targets to the GL_ARB_tessellation_shader advertisement
2026-08-27 10:48:20 -04:00
swung0x48
d4e7378868
[Chore] (ShaderTranspiler): pin glslang fork at d89cf443 (patch-array io-resize guard for the evaluation stage)
2026-08-27 10:22:37 -04:00
swung0x48
01d20e5c96
[Test] (Review): border-colour clamping, a readback across a mip gap, and blending on renderbuffer formats with no exact VkFormat
2026-08-27 08:35:06 -04:00
swung0x48
b04c67d9a8
[Test] (Review): pin the sampler getter matrix, the shadow-readback refusals, and the proxy and by-name parameter targets
2026-08-27 08:35:05 -04:00
swung0x48
685d83e3ec
[Fix] (Review): bound a texture readback by the image's mip count, refuse cross-format depth/stencil copies, and probe the renderbuffer's real VkFormat
2026-08-27 08:35:05 -04:00
swung0x48
009b140691
[Fix] (Review): clamp integer and floating-point border colours to the sampled format's representable range
2026-08-27 08:35:05 -04:00
swung0x48
1f44e5bc1d
[Fix] (Review): convert every scalar sampler query to the type the caller asked for instead of the other type's bit pattern
2026-08-27 08:35:04 -04:00
swung0x48
d9aebcba26
[Fix] (Review): refuse a CPU-shadow readback whose layout the pack path cannot produce, and apply the parameter-target rule to proxy and by-name spellings
2026-08-27 08:35:04 -04:00
swung0x48
0db666897e
[Fix] (DirectGLES): key the border-colour sync memo on the authoritative representation, not just the float one
2026-08-27 08:35:03 -04:00
swung0x48
5f445e499f
[Test] (Integration): integer border-colour sampling and clear-tex-image on a texture with no level 0
2026-08-27 08:35:03 -04:00
swung0x48
c52ebd5bf6
[Test] (Texture): pin the border-colour forms, the GL 4.6 conversion pair and the texparameter validation gaps
2026-08-27 08:35:02 -04:00
swung0x48
8e072bc793
[Fix] (DirectVulkan): answer a texture-image query from the CPU shadow when the texture has no VkImage
2026-08-27 08:35:02 -04:00
swung0x48
88ee75be0e
[Fix] (DirectVulkan): resolve renderbuffer VkFormats through the shared texture table and police copy size-compatibility
2026-08-27 08:35:01 -04:00
swung0x48
0dbb4ceba8
[Fix] (DirectVulkan): resolve arbitrary and integer border colours through VK_EXT_custom_border_color, clamped to the sampled format
2026-08-27 08:35:01 -04:00
swung0x48
a94b3e0bd5
[Fix] (DirectGLES): forward an integer border colour through glTexParameterIiv/glSamplerParameterIiv instead of flattening it to float
2026-08-27 08:35:01 -04:00
swung0x48
764b6e044d
[Fix] (Texture): reject illegal texparameter targets and sampler enum values, invert the integer border-colour read, and report multisample sampler state as INVALID_ENUM
2026-08-27 08:35:00 -04:00
swung0x48
c1d89de729
[Fix] (Sampler): carry GL_TEXTURE_BORDER_COLOR with its form, convert per GL 4.6 eq 2.2/2.3, and unify the name and scalar-pname error classes
2026-08-27 08:35:00 -04:00
swung0x48
c136384f97
[CI] (TraceReplay): keep the rd12-odinlite perf fixture out of the CI matrices until its archive is published
2026-08-27 08:23:04 -04:00
swung0x48
1920a3d16f
[Test] (Review): pin the composite's linked capture list, the capture-stage rule, and the matrix uniform forms' link check
2026-08-27 06:00:54 -04:00
swung0x48
11f4b4bd3b
[Fix] (Review): honour a SPIR-V module's transform-feedback decorations, take the composite's capture list from the linked snapshot, and reorder every glProgramUniformMatrix* link check
2026-08-27 05:56:45 -04:00
swung0x48
9ef33f4274
[Fix] (Review): bound copies by the requested level, reach every cube face, keep array layer counts, and give glSpecializeShader its spec error surface
2026-08-27 05:51:58 -04:00
swung0x48
e430e1b3be
[Fix] (Texture): give glTexBuffer the sized-format check its TODO deferred and the target-taking forms their own INVALID_ENUM
2026-08-27 05:37:18 -04:00
swung0x48
e315d9e798
[Test] (GlSpirv): unit and headless-GPU coverage for glShaderBinary, glSpecializeShader and the SPIR_V_BINARY state
2026-08-27 05:37:18 -04:00
swung0x48
6f299372c6
[Feat] (Program): implement GL_ARB_gl_spirv - glShaderBinary, glSpecializeShader and the SPIR_V_BINARY state, feeding the module into the ordinary compile pipeline
2026-08-27 05:37:17 -04:00
swung0x48
be7bf21eb8
[Fix] (ShaderTranspiler): enforce the layout(binding) range rule for samplers, images and uniform/atomic-counter blocks, not only for SSBOs
2026-08-27 05:37:17 -04:00
swung0x48
0e4302b399
[Feat] (RenderState): implement glClipControl, glPolygonOffsetClamp and glTextureBarrier instead of stubbing them
2026-08-27 05:37:16 -04:00
swung0x48
c9c2dcb42a
[Feat] (Query): accept the ARB_pipeline_statistics_query targets and report zero counter bits for them
2026-08-27 05:37:15 -04:00
swung0x48
2d938971b9
[Fix] (Getter): saturate combined uniform components in 64-bit and answer the missing GL4 state tokens
2026-08-27 05:37:15 -04:00
swung0x48
f7e23d5d83
[Fix] (DirectVulkan): generate mipmaps for cube-map-array and 1D-array targets, and stop shrinking an array's layer count down the chain
2026-08-27 05:37:14 -04:00
swung0x48
02fbb816e9
[Fix] (Texture): cube-map-array shape rules on glTexImage3D, GL_TEXTURE_SHARED_SIZE, and the unimplemented glCopyTexSubImage1D/3D
2026-08-27 05:37:14 -04:00
swung0x48
0e0882cfc6
[Test] (IntegrationTest): read cube faces back through a per-face FBO, which glGetTexImage's face token does not distinguish on DirectVulkan
2026-08-27 05:07:38 -04:00
swung0x48
de09646d5e
[Fix] (DirectVulkan): one shared attachment layer count for the render pass and the clear key, and direct VkResult checks in the render-pass builder
2026-08-27 05:04:44 -04:00
swung0x48
747864777e
[Test] (IntegrationTest): pin the layered 3D and cube-map-array attachment shapes and their per-layer routing
2026-08-27 04:37:29 -04:00
swung0x48
6fc3504bd9
[Fix] (Framebuffer): carry the layered flag through the GL_DEPTH_STENCIL_ATTACHMENT split
2026-08-27 04:37:28 -04:00
swung0x48
df1bcdba09
[Fix] (DirectVulkan): legal view types for layered 3D/cube attachments, and a real failure channel for the render-pass builder
2026-08-27 04:19:06 -04:00