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
swung0x48
747864777e
[Test] (IntegrationTest): pin the layered 3D and cube-map-array attachment shapes and their per-layer routing
2026-08-27 04:37:29 -04:00
swung0x48
6fc3504bd9
[Fix] (Framebuffer): carry the layered flag through the GL_DEPTH_STENCIL_ATTACHMENT split
2026-08-27 04:37:28 -04:00
swung0x48
df1bcdba09
[Fix] (DirectVulkan): legal view types for layered 3D/cube attachments, and a real failure channel for the render-pass builder
2026-08-27 04:19:06 -04:00
swung0x48
843c61dee1
[Chore] (ShaderTranspiler): pin glslang fork at 7e255451 (GL_ARB_cull_distance registration and version-gated availability)
2026-08-27 04:01:43 -04:00
swung0x48
c0a3f4cc50
[Docs] (Getter): restate the uniform-binding airtightness argument against the per-stage sum, not the combined limit
2026-08-27 03:54:17 -04:00
swung0x48
06744fde7f
[Fix] (Getter): close the review findings - six-stage combined uniform blocks, bounded uniform-block bindings, honest vertex-stream count, per-format sample ceilings
2026-08-27 03:54:16 -04:00
swung0x48
6cc9faf772
[Feat] (Program): report the geometry and tessellation link properties glGetProgramiv had no source for
2026-08-27 03:49:38 -04:00
swung0x48
7168f2ef77
[Fix] (Getter): answer the GL 4.6 limit surface honestly - tess/cull/subroutine pnames, TBuiltInResource drift, 84 UBO binding points, 64-bit GL_MAX_ELEMENT_INDEX, per-category sample truth
2026-08-27 03:47:16 -04:00
swung0x48
07669aacd4
[Fix] (ShaderTranspiler): fan #extension implications out to both new gates and bound the mid-line #version probe to its line
2026-08-27 03:35:58 -04:00
swung0x48
d52a3b2196
[Test] (IntegrationTest): sample-shading state reaches both backends without disturbing the draw
2026-08-27 03:35:58 -04:00
swung0x48
9e23016dd4
[Perf] (ShaderTranspiler): memchr the mid-line #version scan and gate it on an accepted directive
2026-08-27 03:35:57 -04:00
swung0x48
f1354dc25e
[Fix] (DirectVulkan): hash the sample-shading state into the pipeline memo key
2026-08-27 03:35:56 -04:00
swung0x48
b7a694711a
[Test] (IntegrationTest): gl_NumSamples scenario - the value must follow the draw framebuffer, not the link
2026-08-27 03:35:56 -04:00
swung0x48
2ae848ca19
[Fix] (ShaderTranspiler): route restored ES extension macros through glslang's custom preamble and detect a mid-line repeated #version
2026-08-27 03:35:55 -04:00
swung0x48
acf86d1fb6
[Feat] (RenderState): implement glMinSampleShading and the GL_SAMPLE_SHADING enable on both backends
2026-08-27 03:35:55 -04:00
swung0x48
07a0408a28
[Fix] (ShaderTranspiler): lower gl_NumSamples onto a reserved global-UBO uniform, restore ES preamble extension macros, tolerate a repeated #version
2026-08-27 03:35:47 -04:00
swung0x48
18fccdd796
[Feat] (Backend): advertise OpenGL 4.6 (target version + OpenGL44/45/46 tokens) on both backends
2026-08-26 23:48:36 -04:00
swung0x48
0d2fceab0e
[Docs] (DeviceBench): note session.sh leaves frequency pins active by design
2026-08-26 05:52:34 -04:00
swung0x48
82decded58
[Test] (TraceReplay): minecraft-1.21.4-rd12-odinlite-in-world perf fixture (campaign benchmark scene)
2026-08-26 05:52:33 -04:00
swung0x48
d04a3394de
[Feat] (DeviceBench): launch retry loop (signal-34 JVM flake), session.sh runner, MSYS path-conversion guards
2026-08-26 05:52:32 -04:00
swung0x48
33eabfc2ff
[Perf] (DirectGLES): upload the union dirty box instead of scatter rects when staging through the unpack ring (each PBO-sourced glTexSubImage is a GPU copy job on Mali; ~100 sprite rects per tick cost +6ms/frame of GPU time)
2026-08-26 05:52:31 -04:00
swung0x48
56e5d13dc9
[Perf] (DirectGLES): stage glTexSubImage uploads through a persistent-mapped unpack PBO ring (Mali blocks the render thread on in-flight destination textures)
2026-08-26 05:52:30 -04:00
swung0x48
34b7cc772f
[Fix] (Build): compile fordebug native code as RelWithDebInfo (debuggable APK was shipping an -O0 libMobileGL.so, invalidating all performance measurements on this flavor)
2026-08-26 02:18:47 -04:00
swung0x48
c1d6a3c908
[Feat] (TraceReplay): benchmark mode with per-frame timing for device fixtures
2026-08-26 02:17:35 -04:00
swung0x48
386bd7e461
[Feat] (DeviceBench): scripted in-game FPS benchmark harness (FCLFPS logcat sampling, MTK ppm frequency pinning, thermal gate, GPU busy telemetry)
2026-08-26 01:51:04 -04:00
swung0x48
12df061e0b
[Test] (SelfTest): model the vertex-input-location and layered-blit defects in the fake driver and pin both probes' controls
2026-08-25 05:57:58 -04:00
swung0x48
d83a48da5c
[Fix] (SelfTest): read the probe-saved texture bindings off the same unit the restore puts them back on
2026-08-25 05:40:08 -04:00
swung0x48
b3100b0de5
[Fix] (DirectGLES): take the layered-blit substitute's colour destination from the draw buffer that is actually enabled, and leave self-overlapping copies alone
2026-08-25 05:38:12 -04:00
swung0x48
1cde801a01
[Fix] (DirectGLES): blit onto a non-zero array layer with glCopyImageSubData where the driver ignores the destination layer
2026-08-25 05:27:46 -04:00
swung0x48
52c050131e
[Fix] (DirectGLES): advertise the vertex attributes whose layout(location) the driver's compiler will actually accept
2026-08-25 05:21:50 -04:00
swung0x48
ebb8a4cebf
[Fix] (DirectGLES, DirectVulkan): answer GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT with the storage limit, not the uniform one
2026-08-25 05:21:42 -04:00
swung0x48
5398fb4289
[Fix] (IntegrationTest): report the backend that actually comes up when MOBILEGL_BACKEND_TYPE is unset
...
HeadlessGL reported the literal "<unset>" as the backend name when the variable was
not set, while MG_ConfigLoader::InitBackendType defaults it to DirectGLES and brought
DirectGLES up. Every ctest entry sets the variable through its ENVIRONMENT property,
which is why nothing ever noticed - but run straight from an adb shell, where nothing
sets it, the name matched neither backend and every case gated on DirectGLES skipped
as though DirectGLES were not running. On an Adreno 830 that silently disabled the
gl_ViewportIndex emulation control and the DirectGLES-only attachment scenarios.
2026-08-25 04:52:21 -04:00
swung0x48
7f2ca68615
[Test] (IntegrationTest): take the shader-compiler and viewport quirks from the environment instead of internal symbols
...
Android links this module against the SHIPPING libMobileGL.so on purpose, so the
on-device run validates the real artifact - and that library is -fvisibility=hidden.
Six symbols the scenarios reached for were therefore undefined and the executable
could not be linked at all: MG_Config::Features, SetAsyncShaderCompileSuspended,
ShaderCompilePool::Get/GetThreadCount/SetMaxConcurrency and
AsyncShaderCompileEnabled. All six are gone rather than exported.
CompilerThreadScope now restores the pool with glMaxShaderCompilerThreadsKHR
(0xFFFFFFFF), which MaxShaderCompilerThreadsKHR_State defines as exactly the two
steps it used to perform by hand, and AsyncAndSyncProgramsRenderIdenticalFrames
picks its two modes with the same entry point - a zero count compiles inline, a
nonzero one lifts that - so the switching is now itself under test.
ExtensionStringMatchesTheConfiguration stops deriving its expectation from
AsyncShaderCompileEnabled(), the very function the backends gate the extension
string on: it was asserting the implementation against itself and would have passed
however wrong both halves were. The expectation is now MOBILEGL_ASYNC_SHADER_COMPILE
as the process inherited it, and the case skips where that is unset because the
built-in default is a value only the implementation knows.
Both-mode coverage in one ctest run is preserved by registration rather than by
in-process forcing, and is wider than before. New entries, each APPENDING to the
common/Vulkan environment so the EGL-vendor and ICD pinning is not lost - a ctest
ENVIRONMENT property replaces the job environment rather than adding to it:
DirectGLES./DirectVulkan.AsyncOn. run all of AsyncCompileScenario with
MOBILEGL_ASYNC_SHADER_COMPILE=1; .AsyncOff. run the extension case with =0, which
asserts the withdrawn side that nothing covered before;
.OptimisticShaderStatus. run the Iris-shaped case with
MOBILEGL_ASYNC_OPTIMISTIC_SHADER_STATUS=1 (its own entries because the quirk is not
neutral for the rest of the scenario); DirectGLES.NoViewportArrayEmulation. runs the
emulation control with MOBILEGL_FORCE_VIEWPORT_ARRAY_EMULATION=0. Run from a device
shell with nothing set, the ambient configuration runs and the rest skip cleanly.
1836 -> 1853 ctest entries, all green.
2026-08-25 04:52:14 -04:00
swung0x48
b12ef4d717
[Test] (DirectVulkan): ask each unbound-descriptor case only for the limit its own resource kind needs
2026-08-25 03:44:36 -04:00
swung0x48
724755d9df
[Test] (DirectVulkan): pin the image-uniform numeric domain the unbound placeholder is chosen from
2026-08-25 03:44:36 -04:00
swung0x48
59f7059bf4
[Fix, Test] (DirectVulkan): keep the draw when a program declares an image-backed resource the application left unbound
2026-08-24 05:31:15 -04:00
swung0x48
4446c861be
[Fix, Test] (DirectVulkan): keep the draw when a program declares a storage block the application left unbound
2026-08-24 04:57:05 -04:00
swung0x48
602da1d131
[Merge] (GLImpl, DirectGLES, DirectVulkan): complete direct state access and the compressed-texture family
2026-08-22 22:47:08 -04:00
swung0x48
06bbaf32b1
[Merge] (GLImpl, DirectGLES, DirectVulkan): take the extension advertisements under the DSA completion
2026-08-22 22:42:47 -04:00
swung0x48
9bcf0a15a0
[Docs] (DirectGLES, DirectVulkan): correct what advertising cube map arrays actually unlocks
2026-08-22 22:03:26 -04:00
swung0x48
26e5a946ac
[Test] (GLImpl): pin the DSA name rule on the compressed 3D by-name entry point
2026-08-22 21:56:51 -04:00
swung0x48
dc543fa905
[Feat, Test] (DirectGLES, DirectVulkan, SelfTest): advertise the implemented extensions that were never named
2026-08-22 21:54:17 -04:00
swung0x48
f559d68728
[Feat, Test] (GLImpl): store and patch compressed 3D texture images, and wire the 1D/3D named entry points
2026-08-22 21:49:33 -04:00
swung0x48
48968a663f
[Fix, Test] (GLImpl, Util): let a buffer clear take a GL_INT pattern into a normalized format
2026-08-22 21:49:26 -04:00
swung0x48
0fdcb5d6c4
[Feat] (DirectGLES, DirectVulkan): advertise GL_ARB_sync and GL_ARB_shader_atomic_counters
2026-08-22 21:45:13 -04:00
swung0x48
6b25e7a7e3
[Fix] (GLState): report the storage flags glBufferData implies
2026-08-22 21:45:13 -04:00
swung0x48
50d260c840
[Fix] (GLImpl): reject memory-barrier bits the spec does not define
2026-08-22 21:45:13 -04:00
swung0x48
6a8bf4c03c
[Fix, Test] (DirectVulkan): resolve a lowered atomic-counter block from the atomic-counter binding points
2026-08-22 21:45:13 -04:00
swung0x48
01098e9dd7
[Fix] (GLImpl): raise the errors ARB_sync specifies for ClientWaitSync, WaitSync and GetSynciv
2026-08-22 21:45:12 -04:00
swung0x48
82244e9048
[Merge] (GLState, GLImpl, DirectGLES, DirectVulkan, ShaderTranspiler): land texture views, the 4.3 version claim and the extension unlocks
2026-08-22 14:28:37 -04:00
swung0x48
7bd2f08313
[Fix] (DirectGLES): stop advertising GL_ARB_texture_view, whose functional half fails on a host driver that has EXT_texture_view
2026-08-22 13:40:35 -04:00
swung0x48
121b99f8c3
[Fix, Test] (DirectVulkan, GLImpl): size a 1D-array texture's mip chain and layered attachment by the axis that carries its layers
2026-08-22 12:52:10 -04:00