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
BZLZHH
d8d7530011
[Fix, Test] (MG_Backend/DirectGLES, MG_Util, MG_Impl): widen three-channel render targets wherever the driver refuses them
...
Complementary Reimagined would not load through Espryt on Mali: Iris got
GL_FRAMEBUFFER_UNSUPPORTED building its composite framebuffer, because
colortex1 is RGB8_SNORM and colortex2 is RGB16F - three-channel formats
that no real ES driver can render to (EXT_render_snorm covers R/RG/RGBA
only, and the float extensions exclude the RGB forms). The frontend's
probe cache diagnosed this correctly and then had nothing to offer: the
NoThreeChannelRenderTarget widening machinery existed but was gated to
multisample targets alone. llvmpipe turns out to refuse most of the same
attachments - CI retrace stayed green only because a replay never
branches on glCheckFramebufferStatus - so this was never a desktop-vs-
device split, just an unlit path.
The widening now applies to every color-attachable image, renderbuffers
included, riding the driver-probe branch so the native format is still
tried first and substituted only on refusal. One ThreeChannelWidening
table owns the widened (internalformat, format, type) triple per source
format - the previous per-case branches disagreed with each other and
could emit an unuploadable (RGBA16F, GL_RGB, GL_BYTE) combination or
widen into another three-channel format the driver refuses just the
same. Uploads repack three-component client data to four with the
format's own one in the alpha channel (127 is not 1 for RGB8I - the
integer arms carry integer ones); readback drops the synthetic alpha,
derived from the actual image being read, not the bound framebuffer,
so glGetTexImage through a scratch FBO cannot be confused by an
unrelated widened attachment.
Stored alpha on a widened attachment is now an invariant 1.0 rather
than an accident: the color-mask sync clears the alpha bit per draw
buffer (glColorMaski for MRT mixes), and clears route through
glClearBufferfv with alpha substituted on widened slots only -
scissored clears inherit the discipline for free, integer color
buffers keep their explicit integer-clear path, and glGet still
answers the application's own mask. GL_DST_ALPHA blending, blits and
readback therefore all see 1.0 without further interception.
DriverPost grows the rows this bug earned: EXT_color_buffer_float
detection (previously unreferenced anywhere) with a FAIL row when
absent, the missing EXT_render_snorm row, and a three-channel-
attachment row that reports one representative per widening class -
graded so a half-float-only driver warns about the 32-bit float gap
instead of being declared unsupported.
Gates: 606/606 unit at default and with the async kill switch; full
retrace, both backends - the complementary fixtures now run with the
widening ACTIVE on llvmpipe and pass with a slightly better SSIM than
before; ext caselist DirectGLES holds 3914/4867 with zero set drift
while 54 cases move from NotSupported to genuinely passing; on the
Mali-G77 device, Complementary Reimagined builds its pipeline and
renders in-world through Espryt (md5-verified build), BSL still green.
A new ThreeChannelAttachmentScenario pins the frontend answer -
COMPLETE where it used to say UNSUPPORTED - on the real driver.
2026-08-09 15:28:34 -04:00