swung0x48
19fc7346c5
[Fix] (MG_Backend/DirectVulkan): a re-entrant cache lookup dangled the reference glShaderStorageBlockBinding then wrote through
2026-08-11 23:05:21 -04:00
swung0x48
bcb0e894ef
[Fix, Test] (MG_State, MG_Backend/DirectGLES, MG_Util, MG_IntegrationTest, MG_Test): array layout(binding=N) elements bind consecutively, a read+write image reaches ESSL legally, compute local_size comes from the linked intermediate, and glShaderStorageBlockBinding is baked into the generated source
2026-08-11 23:05:21 -04:00
swung0x48
794c10e56c
[Fix] (3rdparty/glslang): bump the fork to the invariant-placement and atomic-counter-lowering patches
2026-08-11 23:05:20 -04:00
swung0x48
28390667d7
[Docs] (tools/trace_replay): sundial-lite's sampler state is identical on both stacks - the crash is a driver defect, not a dangling binding
2026-08-11 23:04:25 -04:00
swung0x48
90dd9bec77
[Docs] (tools/trace_replay): sundial-lite crashes in llvmpipe's JIT on a NULL per-texture-unit descriptor
2026-08-11 22:54:50 -04:00
swung0x48
7994ca31d3
[Docs] (tools/trace_replay): sundial-lite has no output-array indexing - separate cause from improved-transparency, and it reproduces locally
2026-08-11 22:48:51 -04:00
swung0x48
5705e05156
[Docs] (tools/trace_replay): sundial-lite kills the emulator via a host llvmpipe segfault, not OOM
2026-08-11 22:38:14 -04:00
swung0x48
ab62f81545
[Docs] (tools/trace_replay): the local farm ANGLE is not the CI ANGLE - re-attribute the improved-transparency causes
2026-08-11 22:32:14 -04:00
swung0x48
f6cf04d6d7
[Docs] (tools/trace_replay): name the two generated-ESSL defects that empty the improved-transparency lane on ANGLE
2026-08-11 22:25:57 -04:00
swung0x48
38eb9589f9
[Test] (tools/trace_replay): dump every live framebuffer attachment at a call boundary
2026-08-11 22:25:57 -04:00
swung0x48
99ebf67a3d
[Fix] (CMake): the Android API guard holds a floor of 26, not an exact pin - higher platforms may configure, the minSdk-26 gradle build enforces API usage
2026-08-11 22:08:54 -04:00
swung0x48
2292e99476
Merge remote-tracking branch 'origin/dev' into dev
2026-08-11 21:59:25 -04:00
swung0x48
4c5afecc71
Merge branch 'fix/drop-android-api-pin' into dev
2026-08-11 21:59:05 -04:00
swung0x48
1c5744f2be
[Fix] (MobileGL, Build): drop the __ANDROID_API__ source pin; hold API 26 in CMake instead
2026-08-11 21:58:30 -04:00
swung0x48
22859b0958
[Docs] (tools/trace_replay): localise the improved-transparency ANGLE divergence to the OIT composite
2026-08-11 21:55:40 -04:00
swung0x48
7aa958fbc9
[Docs] (tools/trace_replay): reproduce the Android DirectGLES lane on Linux, and pin improved-transparency below MobileGL
2026-08-11 21:43:56 -04:00
swung0x48
a4bd4e04a1
Merge branch 'fix/ssbo-rc13' into dev
2026-08-11 21:11:38 -04:00
swung0x48
09459edb6b
[Fix] (CI, android-plugin): an ANGLE window surface lost before init finishes is infrastructure, not a trace failure
2026-08-11 21:00:31 -04:00
swung0x48
8af6ebc174
[Fix] (MG_State): seed uniform initializers through the phase-A gate, not off the raw artifact block
2026-08-11 20:59:25 -04:00
swung0x48
577cd8c670
[Fix] (3rdparty/glslang): bump the fork to the uniform-initializer preservation patch
2026-08-11 20:56:59 -04:00
swung0x48
5267243404
[Test] (MG_IntegrationTest): pin declared uniform initializers end to end, on both backends
2026-08-11 20:56:07 -04:00
swung0x48
33c2715912
[Fix] (MG_State, MG_Util): a default-block uniform starts at its declared initializer instead of zero
2026-08-11 20:54:14 -04:00
swung0x48
3068cdadf8
[Test] (CI): keep the emulator log of the attempt that lost the emulator, and record host memory pressure
2026-08-11 20:51:54 -04:00
swung0x48
6dd0201bf2
[Fix, Test] (MG_Impl/GLImpl): an indexed buffer SIZE query reports the range that was asked for, not what the buffer currently holds
2026-08-11 20:43:28 -04:00
swung0x48
05bef7118b
[Fix, Test] (MG_State): a pipeline draw uses the block bindings its stage programs were given, not the ones their shaders declared
2026-08-11 20:23:06 -04:00
swung0x48
94e75fef79
[Fix, Test] (MG_State, MG_Impl): glIsProgramPipeline answers for the first bind, not for the materialization every pipeline command now does
2026-08-11 20:10:18 -04:00
swung0x48
43bcd03dca
[Fix] (MG_Backend/DirectVulkan, MG_Impl): a malformed graphics pipeline shape skips the draw instead of faulting inside the driver
2026-08-11 20:10:18 -04:00
swung0x48
2ce0595fab
[Fix, Test] (MG_State, MG_Impl, MG_Backend): a program pipeline's compute stage is dispatched on its own, and the graphics composite draws its stage programs' uniform values
2026-08-11 20:10:17 -04:00
swung0x48
ba9af18033
[Test] (MG_IntegrationTest): park the two program-pipeline cases whose mechanisms are still open
2026-08-11 20:10:17 -04:00
swung0x48
f7d63f88fa
[Fix, Test] (MG_State, MG_Impl): a reserved program-pipeline name takes state from UseProgramStages and its siblings instead of rejecting them
2026-08-11 20:10:16 -04:00
swung0x48
6cf5a7744e
[Test] (MG_IntegrationTest): separable programs drawn through a program pipeline object
2026-08-11 20:10:16 -04:00
swung0x48
ca3d24f5ea
[Fix] (CI, android-plugin): keep a failed Android retrace's result artifact, and echo the logs a failed replay already wrote
2026-08-11 19:30:38 -04:00
swung0x48
cc34d34706
[Fix, Test] (MG_Backend/DirectGLES): hand every compiled shader's lifetime to its program - glDeleteShader was never called, so each program build leaked its driver shader objects
2026-08-11 11:11:28 -04:00
swung0x48
757b31592d
[Fix, Test] (MG_Backend/DirectVulkan): a multisample resolve that must also change orientation resolves through a pooled scratch image, then blits
2026-08-11 10:49:58 -04:00
swung0x48
dbae4eda10
[Fix, Test] (MG_Backend/DirectVulkan): depth blits to or from the default framebuffer convert their rect out of GL's bottom-origin space, like the colour blit does
2026-08-11 10:24:59 -04:00
swung0x48
fa5ff5d168
[Test] (MG_IntegrationTest): every texture access routine must read the same texel out of a usampler2DArray
2026-08-11 10:21:38 -04:00
swung0x48
994ae372f8
[Fix, Test] (MG_Backend/DirectVulkan): an SSBO block instance array is one binding of N descriptors, so bind every element from its own GL binding point
2026-08-11 10:11:23 -04:00
swung0x48
7ba012adf9
[Test] (MG_IntegrationTest): SSBO runtime-array length across preambles, block arrays and bound ranges
2026-08-11 10:11:23 -04:00
swung0x48
b1fdffd767
[Fix, Test] (MG_Backend/DirectVulkan): read the default framebuffer's depth and stencil back instead of leaving the caller's buffer untouched
2026-08-11 10:11:22 -04:00
swung0x48
18c17ae5ca
[Fix, Test] (MG_Backend/DirectVulkan): a blit into the default framebuffer must execute the clear parked before it, not leave it for the readback
2026-08-11 10:08:25 -04:00
swung0x48
16c010985f
[Fix, Test] (MG_Impl): multi-bind name rejection is per element, and only transform feedback constrains the range size to a multiple of four
2026-08-11 09:17:51 -04:00
swung0x48
6f64ec0f51
[Fix, Test] (MG_Impl): validate indirect-dispatch and indirect-count arguments before the backend-availability check
2026-08-11 09:12:49 -04:00
swung0x48
5d47698349
[Fix, Test] (MG_Backend/DirectVulkan): materialize the default framebuffer's pending clear before a readback, alpha included
2026-08-11 09:09:31 -04:00
swung0x48
7b593e39ef
[Fix, Test] (MG_Impl, MG_State): negative-path GL errors for multi_bind, indirect_parameters, texture_storage, compute dispatch/link and buffer-range alignment; indexed getters answer the full pname table
2026-08-11 09:02:22 -04:00
swung0x48
d83b4dbbb5
[Fix, Test] (MG_State, MG_Impl): ARB_vertex_attrib_binding state model - spec stride default, legacy stride/pointer shadows, divisor re-binds, core-profile VAO-0 rejection
2026-08-11 08:49:37 -04:00
swung0x48
964a7fcc92
[Fix, Test] (MG_State, MG_Backend/DirectVulkan): resolve transform-feedback captures that name a member of an output interface block
2026-08-11 08:39:39 -04:00
swung0x48
5a7bd9942d
[Fix] (MG_Backend/DirectVulkan): print VkShaderModule as a 64-bit value - the const void* cast is ill-formed on 32-bit ABIs where the handle is a plain uint64_t
2026-08-11 08:19:31 -04:00
swung0x48
21a43bf6a4
[Fix, Test] (MG_Backend/DirectVulkan): re-land the gl_FragCoord default-framebuffer origin fix - the suspected slowdown was a mismeasurement, paired timings are within 1%
2026-08-11 07:54:24 -04:00
swung0x48
5b6dec2d81
[Revert] (MG_Backend/DirectVulkan): back out the gl_FragCoord default-framebuffer origin fix - correct, but it costs DirectVulkan a large order-dependent slowdown that is not yet root-caused
2026-08-11 06:30:30 -04:00
swung0x48
543c29bf86
[Fix, Test] (MG_Backend/DirectVulkan): gl_FragCoord on the default framebuffer reports GL's window origin - the stored row is not the window row once the viewport rect is converted
2026-08-11 05:25:32 -04:00
swung0x48
ef562ee9b5
[Fix, Test] (MG_Backend/DirectGLES): backend framebuffer, renderbuffer and sampler twins release their driver ids - a framebuffer per readback leaked the driver into stale pixels
2026-08-11 03:54:05 -04:00
swung0x48
fa0f6693d0
[Fix, Test] (MG_State, MG_Impl): reflection-backed glGetProgramiv queries answer zero instead of dereferencing a null TProgram
2026-08-11 02:59:10 -04:00
swung0x48
a6c362c6ce
[Fix, Test] (MG_Backend/DirectVulkan): convert every default-framebuffer rectangle between GL and display Y origins - viewport, scissor, ReadPixels offset, rect-capable readback remap, blit source
2026-08-11 02:51:22 -04:00
swung0x48
921504eccf
[Fix, Test] (MG_Backend/DirectVulkan, MG_Util): clamp Vulkan-derived GL buffer limits and saturate the uint32 to Int casts
2026-08-11 02:38:51 -04:00
swung0x48
7c5fc03b26
[Fix, Test] (MG_Backend/DirectVulkan): never bind or cache a null pipeline, and name the modules a failed vkCreateGraphicsPipelines rejected
2026-08-11 02:33:32 -04:00
swung0x48
ed29e63543
[Fix, Test] (MG_Impl): glGetProgramResourceiv reports a written length on every exit path
2026-08-11 02:27:26 -04:00
swung0x48
5c8a9c41d6
[Fix, Test] (MG_Impl, MG_State): GL entry points record errors instead of throwing through the C ABI - CopyTexImage superset rule, TEXTURE_BUFFER level queries, indexed cap toggles
2026-08-11 02:24:41 -04:00
swung0x48
efa0345c36
[Fix] (MG_Backend/DirectVulkan): offscreen surfaces never touch a window system - delete the hidden-Xlib fallback, make surface and device-enumeration failures loud, guard zero devices
2026-08-11 00:58:24 -04:00
swung0x48
ce0f18969c
[Fix] (MG_Util): dlopen the versioned libEGL.so.1 first - the unversioned name is a dev-package symlink absent on runtime-only systems, and its silent failure nulled every EGL entry point
2026-08-11 00:58:23 -04:00
swung0x48
7ce0966e7d
[Fix, Test] (MG_IntegrationTest): the harness is surfaceless by construction - never binds a window system, hardware demand split out of REQUIRE_GPU, pre-flight crashes keep their cores
2026-08-11 00:58:22 -04:00
swung0x48
1c6ca2753f
[Test] (CI): wire the integration-gpu lane into the Test workflow - lavapipe ICD pinned at configure time, REQUIRE_GPU armed, failure-only core-dump artifacts in every native lane
2026-08-11 00:58:21 -04:00
swung0x48
61b0532865
[Fix] (MG_Backend/DirectVulkan): replay client-memory multi-draw through the single-draw path - the batched shared index view cannot express per-draw client pointers and dropped the whole batch
2026-08-10 21:58:06 -04:00
swung0x48
f5b8a505ed
[Fix] (MG_Backend/DirectVulkan): keep the transient arena's outgrown buffers alive until frame rewind - the transient drain freed them while frame-serial memos still bound them
2026-08-10 21:47:28 -04:00
swung0x48
8371365db5
[Fix] (MG_Backend/DirectVulkan): include the texture enum converter the WARN-level log line needs - VulkanRenderer.cpp did not compile below INFO log level
2026-08-10 21:47:27 -04:00
swung0x48
b219992ee3
[Feat, Perf, Test] (MG_Util, MG_Backend, MG_Test): test-lane SPIR-V validation latch; entry-local Private rewrite, in-chain rect lowering and uniform-Location strip
2026-08-10 13:00:20 -04:00
swung0x48
94233ef928
[Fix] (MG_Backend/DirectVulkan): drop draws and dispatches when a program has no optimized SPIR-V - a phase-B failure left raw glslang words in GetGeneratedSpirv
2026-08-10 13:00:11 -04:00
swung0x48
0827d7a539
[Fix] (MobileGL): define the numeric log levels in Defines.h - the MOBILEGL_ASSERT gate compared undefined tokens in TUs that never include Log.h
2026-08-10 13:00:10 -04:00
swung0x48
5248b8b746
[Test] (MG_Test): replay a real Iris shader pair through the whole async frontend, both phases and both quirk states
2026-08-10 10:06:26 -04:00
swung0x48
d868e1c476
[Test] (MG_Util, MG_State): remove the TEMP stage-timing probes - the async-compile measurement campaign is done
2026-08-10 09:56:05 -04:00
swung0x48
c3412ca394
[Fix, Test] (MG_Util): give inactive vertex inputs a Location - undecorated inputs are invalid SPIR-V and Adreno rejects the whole pipeline
2026-08-10 09:27:01 -04:00
swung0x48
5ccaff37af
[Fix] (MG_State): revert the Cut A-prime reorder - device dumps prove the ordering is not the pipeline failure, and record the third measurement
2026-08-10 08:58:38 -04:00
swung0x48
71e29f9d58
[Fix] (MG_State): keep GlslangToSpv ahead of buildReflection - reflection-first drops a vertex input's Location decoration and Adreno rejects the pipeline
2026-08-10 08:33:47 -04:00
swung0x48
8ad07c222c
[Test] (MG_Test): cover the cancelled-SPIR-V program, the buffered-write valve and drop, the delete-does-not-block bound and the zero-thread join
2026-08-10 07:31:58 -04:00
swung0x48
5722094d6f
[Docs] (MG_State): the early AST drop frees only the re-parsed shaders - the compile node co-owns the rest
2026-08-10 07:31:58 -04:00
swung0x48
4831387cf0
[Fix] (MG_State, MG_Backend/DirectVulkan): a program whose SPIR-V job was cancelled faulted on the first glUniform - bounds-check the shadow lookup
2026-08-10 07:31:57 -04:00
swung0x48
d03b72267a
[Perf] (MG_State): drop the parsed ASTs as soon as the SPIR-V job has generated its modules
2026-08-10 06:37:49 -04:00
swung0x48
847ec74f48
[Test] (MG_Test): AsyncSpirvPhaseTest - phase-A completeness, buffered-uniform replay, version bumps and the cancel matrix
2026-08-10 06:12:39 -04:00
swung0x48
e02e5caa17
[Fix] (MG_State, MG_Backend/DirectGLES): join both link phases on the draw and drain paths, and refuse to bind a program whose SPIR-V never arrived
2026-08-10 06:08:30 -04:00
swung0x48
1958934594
[Feat] (MG_State, MG_Impl): buffer non-opaque glUniform writes across the SPIR-V window and replay them at its publish
2026-08-10 06:05:37 -04:00
swung0x48
dec0c5eaff
[Refactor, Test] (MG_State, MG_Util): split the link into ProgramLinkTask (query surface) and a chained ProgramSpirvTask behind its own join gate
2026-08-10 06:02:52 -04:00
swung0x48
b6a44cd1e2
[Refactor] (MG_State): run reflection and link validation before SPIR-V generation - the ordering constraint retested byte-identical
2026-08-10 05:50:20 -04:00
swung0x48
85f45d0e44
[Test] (MG_Util, MG_State): TEMP spirv-null plumbing probe for the allocator-pathology discriminator
2026-08-10 05:42:23 -04:00
swung0x48
404236d337
[Test] (MG_Util, MG_State): TEMP stage-timing probes for the async-compile campaign - remove before merge
2026-08-10 05:16:24 -04:00
swung0x48
6ea948779e
[Feat, Test] (MG_Impl, MG_State, MG_Util): opt-in MOBILEGL_ASYNC_OPTIMISTIC_SHADER_STATUS - shader compile status/log answer without joining, latched per compile
2026-08-10 02:06:17 -04:00
swung0x48
c5569e71b3
[Feat] (tools/cts): automate Windows WGL conformance runs
2026-07-30 23:00:13 -04:00
swung0x48
7e8c32a063
[Feat] (MG_Backend, MG_Impl): expose experimental GL 4.6 CTS limits
2026-07-30 23:00:13 -04:00
swung0x48
77bd03d962
[Chore]: remove unnecessary doc
2026-07-30 21:56:17 -04:00
swung0x48
37111ae992
[Perf] (DirectVulkan): snapshot-gated consecutive-draw fast path skips SetupDraw re-resolution
2026-07-30 09:40:54 -04:00
swung0x48
6b0c2a15ab
[Perf] (DirectVulkan): reuse unchanged global-UBO slices and skip identical descriptor binds
2026-07-30 08:18:21 -04:00
swung0x48
e9ffd99313
[Perf] (DirectVulkan): bake the attribute location mask and memoize the explicit-LOD eligibility probe
2026-07-30 08:18:20 -04:00
swung0x48
7c01ddea0c
[Perf] (DirectVulkan): drop per-draw weak-ptr locks, re-resolves and rebuilt masks from the sampled-texture and vertex paths
2026-07-30 08:01:07 -04:00
swung0x48
2d4d6e9cfb
[Perf] (DirectVulkan): skip pending-clear probes through a lock-free empty check
2026-07-30 07:02:03 -04:00
swung0x48
76b8957b99
[Perf] (DirectVulkan): memoize sampled-texture resources across draws
2026-07-30 07:02:02 -04:00
swung0x48
ec685b9fa7
[Perf] (DirectVulkan): memoize resolved vertex-input state on the VAO and dedupe vertex/index binds
2026-07-30 07:02:01 -04:00
swung0x48
a12068df52
[Perf] (DirectVulkan): reuse pipelines across per-chunk buffers and skip redundant pipeline binds
2026-07-30 05:01:46 -04:00
swung0x48
0b344792cc
[Fix] (DirectVulkan): stop fence-waiting out-of-band texture uploads; reclaim transients asynchronously
2026-07-30 05:01:46 -04:00
swung0x48
9fa32bdad0
[Fix] (DirectVulkan): declare only the used colour attachment span per subpass
...
- every render pass declared colorAttachmentCount=8 (the full GL draw-buffer
slot span) with trailing VK_ATTACHMENT_UNUSED references, and Adreno
configures its per-pixel render-backend/export path from the DECLARED
count - so every fragment of every pass paid an 8-render-target export
cost; this was the bulk of the 1.5x per-pixel gap against
MobileGlues+ANGLE on the same Qualcomm driver (their subpasses declare
exactly the used span)
- measured on Adreno 650 / MC 26.2 / 1440x3044: total GPU frame time
11.9 -> 7.5 ms (-37%, now below ANGLE's 7.87 ms), the single-quad
swapchain blit pass alone 1.26 -> 0.40 ms, steady in-world FPS 82.8 -> 123
under the standard cooled-start protocol, matching the
MobileGlues+ANGLE+system-Vulkan benchmark of 123.8
- trailing UNUSED references are popped before the subpass is built (the
entry's colorAttachmentCount and every pipeline's colour-blend span follow
it); interior GL_NONE holes keep their slots so fragment-output locations
still line up
- the pipeline-side fragmentOutputMask check downgrades from assert to a
debug log: an output at a location past the trimmed span is discarded,
which is GL's defined behaviour for a draw buffer set to GL_NONE
2026-07-30 02:45:39 -04:00
swung0x48
a4980f2b56
[Fix] (DirectVulkan): skip redundant per-draw dynamic-state commands
...
- viewport, scissor, blend constants, depth bias, line width and the six
stencil parameters were re-emitted unconditionally for EVERY draw (~1500
vkCmdSet* per frame in MC 26.2, where ANGLE emits a handful), costing CPU
record time and GPU command-processor work for values that almost never
change between draws
- a recording-scoped shadow now drops any vkCmdSet* whose values match what
the command buffer already holds; valid because every PipelineFactory
pipeline declares the same eight dynamic states, so set values persist
across those binds
- the shadow resets at every command-buffer (re)begin (dynamic state does
not survive the boundary) and after binding the blit or depth-mipmap
pipelines, whose narrower dynamic sets make the untouched states undefined
and whose raw viewport/scissor writes bypass the shadow
2026-07-30 02:45:07 -04:00
swung0x48
8ca20e28ca
[Fix] (DirectVulkan): size texture backings by their defined mip level count
...
- every non-MSAA texture was allocated with a full mip chain regardless of
how many levels the GL texture actually defines, so MC's 3044x1440 main
colour and depth render targets each carried 12 levels where ANGLE
allocates one; a level-0-only texture now gets a single-level backing and
upgrades to the full chain exactly once when a second level is first
defined, through the existing preserve-copy recreation path
- saves a third of the memory of every mip-less texture and keeps
single-level render targets off the multi-mip image layout entirely, which
also removes the surface the Adreno 650 implicit-LOD overread workaround
(ForceExplicitLod0SamplePass) exists to defend
- measured perf-neutral on Adreno 650 / MC 26.2 (the driver keeps full UBWC
on multi-mip render targets), so this is a memory/robustness fix, not a
speed one
2026-07-30 02:43:32 -04:00
swung0x48
c353a2055f
[Feat] (DirectVulkan): pre-pass command stream for reorderable out-of-pass work
...
- a draw whose sampled texture needs out-of-pass work (deferred clear
materialization or a sampled-layout transition) used to end the active
render pass - a full-target store+reload on a tiler - even when the only
ordering the work needs is 'before this draw'; MC 26.2 clears an overlay
texture every frame and samples it mid-pass, splitting the main scene pass
once per frame for nothing
- every frame slot now carries a second primary command buffer, submitted
strictly AHEAD of the frame command buffer in the same vkQueueSubmit; when
the open recording has not referenced the image yet (tracked via a
recording-generation stamp on the texture resource, advanced on every
frame-command-buffer begin and stamped at every recorded reference:
attachments at BeginRenderPass/attachment-write, sampled reads per draw,
layout transitions), the clear/transition is recorded there and the active
pass stays open - ANGLE's outside-render-pass command stream, restricted
to the provably reorderable case
- mid-frame flushes and readback submits close and carry the pre stream with
the frame buffer (it must never be submitted later than the recording it
was paired with), retiring both under the same submit index; dropped
recordings (present suspension, swapchain recreation) abandon it
- MaterializePendingClearForTexture's no-active-render-pass assert now
applies only to the frame command buffer, since the pre stream records
while a pass is open on the frame buffer by design
2026-07-30 02:43:13 -04:00