Repository navigation
[Feat] (Disaggregated): replace MobileGL's monolithic architecture with a disaggregated client/server one - #21
Merged
Merged
Conversation
…d on device, no gain (x 51.4 vs b 51.9 fps, MobileGlues 55.8); not landed.
…lace the client shadow diff.
…plugin; the default stays 26.
…022 to 0.014 ms/frame.
…FLOOR line from the decline dump
… ForgetSession where the session end calls it
… log to the three cases that count - a log on the ambient RoleViolation entries would arm its guard-line check, which they never ran
… floor line and sink tallies
… texture units - Iris budgets a whole program's samplers against GL_MAX_TEXTURE_IMAGE_UNITS; the ES driver's 16 per stage left iterationT with no pipeline on Espryt - report min(32, max(per-stage, combined)) so unit numbers stay legal - add CapabilityLimitsTest for the Adreno, narrow and wide cases
…iler): strip unused compatibility members from per-vertex blocks - glslang gives them no BuiltIn, so Magma declined every compatibility program that wrote gl_Position, including the Iris block outline
…iler): keep geometry outputs across EmitVertex - RetainGeometryOutputsPass shadows each output whose pre-emit value can be observed later and copies it into the real output before every emit - runs in SanitizeAndOptimizeBinary, so Magma and Espryt both get it - iterationT terrain: flat textureResolution written once, emitted 3 times
…up geometry emits in helpers - clip-space fix-up and XFB gl_Position mirror go before every EmitVertex and EmitStreamVertex in the entry point's call tree, not only main's - helpers are not inlined, so a helper-emitted vertex skipped the depth remap (clipped below GL z=0) and was never captured by XFB - TransformSpirvForVulkanPositionFix exported for the unit cases
…piler): add a pass extending narrow integer vertex inputs GL's way - listed locations are masked to 8/16 bits or sign-extended from them at the top of main - each input becomes a Private copy seeded once; access chains are retyped, arrays go per element
…ger attributes their GL value in Magma - the fetch format takes the input's signedness, so UNSIGNED_BYTE 240 read as int was -16 (Sodium lightmaps into a_LightAndData: dark terrain under shaderpacks) - a program variant keyed on two cached masks re-extends exactly those locations - the vertex input resolve moves ahead of the variant pick; vertex-stage transforms get a helper
…rrow integer attributes read across signedness - every 8/16-bit pairing plus 32-bit and matching controls, one instanced, via transform feedback - one program over a signed and an unsigned array in both orders, on the monolith and split arms
…draw from the variant its last draw settled on - the program record remembers the last variant per flags, so a narrow-integer draw costs one lookup and the plain program it never draws with ages out
… in the one-program narrow case
- Sodium 0.5 feeds unsigned-byte lightmaps to Iris 1.7's ivec4; sign-extended, all terrain is black - with Magma's narrow-integer variant disabled the frame scores 0.25 against either golden - the golden is the CI software renderers' picture: the outline relies on rounding GL leaves open
… the integer vertex input masks - IntegerVertexInputMasks, the four narrow data masks and ResolveNarrowIntegerVertexInputs move to MG_Util so another backend can plan the same correction - Magma keeps its VkFormat Note on a derived mask type; behaviour is unchanged
…nTest/Scenarios): check the array types Espryt hands the driver - IntegerAttributeTypePeek wraps the ES draw entry points and flags an enabled array whose type has the other signedness from its input - every narrow-integer case asserts it on DirectGLES monolith and in-process; elsewhere it logs why and keeps the value checks - new cases: two programs on one array, a first build for matching data, one source built twice, relink, recreate, bound location, DSA, zero stride, client memory, 32-bit data, multi-draw, pipeline stage, type query - red on DirectGLES until the driver gets the input's signedness
…piler): seed narrow integer inputs from runtime widths - ExtendNarrowIntegerVertexInputsPass gains a RuntimeWidths mode: every 32-bit integer input below location 32 is widened from two Private uint globals by shifts only - ShaderCompiler::ExtendNarrowIntegerVertexInputsForEssl reports whether it rewrote the module - the constant-mask mode is unchanged byte for byte
…d, MG_Test/ShaderTranspiler, MG_Util/ShaderTranspiler): give integer attributes their GL value in Espryt - every integer array reaches the driver with its input's signedness, at the pointer, zero-stride and client-memory call sites, so each fetch is one ES defines - 8/16-bit data of the other signedness is widened back by the program's runtime-width seeds, armed on the first draw that needs them and set as two uniforms per draw - capture programs with integer inputs are armed at their first build; arming is part of the ESSL translation key - a build whose seeds cannot be verified keeps the driver's own value for narrow data; one that fails to link is rebuilt without them - the program's integer input masks are memoized on its shader record
- a failed armed build disables the seeds for that link only; a relink arms again - a refusal applies to the link it was built for, so a relink's first draw expects seeds - a relink without integer inputs drops the arming - the program twin is looked up only for a plan that needs seeds - the seed state resets after the unlinked-program return, not before it
…row case - the client-memory case runs on every arm, as the client array scenario does - a capture program meets both signednesses in one capture without a relink - a relink that turns an ivec4 input into uvec4 starts over - the recreated program and array must reuse their names - the ESSL check counts the width declarations
- The driver-watch control makes no GL call, so it never arms the comparator - The verify-split arm proof needs it named, on both backends
… tools - the archive freeze rule goes with the directory - code comments lose citations to the removed notes
BZLZHH
marked this pull request as ready for review
October 31, 2026 11:34
…mmarize their scope
…gnore): translate the documentation and use US spelling
… identifiers and file names
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.