swung0x48
9eae98581f
[Test] (SelfTest, POST): probe upload/draw ordering in persistently mapped vertex arenas - native GLES controls distinguish mapped destination corruption from staging and synchronization failures
...
Add the persistent buffer ordering probe to the GLES POST's known-driver-bug inventory. Queue updates and draws into independent FBOs before reading them back, covering SubData and copies from both coherent persistent and ordinary staging buffers. Retry fresh mapped allocations for intermittent corruption.
Require passing never-mapped and fully serialized controls before reporting a finding. Include finish-before, map-then-unmap and barrier diagnostics, preserve caller GL state, and treat setup, allocation and GL errors as inconclusive. This adds detection and reporting only; no rendering workaround is enabled.
Validation: all 46 DriverBugProbesTest tests pass, including 11 new ordering, control, collector and cleanup cases. The Android API 26 / NDK 27 native probe detects all three upload paths on Mali-G1-Ultra r54p1 with clean controls and no GL errors. llvmpipe reports no finding after 240 mapped FBO checks per upload path.
2026-09-07 00:44:08 -04:00
swung0x48
d7655247f7
[Fix, Test] (DirectGLES, Integration): rebind VAOs when an adopted buffer is respecified - the immediate retire path forgot the buffer-id generation, so cached vertex and element bindings kept the deleted store
...
Advance the buffer-id generation when Ops_Respecify retires immutable storage on the context thread, matching the existing adoption and deferred-retirement paths.
Add pixel regression coverage for unchanged VBO/IBO attachments across same-size redefinition, growth and shrinkage, including bound and unbound VAOs sharing a vertex arena and an index arena returning to shadow storage.
2026-09-06 22:55:06 -04:00
swung0x48
50fb13430f
[Merge] (MG_State, ShaderTranspiler, tools/cts): land the write-map landing and open-ended fp64 storage block fixes that take KHR-Single-GL45.subgroups to 100% on Magma
2026-09-05 05:43:34 -04:00
swung0x48
d4f8adcf6d
[Tools, Test] (tools/cts, MG_Test): make the CTS runner's chunk timeout idle-based so a healthy 20-minute invocation is no longer killed and its in-flight case mis-recorded as a crash, and link MSVC test executables with /WHOLEARCHIVE so the dllimport gl* references in GetProcAddress.cpp resolve
2026-09-05 05:36:50 -04:00
swung0x48
795e08f7e6
[Fix, Test] (ShaderTranspiler): flatten fp64 storage blocks whose last member is a runtime array - the pass declined them, so the fp64 demotion re-derived ArrayStride 4 over the application's 8/16/32-byte double buffer and every double/dvecN data[] SSBO read raw words
2026-09-05 05:36:49 -04:00
swung0x48
1e7ecab4db
[Fix, Test] (MG_State, BufferObject): land a non-persistent write map's staged bytes into a GPU-resident store at unmap and explicit flush instead of dropping them - SSBO binding and large-store adoption make resident stores reachable through glMapBufferRange, so every per-draw re-initialisation was silently lost
2026-09-05 05:36:48 -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