swung0x48
c7e36986e7
[Fix] (ShaderTranspiler, DirectVulkan, MG_IntegrationTest): patch both of iterationRP's under-declared subgroup scratch arrays
...
The previous commit's fingerprint was pinned to one array's incidental
dimensions - workgroup exactly 32x16x1, element exactly vec2, length
exactly 32 - which is the auto-exposure reduction and nothing else. The
pack ships the same idiom twice:
- auto-exposure: 32x16 (512 invocations), shared vec2 prefixSumCache[32]
- RTW warp: 1024 invocations, shared float prefixSumCache[64]
so the warp kept writing 128 subgroups into 64 entries on an 8-lane
device and the retrace stayed bit-identically wrong (ssim 0.027902).
Key the fingerprint on the pack's idiom instead of one array's shape: a
workgroup array of 32-bit floats indexed by gl_SubgroupID, fed by a
subgroup scan, whose declared length is below ceil(invocations / native
width). Three properties keep that a targeted repair rather than a
general array resizer:
- the index must BE gl_SubgroupID (through OpCopyObject, a signedness
OpBitcast, or a spill whose every store is that id), so an index
masked or clamped into range is left alone;
- the >= 16-lane early-out is retained, so every module on the devices
the pack was written for passes through byte-identical;
- growth is certified against maxComputeSharedMemorySize using a
natural-alignment layout model, and declined outright when a
declaration cannot be sized, so a patched module can never fail
pipeline creation where the original would not have.
Verified against the shaders the CI trace actually contains: of the 14
compute modules in the fixture exactly these two change, the other
twelve are byte-identical, and all fourteen pass spirv-val. The
integration scenario grows a second case for the 1024-invocation shape;
both abort with heap corruption when the patch is disabled.
2026-08-19 16:36:06 -04:00
swung0x48
d8576a2ed3
[Fix] (DirectVulkan, ShaderTranspiler, MG_IntegrationTest, SelfTest, TraceReplay): use native subgroups and patch iterationRP's under-declared scratch
...
iterationRP's Program 203 declares shared vec2 prefixSumCache[32] for a
512-invocation workgroup indexed by gl_SubgroupID; any device narrower
than 16 lanes partitions into more than 32 subgroups and the pack writes
shared memory out of bounds (heap corruption on lavapipe's CPU
rasterizer, ssim 0.028 on the CI retrace). Fix it where the fault lies -
in the fixture - and keep the GL contract sound everywhere else:
- FixIterationRPSubgroupScratchPass: fingerprint-gated SPIR-V pass that
grows exactly that array to ceil(invocations/width) entries on sub-16-lane devices; every other module passes through byte-identical.
- DeriveNumSubgroupsPass stays default-on for the Adreno topology bug
and is made spec-sound: pipelines request REQUIRE_FULL_SUBGROUPS
whenever the workgroup shape makes the flag legal (computeFullSubgroups
enabled, local_size_x a multiple of the native width, subgroup count
within maxComputeWorkgroupSubgroups).
- EmulateSubgroupsPass: 32-lane virtual-subgroup lowering kept in-tree
as a last resort, enabled only by MOBILEGL_MAGMA_EMULATE_SUBGROUP=1 on
devices with no native subgroup support; fails closed on extended
subgroup instructions and on modules whose added scratch would exceed
maxComputeSharedMemorySize.
- IterationRPFirstReductionScenario skips gracefully outside the pack's
16..256-lane source domain; the new IterationRPScratchFixScenario runs
the fixture-shaped reduction on any width and asserts the exact
width-independent total. DriverPost keeps reporting FAIL on
out-of-domain devices.
- Program203 -> IterationRP rename throughout; the per-trace
num_subgroups_quirk plumbing is removed from the trace replayer, JNI
chain, and CI workflows.
2026-08-19 09:48:11 -04:00
swung0x48
2b6c2b561c
[Fix, Test] (DirectVulkan, ShaderTranspiler, TraceReplay): derive NumSubgroups behind opt-in quirk
2026-08-18 22:31:57 -04:00
swung0x48 and Claude Fable 5
12c94111b5
[Fix, Test] (DirectVulkan, SelfTest, MG_IntegrationTest, TraceReplay): snapshot sampler/image feedback and add Program 203 diagnostics
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-18 03:04:09 -04:00
swung0x48
7769156cfc
[Fix, Test] (ShaderTranspiler, WGL, TraceReplay): remove subgroup pack quirks and tune iterationRP
2026-08-17 01:55:17 -04:00
swung0x48
0ecfdff4e7
[Fix, Test] (MG_State, MG_Util, DirectVulkan, MG_Test): replay narrow-subgroup reductions correctly
2026-08-16 13:33:01 -04:00
swung0x48
6df5a6137f
[CI] (trace-replay): run iterationRP only on DirectVulkan
2026-08-16 11:09:56 -04:00
swung0x48
b3794f4e6a
[Feat] (MG_Impl, MG_State, MG_Util, DirectGLES, DirectVulkan, MG_Test): implement ARB_clear_buffer_object correctly
2026-08-16 01:12:28 -04:00
swung0x48
14d3901d30
[Chore, Test] (MG_State, MG_Util, DirectGLES, DirectVulkan): make SPIR-V validation task-local
2026-08-15 22:58:28 -04:00
swung0x48
d4766513e4
[Fix, Test] (DirectVulkan): replay Photon descriptor pressure correctly
2026-08-15 22:35:39 -04:00
swung0x48
72dc7aa6aa
[Chore] (MG_Config, MG_State, MG_Util): gate SPIR-V validation at startup
2026-08-15 22:35:39 -04:00
swung0x48
9d1b280375
[Fix, Test] (MG_Util, MG_Test): rename Photon-conflicting MSL identifiers
2026-08-15 09:40:13 -04:00
swung0x48
8acd885594
[Fix, Test] (DirectVulkan): preserve viewport-index program metadata
2026-08-15 09:40:13 -04:00
swung0x48
10ff5e2b18
[Fix, Test] (DirectGLES, DirectVulkan): advertise indirect draw capabilities accurately
...
- advertise GL_ARB_draw_indirect when supported
- gate GL_ARB_base_instance on complete non-zero firstInstance semantics
- synchronize Driver POST reporting
- add capability and extension-advertisement regression tests
2026-08-15 06:30:44 -04:00
swung0x48
a6e52476f3
[Chore] (CMake): skip embedded SPIRV-Tools executables
2026-08-15 05:48:41 -04:00
swung0x48
0deff52a1b
[Fix, Test] (DirectVulkan, trace-replay): replay quarter-turn surfaces correctly
2026-08-13 06:45:28 -04:00
swung0x48
50fefca959
Merge branch "feat/cts-viewport-array" into dev
2026-08-13 04:57:40 -04:00
swung0x48
42ad62b54c
[Fix, Test] (MG_Util, MG_IntegrationTest): advertise the GL 4.3 VIEWPORT_BOUNDS_RANGE floor on a GLES driver that has no such query, instead of a range admitting no origin
2026-08-13 04:44:23 -04:00
swung0x48
f41403e227
[Feat, Test] (MG_Backend/DirectVulkan, MG_Test, MG_IntegrationTest): rasterize the viewport gl_ViewportIndex selects, instead of collapsing all sixteen onto viewport 0
2026-08-13 04:44:23 -04:00
swung0x48
5fbb17f6b9
[Feat, Fix, Test] (MG_State, MG_Impl, MG_Backend, MG_Test): give ARB_viewport_array real 16-element indexed state instead of eight stubs and a viewport-0 echo
2026-08-13 04:44:23 -04:00
swung0x48
92d8f7269b
[Fix] (MG_IntegrationTest): drop the executable bit a copied-in scenario file carried
2026-08-13 04:29:23 -04:00
swung0x48
822e405c77
Merge branch "feat/vk-barrier-layer-ranges" into dev
2026-08-13 04:28:57 -04:00
swung0x48
b8233f9c4e
[Fix, Test] (MG_Backend/DirectVulkan, MG_IntegrationTest): the barrier before every attachment transfer only ever moved layer 0, so a copy off a non-zero layer read a layout nothing had transitioned
2026-08-13 04:01:20 -04:00
swung0x48
595d140036
Merge branch "feat/cts-copyimage-magma-layers" into dev
2026-08-13 03:11:21 -04:00
swung0x48
b62d1f2078
[Fix, Test] (MG_Backend/DirectVulkan, MG_IntegrationTest): map a layered CopyImageSubData onto the axis each endpoint keeps its slices on, instead of copying slice 0 and calling it done
2026-08-13 02:49:57 -04:00
swung0x48
5e82ff968a
Merge branch "feat/cts-rgb9e5-raw-transfer" into dev
2026-08-13 02:47:18 -04:00
swung0x48
6a80a82dd3
[Fix, Test] (MG_Util, MG_Backend/DirectGLES, MG_Backend/DirectVulkan, MG_Test): a packed texel whose client type already spells its storage word must cross glGetTexImage unencoded, or the RGB9_E5 shared exponent gets canonicalized
2026-08-13 02:41:37 -04:00
swung0x48
f9182a5ca3
Merge branch "fix/cts-copyimage-level-validation" into dev
2026-08-13 02:38:43 -04:00
swung0x48
f37b511fca
[Fix, Test] (MG_Impl/GLImpl, MG_Backend/DirectVulkan, MG_Backend/DirectGLES, MG_Test, MG_IntegrationTest): a glCopyImageSubData to a mipmap level the texture never had is INVALID_VALUE, not a subresource handed to the driver
2026-08-13 02:28:55 -04:00
swung0x48
38027d21f8
Merge branch "feat/log-level-semantics" into dev
2026-08-13 02:19:26 -04:00
swung0x48
373aa44dd7
Merge branch "fix/cts-tess-ssbo-crash" into dev
2026-08-13 01:38:58 -04:00
swung0x48
96646df12e
[Fix] (MG_Backend/DirectVulkan): review round - failure diagnostics take MGLOG_E, the once-per-patch-size success note takes MGLOG_D, and the per-draw refusal stays latched
2026-08-13 01:34:57 -04:00
swung0x48
f20b20e643
[Fix, Feat, Test] (MG_Backend/DirectVulkan, MG_Test): synthesize the pass-through tessellation control stage GL gives an evaluation-only program, and refuse the half-tessellated pipeline Mali dereferences null inside
2026-08-13 01:28:35 -04:00
swung0x48
2587814970
Merge branch "feat/cts-image-format-qualifier" into dev
2026-08-12 19:23:51 -04:00
swung0x48
43398e33e8
[Fix, Test] (MG_Util, MG_IntegrationTest): review round - anchor a clone only behind a real definition, decline the atomic-image shape, and say what the software lanes cannot falsify
2026-08-12 19:12:39 -04:00
swung0x48
b7557d6615
[Feat, Fix, Test] (MG_Util, MG_Backend/DirectGLES, MG_IntegrationTest): bake the bound image format into the ESSL a format-less image declaration needs
2026-08-12 18:56:31 -04:00
swung0x48
bce34d7fac
Merge branch "feat/cts-followup-fp64-ds-imgbuf" into dev
2026-08-12 17:56:13 -04:00
swung0x48
f91857266f
[Fix, Test] (MG_Backend/DirectGLES, MG_Test): the tessellation stages never got the flat qualifier an ES linker compares across both sides of every integer interface
2026-08-12 17:50:31 -04:00
swung0x48
49cb1be0fd
[Fix, Test] (MG_Backend/DirectGLES, MG_IntegrationTest): a shader writing a buffer texture through an image unit left the CPU shadow stale, so every map and readback after it saw the old bytes
2026-08-12 17:50:31 -04:00
swung0x48
a51c68bb2c
[Fix, Test] (MG_Util, MG_IntegrationTest): a 64-bit float constant was read as 32 bits, so every comparison against a round double became an epsilon test against zero
2026-08-12 17:50:25 -04:00
swung0x48
1c723a6cfc
Merge branch "feat/cts-image-targets" into dev
2026-08-12 16:52:34 -04:00
swung0x48
44805bfa07
[Fix, Test] (MG_Util, MG_Backend/DirectVulkan, MG_IntegrationTest): adversarial review - the rewritten 1D-array image collided with a module's own 2D-array one and left an invalid duplicate type; pin the component order, keep the subject kinds in a truncated matrix
2026-08-12 16:49:59 -04:00
swung0x48
257fcbfd0b
[Fix, Test] (MG_Util, MG_Backend/DirectVulkan, MG_IntegrationTest): review round - one module parse for the shaders with no 1D-array image, per-kind values the combined case can name, and the invariants two shared buffers rest on
2026-08-12 16:43:29 -04:00
swung0x48
2b46a3db96
[Fix, Test] (MG_Util, MG_Backend/DirectGLES, MG_Backend/DirectVulkan): the two image target kinds a compute dispatch could not read - 1D-array on ES, imageBuffer on Vulkan
2026-08-12 16:11:10 -04:00
swung0x48
0b36621069
Merge branch "feat/cts-diag-wave" into dev
2026-08-12 15:33:43 -04:00
swung0x48
9ee2e0a1db
[Fix] (MG_Backend/DirectGLES): re-push the texture parameters a regenerated driver texture has lost, instead of trusting caches that outlived it
2026-08-12 15:22:39 -04:00
swung0x48
6b6623ae72
[Fix, Test] (MG_Backend, MG_Impl, MG_State): advertise the uniform-block and stencil-texturing strings a 4.0 context hides behind, forward DEPTH_STENCIL_TEXTURE_MODE to both backends, and stop a reserved transform feedback name passing for an object
2026-08-12 15:12:01 -04:00
swung0x48
a6e029734b
[Test, Doc] (MG_IntegrationTest, MG_Backend/DirectGLES): review wave - stop the skip paths leaking their GL objects, normalise the clip enables a neighbouring scenario leaves behind, and state what the software lanes cannot falsify
2026-08-12 13:57:32 -04:00
swung0x48
e7d6bfddac
[Fix, Test] (MG_Backend/DirectGLES, MG_State, MG_Util): publish the real default framebuffer depth/stencil format, forward the clip distance enables, and stop trusting a stale format probe for non-2D depth attachments
2026-08-12 13:34:39 -04:00
swung0x48
f2c879528f
Merge branch "feat/es-ds-readback" into dev
2026-08-12 12:12:49 -04:00
swung0x48
e005c8b6cb
[Test] (tools/trace_replay): drop the minecraft-26.2-main-menu fixture
2026-08-12 11:07:38 -04:00
swung0x48
535b5e3095
Merge branch "feat/cts-xfb-respec-compressed" into dev
2026-08-12 10:35:09 -04:00
swung0x48
1b05a84928
[Fix, Test] (MG_State, MG_Backend, MG_Impl, MG_Test): review wave - hand the mapping back instead of renewing it, retire an immutable ES store on respecify, and tag glTexStorage2D levels too
2026-08-12 10:32:39 -04:00
swung0x48
7ccb762936
[Fix, Test] (MG_Impl, MG_Test): a persistently mapped unpack buffer is a legal source for the compressed uploads too
2026-08-12 09:24:57 -04:00
swung0x48
442e7eec1c
[Docs] (MG_IntegrationTest): the capture-buffer note described a bug that is fixed and pinned elsewhere now
2026-08-12 09:22:17 -04:00
swung0x48
2787d15706
[Fix] (MG_Impl): the compressed sub-image bounds check added two application-supplied ints
2026-08-12 09:19:50 -04:00
swung0x48
74ce58a6c7
[Fix] (MG_Backend/DirectGLES): a declined map renewal left the respecify pointing at immutable storage
2026-08-12 09:17:54 -04:00
swung0x48
bb122ebd4f
[Test] (MG_IntegrationTest): the DSA enable-disable-attributes case, reassembled where it can be stepped through
2026-08-12 08:56:13 -04:00
swung0x48
9b0ed5b3af
[Fix, Feat, Test] (MG_Impl, MG_Test): a specific compressed internalformat now tags the level it defines, and the compressed sub-image entry points stopped being stubs
2026-08-12 08:52:01 -04:00
swung0x48
0e31c1481b
[Fix, Test] (MG_State, MG_Backend/DirectVulkan, MG_Backend/DirectGLES, MG_IntegrationTest): a respecified capture buffer left the transform feedback writing one store and the readback reading another
2026-08-12 08:42:45 -04:00
swung0x48
811f32760e
[CI] (test): gate the retrace pipeline on the integration lane - build-retrace and trace-cases now need it
2026-08-12 08:41:19 -04:00
swung0x48
01381a0404
Merge branch "feat/cts-baseinstance-dsa-bufstorage" into dev
2026-08-12 08:23:57 -04:00
swung0x48
0f02b0fdb1
[Fix] (MG_Util): the POST base-instance row described an emulation that no longer exists
2026-08-12 08:22:26 -04:00
swung0x48
3be02abf47
[Fix] (MG_Impl): multisample renderbuffers ignored the integer formats own sample limit
2026-08-12 08:17:11 -04:00
swung0x48
f91d6b676c
[Fix] (MG_Impl): the per-stage atomic-counter-buffer limits answered GL_INVALID_ENUM instead of their zero
2026-08-12 08:12:32 -04:00
swung0x48
1ebf191f94
[Fix, Test] (MG_Backend/DirectGLES, MG_Util): baseInstance reached the shader but never the vertex fetch
2026-08-12 08:12:27 -04:00
swung0x48
ccad803023
Merge branch "feat/cts-vab-current-attrib" into dev
2026-08-12 07:40:47 -04:00
swung0x48
21159caf31
[Fix, Test] (MG_Util, MG_Backend/DirectGLES): transform feedback captured nothing at all from an interface block
2026-08-12 07:38:50 -04:00
swung0x48
ea4819a21d
[Fix, Test] (MG_State, MG_IntegrationTest): an array vertex input occupies one location per element, not one location in total
2026-08-12 07:36:12 -04:00
swung0x48
6b882b3ccf
Merge branch "feat/fp64-demote-to-fp32" into dev
2026-08-12 06:42:23 -04:00
swung0x48
96bd36c50b
[Docs] (README): the MOBILEGL_ADVERTISE_FP64 switch
2026-08-12 06:41:54 -04:00
swung0x48
46fbd837b3
[Fix, Test] (MG_State, MG_Impl, MG_IntegrationTest): a double uniform initializer no longer reads zero
2026-08-12 06:41:54 -04:00
swung0x48
796a57a115
[Feat, Test] (MG_Backend, MG_Util, MG_Impl): report the fp64 tier at startup, decline 64-bit vertex formats everywhere, advertise GL_ARB_gpu_shader_fp64 only on request
2026-08-12 06:25:35 -04:00
swung0x48
62a2dae5ba
[Fix, Test] (MG_Impl, MG_State, MG_IntegrationTest): glUniform*d stores what the demoted shader reads
2026-08-12 06:20:11 -04:00
swung0x48
532836c058
[Feat, Test] (MG_Util): demote every 64-bit float in a shader to 32 bits, with the block layout re-derived
2026-08-12 06:11:50 -04:00
swung0x48
2fced2241b
[Fix, Test] (MG_Util, MG_State, MG_Backend): the GL 4.3 vertex binding model - array vertex inputs, zero binding strides, instance divisors, and formats ES refuses
2026-08-12 05:36:00 -04:00
swung0x48
21b5fc2d92
Merge branch 'feat/cts-draw-parameters' into dev
2026-08-12 04:24:54 -04:00
swung0x48
1f753ab5fa
[Test] (MG_IntegrationTest): the draw-parameter builtins, read back out of the shader the draw produced
2026-08-12 04:18:08 -04:00
swung0x48
3ed9501be5
[Fix, Feat, Test] (MG_Backend/DirectGLES, MG_Test): the draw-parameter builtins never reached the draws that carry them, and glMultiDrawArraysIndirectCount had no backend at all
2026-08-12 04:18:08 -04:00
swung0x48
7311251f30
[Fix] (MG_Util, MG_Backend/DirectVulkan): GL reads gl_BaseVertex as zero on a non-indexed draw where Vulkan's builtin hands over firstVertex
2026-08-12 04:18:07 -04:00
swung0x48
7625cf450d
[Fix, Test] (MG_Impl, MG_IntegrationTest): a block count may not exceed its binding points, and an atomic-counter buffer size must survive division by them
2026-08-12 02:38:04 -04:00
swung0x48
450eb209b6
[Fix, Test] (MG_State, MG_Impl): the program interface of a separable program is its own first and last stage, not vertex and fragment
2026-08-12 02:38:04 -04:00
swung0x48
8c5c39b3c3
[Feat, Test] (MG_Impl): glBindTextures and glBindImageTextures were no-op stubs while GL_ARB_multi_bind was advertised
2026-08-12 02:38:03 -04:00
swung0x48
64a0ea397c
[Perf] (CI): rewrite one rolling ccache entry per job on the default branch instead of saving one per run
2026-08-12 01:56:17 -04:00
swung0x48
205d837942
[Fix, Test] (MG_Backend/DirectGLES, MG_Util, CI): keep an explicit LOD constant under a new avoid flag - folding the bias uniform into it kills the ANGLE llvmpipe JIT
2026-08-12 01:42:55 -04:00
swung0x48
b5e9339c66
[Fix] (MG_Util): the unsupported-buffer-textures log tells a too-old driver apart from one whose entry point failed to resolve
2026-08-12 01:24:41 -04:00
swung0x48
e310e3e9ff
[Fix, Test] (MG_Util, MG_Backend/DirectGLES, MG_Test): resolve buffer textures through the entry point the tier ships, not the ES 3.2 core name; bound the OES retarget to an exact extension name
2026-08-12 01:24:40 -04:00
swung0x48
a0bf4a83bc
[Fix, Test] (MG_Util, MG_Backend/DirectGLES, MG_Test, MG_IntegrationTest): detect buffer-texture support, emit the directive the driver advertises, and name the capability when it is missing
2026-08-12 01:24:40 -04:00
swung0x48
97facf777b
[Fix] (MG_Backend/DirectVulkan): act on a failed binding remap, bound the storage-block array count, and correct the decline rationale review found describing the reverted mechanism
2026-08-12 01:09:56 -04:00
swung0x48
5cfbb716c0
Merge remote-tracking branch 'origin/dev' into feat/sampler-array-descriptors
2026-08-12 00:58:20 -04:00
swung0x48
64c3411d70
[Perf] (CI): restore unchanged trace fixtures from the Actions cache keyed on their Git LFS pointer oid, downloading only on a miss
2026-08-12 00:49:47 -04:00
swung0x48
f3a0d9e0a3
[Refactor] (CI): move the trace fixture LFS pointer and verification helpers into a shared library
2026-08-12 00:49:47 -04:00
swung0x48
068786e812
[Fix, Test] (MG_Backend/DirectVulkan, MG_IntegrationTest): a declined descriptor must refuse the draw, not just leave the layout - a multi-dimensional sampler array otherwise faulted in the shader
2026-08-12 00:45:36 -04:00
swung0x48
8e7cc62c24
[Test] (MG_Benchmark): a standing UnorderedMap observatory - the container's own shapes, measured through the alias so a future swap re-runs the same suite
2026-08-12 00:40:57 -04:00
swung0x48
d2a36d65a3
[Fix, Test] (MG_Backend/DirectVulkan, MG_IntegrationTest): a sampler uniform array is one binding with many descriptors too - Magma wrote only element zero, and declines the multi-dimensional shape loudly
2026-08-12 00:31:37 -04:00
swung0x48
a020de76e3
Merge remote-tracking branch 'origin/dev' into feat/sampler-array-descriptors
2026-08-12 00:18:51 -04:00
swung0x48
574634adfa
[Fix, Test] (MG_Backend/DirectVulkan, MG_IntegrationTest): let the binding remap accept the descriptor arrays that now have per-element paths, and reserve image-info scratch for them
2026-08-12 00:14:18 -04:00
swung0x48
e71d715e1a
[Fix, Test] (MG_Backend/DirectVulkan, MG_Util, MG_Test): VkProgramObject move dropped stageSpirvDigests - a robin-hood swap would pair one program's modules with another's digests; sanity tests assert key identity, not iteration counts
2026-08-12 00:11:56 -04:00
swung0x48
7b946fd527
[Fix] (MG_Backend/DirectVulkan, MG_Util): RenderPassEntry needs move assignment - robin-hood probing swaps entries, so mapped types must be swappable
2026-08-12 00:11:55 -04:00
swung0x48
8f3ce5f5b7
[Fix] (MG_Backend/DirectGLES, MG_State, Docs): CopyImageSubData held a registry reference across a re-entrant sync; retarget container rationales at the new erase contract
2026-08-12 00:11:54 -04:00