Repository navigation
feat(libSceGLSlimVSH): implement EGL 1.4 and GLES 2.0 state, objects and pbuffer storage - #13868
Conversation
MarcZX10
left a comment
There was a problem hiding this comment.
Tests run and reviewed — approval deferred
The source review found no substantiated blocker, but the Windows and library-portability jobs are still pending and I did not independently run the C++ test binary.
What I ran
Reviewed head 7c21f2a91eed4f72537466a931fee7951b22553e against base 02c8efdbcba38f173309ca733bc88bcb473b1f1f; the merge preview was clean against current main at cf5a1805e50ceeccf6574abd98b13e9783c412c. Environment: Linux x86_64, Python 3.11.2, GCC 12.2.0. No build or compilation was run.
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 13868
python3 tools/pr_abi_audit.py --base 02c8efdbcba38f173309ca733bc88bcb473b1f1f --head 7c21f2a91eed4f72537466a931fee7951b22553e --json
gh pr checks 13868 --repo boykopovar/AnyPS5
Results
| Check | Result |
|---|---|
| Diff whitespace | Passed |
| Conventions and PR template | Passed |
| Dependency and merge preview | Passed; clean against current main |
| ABI audit | Passed with warnings: 232 symbols inspected; 22 removed-placeholder-name warnings correspond to names the PR documents as recovered/renamed. This lexical audit does not verify runtime ABI. |
| Other precheck helpers | ABI and test-quality helper copies were absent from the exact-head checkout, so the precheck could not execute those copies; I ran the ABI helper available in the workspace against the exact base/head commits. |
| Exact-head C++ tests | Not run locally; they require a build. |
| Hosted intake, eligibility, report | Passed |
| Hosted Windows and library-portability | Pending at the latest check snapshot |
| Hosted Linux, relinker, ASAN and related jobs | Skipped by workflow |
Unedited local check output
# git diff --check
# conventions_and_pr_template stdout
All conventions checks passed.
# pr_stack_check summary
Target branch tip: cf5a1805e50ceeccf6574abd98b13e9783c412c1
All heads unchanged: True
PR #13868: clean against current base
Negative control
Not run: the added C++ test requires an exact-head binary, and the no-build precheck does not build one.
Findings
Blocking
None identified in the source review.
Non-blocking
The PR explicitly documents the non-conformant, single-pbuffer scope and the unimplemented shader compilation/linking, uniforms and draw/rasterization paths. I read these as declared limitations, not as claims of a complete GLES2 renderer.
Not verified
I did not build the library or run guest_glslim_state; the PR description reports that its host-ABI MinGW test passed, but I did not independently reproduce it. Console behavior is unmeasured. The Windows and library-portability CI jobs had not completed at the final snapshot.
THEMANnt
left a comment
There was a problem hiding this comment.
Reviewed 7c21f2a91eed4f72537466a931fee7951b22553e against 02c8efdbcba38f173309ca733bc88bcb473b1f1f. Request changes for the Windows test link failure below.
[P1] Avoid accessing DLL thread-local storage directly from the test. tests/State.cpp:112-113 (also 124-125) reads Slim::thread, declared as extern thread_local in the library. The added CMake target links the test against the shared libSceGLSlimVSH, rather than compiling its implementation into the executable. In an isolated Release build with MSYS2 UCRT64 GCC 16.2.0 Rev4 and the unmodified PR library CMake file, the DLL builds but guest_glslim_state_tests fails to link with undefined reference to Slim::thread and IMAGE_REL_AMD64_SECREL relocation errors. Please inspect the current surface through a function in the DLL, or keep these internal-storage assertions in a source-linked test; then build and run the registered shared-library target on Windows.
Validation: The original fixture passes when source-linked. A diagnostic copy replacing only Slim::thread.draw->image with *Slim::Color_nid_no_patch(Slim::Current_nid_no_patch(), false) links against the same DLL and passes. An independent public-API executable also passes 14 checks covering distinct read/draw surfaces, pack alignment, buffer-offset overflow, complete/mismatched cube mipmaps and deferred context deletion. The unchanged registered target still fails to link. Whitespace passes. These isolated builds use the pinned headers, guest System V ABI and a minimal throwing NotImplemented_nid_no_patch support function, rather than the full libc/game runtime. No full application, Vulkan, console or game test is claimed. Hosted Build is still in progress; Emscripten portability passes.
Progress report (b415263 → 19af8ed)📈 System libraries: 26.21% (+0.36%, +138 implemented, +35 declared, -22 removed functions) ✅ 138 implemented
⚪ 3 behaviourally empty (constant return or throw)
🆕 35 declared as stubs
🗑️ 22 removed
Changed libraries (implemented exports)
|
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
MarcZX10
left a comment
There was a problem hiding this comment.
Tests run and reviewed — approval deferred
On unchanged head 7c21f2a91eed4f72537466a931fee7951b22553e, Windows CI compiled and linked the new library, but did not execute its new guest_glslim_state test; Linux was skipped.
What I ran
Refreshed PR state and checks for head 7c21f2a91eed4f72537466a931fee7951b22553e (PR base 02c8efdbcba38f173309ca733bc88bcb473b1f1f) and inspected the successful Windows job log. This was hosted CI on Windows with MinGW GCC 15.2.0; I did not build locally.
gh pr checks 13868 --repo boykopovar/AnyPS5
gh run view 41192298621 --repo boykopovar/AnyPS5 --json workflowName,headSha,jobs
gh run view 41192298621 --repo boykopovar/AnyPS5 --job 124512574770 --logResults
| Check | Result |
|---|---|
| Windows compile/link | Passed for libSceGLSlimVSH.prx at the reviewed head. |
| Windows CTest | No PR-specific test ran; the job log says no guest core/libs test sources changed. The PR adds tests/State.cpp and registers guest_glslim_state, but the workflow did not select it. |
| Hosted conventions, intake, labels, eligibility, report, and library portability | Passed. |
| Linux and specialized jobs | Skipped by the workflow. |
Relevant unedited Windows job output
windows Link changed host-only core/libs test executables 2026-10-31T10:31:55.6490652Z OK: D:/a/AnyPS5/AnyPS5/build/core/libs/libs/libSceGLSlimVSH.prx
windows Build and run changed guest core/libs tests 2026-10-31T10:32:07.4094268Z No guest core/libs test sources changed
windows Build and run changed guest core/libs tests 2026-10-31T10:32:07.4094929Z No guest core/libs test sources changed; the libs build still ran
Negative control
No negative control was run by me.
Findings
Blocking: None confirmed in the source review.
Non-blocking: The new state test has not been shown running on the reviewed head. Because this is a large EGL/GLES implementation, compile and source inspection alone do not establish the added state and object behavior; I am withholding approval until there is a successful run of guest_glslim_state or equivalent exact-head evidence.
Sources
Not verified
No exact-head CTest run, Linux execution, console behavior, or GPU-backed EGL/GLES behavior was verified.
To get this to a good state
Please provide a successful exact-head guest_glslim_state run or fix the test selection so CI executes it. I will re-check the same test and the current head before changing the review status.
7c21f2a to
c886768
Compare
|
@THEMANnt Thanks, fixed in c886768. |
THEMANnt
left a comment
There was a problem hiding this comment.
Rechecked c886768: my Windows TLS link finding is resolved.
The unchanged registered test now builds against the shared library and passes on the same MSYS2 GCC 16.2 toolchain that reproduced the original failure. All 14 independent public API checks also pass, and nm -u confirms no Slim:: references remain in the test object.
The replacement texture checks exercise public framebuffer readback. The removed internal buffer, depth/stencil and mip-level assertions are no longer covered by this fixture.
No new actionable issue found in this follow-up. Hosted Build is still running; these local checks used an isolated harness, not the full libc/game runtime.
MarcZX10
left a comment
There was a problem hiding this comment.
Re-checked — new head, approval deferred
At c886768ca21c46fae090530790e1536c0b220674, the prior direct DLL thread-local access is gone and Windows builds the library, but CI still skips guest_glslim_state, so the new behavior remains unverified.
What I ran
Reviewed the current head c886768ca21c46fae090530790e1536c0b220674 against PR base fd31320e83fe417fa9c7fef792613653d9eb4f02; the precheck's merge preview was clean against that base. Environment: Linux x86_64, Python 3.11.2, GCC 12.2.0. No local build or test was run.
git diff --check 7c21f2a91eed4f72537466a931fee7951b22553e..c886768ca21c46fae090530790e1536c0b220674
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 13868
python3 tools/pr_abi_audit.py --repo /marc/AnyPS5 --base fd31320e83fe417fa9c7fef792613653d9eb4f02 --head c886768ca21c46fae090530790e1536c0b220674 --json
gh run view 41193779027 --repo boykopovar/AnyPS5 --job 124516189665 --logResults
| Check | Result |
|---|---|
| Updated test diff | The direct Slim::thread access flagged on the old head was removed. The changes also replace internal buffer/depth/stencil value assertions with glGetError()==0, so those values are no longer asserted by this test. |
| Diff and conventions | Passed. |
| ABI audit | Passed with warnings: 232 symbols inspected; warnings are the placeholder export names replaced by the names documented in the PR. This audit does not validate runtime ABI. |
| Merge preview | Clean against the stated PR base. |
| Hosted Windows | Library compilation and link passed. The registered guest_glslim_state test did not run. |
| Hosted Linux and specialized jobs | Skipped. Other reported policy checks passed. |
Unedited Windows CI output
windows Link changed host-only core/libs test executables 2026-10-31T10:51:00.0640482Z [2303/2882] Linking CXX shared library core\libs\libs\unpatched\libSceGLSlimVSH.prx
windows Link changed host-only core/libs test executables 2026-10-31T10:51:20.7784969Z OK: D:/a/AnyPS5/AnyPS5/build/core/libs/libs/libSceGLSlimVSH.prx
windows Build and run changed guest core/libs tests 2026-10-31T10:51:32.1525509Z No guest core/libs test sources changed
windows Build and run changed guest core/libs tests 2026-10-31T10:51:32.1526244Z No guest core/libs test sources changed; the libs build still ran
Findings
Blocking
None confirmed in the source review.
Non-blocking
CI did not execute the new test, and its current replacement assertions do not verify the buffer, depth, or stencil values that the removed internal assertions checked. The PR description reports a host-ABI MinGW test run, but I did not reproduce it.
Sources
Not verified
I did not run guest_glslim_state, build locally, test Linux, or verify GPU, title, or console behavior. The author's reported MinGW test result is not independently confirmed.
To get this to a good state
Please provide a successful exact-head guest_glslim_state run and retain meaningful assertions for the buffer and depth/stencil state covered before the update. I will re-run the relevant checks on the new head.
|
@PrivacyOnion, three changes are needed on
The submitted state test passes in my Linux host-ABI UBSan check. All 138 implemented signatures match the standard headers, and their NIDs match the pinned catalogue. These checks do not establish console behavior. |
c886768 to
411e17c
Compare
|
Updated in 411e17c.
@MarcZX10 The Windows job skipped the test because |
411e17c to
ea0fcca
Compare
|
Follow-up in ea0fcca: the fixture now also asserts the depth and stencil clear values through |
jotitadev
left a comment
There was a problem hiding this comment.
Linux run of head ea0fccaf7, merged (--no-commit) onto main 85cdddc1b0, in the full tree through the new add_test block (not a standalone build). Ubuntu 26.04 (kernel 7.0), GCC 15.2.0, CMake 4.2.3, Ninja, Release, BUILD_TESTING=ON, i7-8700.
guest_glslim_statebuilds and passes 3/3, including the worker-thread context and surface cases. Full build ok,public_headers65/65 (the PR touchesApi.hppandInventoryExports.hpp).- Red, keeping the test: dropping the clamp from
glClearColor's stored state inGlState.cppmakes it abort at line 63 3/3. - The earlier heads
7c21f2a91(onmaincf5a1805e5) and411e17cedgave the same results.
Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.
MarcZX10
left a comment
There was a problem hiding this comment.
Re-checked — new head, looks good
At ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e, the test now covers depth/stencil queries and clipped pixel reads, and I found no remaining blocking issue.
What I ran
Reviewed head ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e against base 85cdddc1b0e89fe66744f437513ccfdcb16f72f6; the merge preview was clean. Environment: Linux x86_64, Python 3.11.2. I did not build locally.
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 13868
python3 tools/pr_abi_audit.py --base 85cdddc1b0e89fe66744f437513ccfdcb16f72f6 --head ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e --jsonResults
| Check | Result |
|---|---|
| Diff and conventions | Passed |
| Source-level ABI audit | 232 symbols inspected; 22 warnings identify the old placeholder export names replaced by named exports; no other mismatch reported |
| Test evidence | A PR participant reports the full Linux build and guest_glslim_state passed 3/3 on this exact head, public_headers passed 65/65, and removing the glClearColor clamp made the test fail 3/3 |
| Hosted CI | Eligibility, conventions, portability, labels and report passed; Linux and specialized build jobs were skipped; Windows was still running at the final status check |
Local convention and ABI-audit summaries
All conventions checks passed.
status: passed_with_warnings
symbols: 232
findings: 22
warnings: 0
Negative control
| Assertion | Change to code under test | Outcome |
|---|---|---|
The state test detects incorrect glClearColor storage |
The PR participant reports removing the clamp in GlState.cpp |
Test aborted 3/3, as expected; I did not run this mutation myself |
Sources
- Current public-state and clipped-read assertions.
- Exact-head Linux test and negative-control report.
Not verified
I did not compile or run tests locally, and Windows CI had not finished. No physical-console or GPU-driver behavior was verified.
MarcZX10
left a comment
There was a problem hiding this comment.
Reviewed — changes requested
I am correcting my earlier approval because this head lets eglSwapBuffers succeed for a valid surface that is not the current thread's draw surface.
What I ran
Reviewed head ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e against PR base 85cdddc1b0e89fe66744f437513ccfdcb16f72f6. The live merge preview was clean against current target tip 73f4f7e06e4f210a8c6570e335fd654dc0a86134. Environment: Linux x86_64, Python 3.11.2, GCC 12.2.0. No project build or compilation was run.
git diff --check 85cdddc1b0e89fe66744f437513ccfdcb16f72f6...ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 13868
python3 tools/pr_abi_audit.py --base 85cdddc1b0e89fe66744f437513ccfdcb16f72f6 --head ea0fccaf769f7f9f00c4ccbaacf1318636ebcc4e --json > /tmp/anyps5-13868-abi.json
python3 -c 'import json; from collections import Counter; d=json.load(open("/tmp/anyps5-13868-abi.json")); print("status:", d["status"]); print("symbols:", len(d["symbols"])); print("findings:", len(d["findings"])); print(Counter(x["kind"] for x in d["findings"]))'
python3 /marc/AnyPS5/tools/pr_test_quality.py --root /tmp/anyps5-review-13868 --json core/libs/prx/libSceGLSlimVSH/tests/State.cpp
gh pr checks 13868 --repo boykopovar/AnyPS5Results
| Check | Result |
|---|---|
| Diff check | Passed; no output. |
| Conventions and PR template | Passed. |
| ABI audit | passed_with_warnings; 232 symbols inspected and 22 export-removed warnings correspond to the old placeholder names replaced in this PR. This lexical audit does not certify binary ABI or runtime behavior. |
| Test-quality heuristic | Flagged the C++ test as possibly unregistered. I inspected the PR's CMake file: tests/State.cpp is passed to add_test_executable and registered as guest_glslim_state, so this heuristic finding is a false positive. |
| Precheck runner | Partial: its temporary head worktree does not contain the local-only pr_abi_audit.py and pr_test_quality.py helper scripts, so those two subchecks could not launch there. I ran both helpers separately against the pinned head/worktree as shown above. |
| Hosted CI | Windows, conventions, eligibility, library-portability, labels and report passed; Linux and specialized jobs were skipped. |
Selected unedited check output
All conventions checks passed.
status: passed_with_warnings
symbols: 232
findings: 22
Counter({'export-removed': 22})
{
"findings": [
{
"path": "core/libs/prx/libSceGLSlimVSH/tests/State.cpp",
"line": 1,
"kind": "possible-unregistered-cpp-test",
"message": "Changed C++ test source path was not found literally in CMake files; inspect registration, generated source lists, and workflow coverage."
}
],
"negative_control_candidates": [],
"limits": [
"Heuristics can miss weak assertions and can flag valid tests; inspect every finding.",
"A test that passes against base is not by itself proof that the PR test is inadequate.",
"Negative controls are only candidates until the test actually runs against base and fails by assertion rather than import/setup error."
]
}
labels pass 12s https://github.com/boykopovar/AnyPS5/actions/runs/41195244607/job/124520830916
windows pass 7m25s https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520910723
linux skipping 0 https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520912157
register-context skipping 0 https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520911759
relinker skipping 0 https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520911638
relinker-asan skipping 0 https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520912338
write-watch skipping 0 https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124520912057
conventions pass 21s https://github.com/boykopovar/AnyPS5/actions/runs/41195244515/job/124519989534
eligibility pass 6s https://github.com/boykopovar/AnyPS5/actions/runs/41195247263/job/124519997679
library-portability pass 1m11s https://github.com/boykopovar/AnyPS5/actions/runs/41195247418/job/124519995347
report pass 54s https://github.com/boykopovar/AnyPS5/actions/runs/41195247337/job/124519995226
Findings
Blocking
eglSwapBuffers_nid_postfix at src/Egl.cpp:320-323 checks only that the display and surface are valid. It returns EGL_TRUE even when that surface is not bound as the calling thread's current draw surface. EGL 1.4 §3.10.4 requires EGL_BAD_SURFACE in that case. For example, while surface is current, swapping the valid otherSurface created in the test should fail with EGL_BAD_SURFACE (0x300d), but this implementation returns success. Please require the supplied surface to equal thread.draw and add that regression assertion.
Non-blocking
None identified in this focused re-check.
Sources
Not verified
I did not build locally or run guest_glslim_state; the hosted Linux and specialized jobs were skipped. No GPU, title, or physical-console behavior was verified. The PR's reported Windows test and another participant's reported Linux test were not rerun by me.
To get this to a good state
Please validate the current draw-surface binding in eglSwapBuffers and add the second-pbuffer regression case. I will rerun the same no-build checks and review the new exact head.
|
@MarcZX10 Fixed in 5c9bb73: |
ea0fcca to
5c9bb73
Compare
MarcZX10
left a comment
There was a problem hiding this comment.
Re-checked — new head, looks good
The new current-draw-surface check and regression cases resolve the reported eglSwapBuffers defect.
What I ran
Reviewed exact head 5c9bb732b80b2119779a7dacda8a768ffbd996c8 against the PR base 474030e58424fefdb65e5df9f3820810fbb4553c; the no-build merge preview was clean against current main 1cac0ca433924cda6be37f4f7e460c356e36ae93. I inspected eglSwapBuffers and its added current-surface and worker-thread assertions. I did not build or run the C++ test locally.
python3 /root/.codex/skills/anyps5-pr-review/scripts/pr_snapshot.py 13868 --repo boykopovar/AnyPS5
python3 tools/pr_precheck.py --repo boykopovar/AnyPS5 --pr 13868 --output-dir /tmp/anyps5-13868-rereview-5c9bb
gh api repos/boykopovar/AnyPS5/commits/5c9bb732b80b2119779a7dacda8a768ffbd996c8/check-runsResults
| Check | Result |
|---|---|
| Diff check and conventions | Passed |
| Current-main merge preview | Clean |
| Hosted Windows job | Passed; this does not establish that the focused state test ran in CI |
Author-reported guest_glslim_state DLL test and APS5_VABI object compilation |
Passed; not independently reproduced |
| Hosted Linux and specialized jobs | Skipped |
Findings
Blocking
None found in this re-check.
Non-blocking
The focused EGL state test is author-reported, not independently reproduced. Linux and console behavior remain unverified.
Sources
Not verified
I did not run a local build or guest_glslim_state, Linux runtime tests, or console behavior. Linux and specialized hosted jobs were skipped.
THEMANnt
left a comment
There was a problem hiding this comment.
Re-reviewed 5c9bb732b80b2119779a7dacda8a768ffbd996c8. My earlier DLL TLS test-link blocker remains fixed. Reviewed the subsequent context-version error, readback offset/intersection, swap-surface validation and test changes. No new actionable issue found in this follow-up.
Windows/MSYS2 GCC 16.2 Release: the unmodified registered DLL-linked state test passes. Sixteen independent checks pass, including separate read/draw surfaces, pack stride, buffer bounds, cube mipmaps, deferred context deletion and the exact sparse 2 GiB destination reproducer for the readback-offset boundary. Hosted Windows actually built and ran guest_glslim_state on this head; its selected run passed 2,524/2,524 tests. Whitespace passes. Local builds use minimal throwing libc support; no title, console, GPU rendering or complete GLES conformance claim is made.
adriadam10
left a comment
There was a problem hiding this comment.
The full Windows Build on 5c9bb732b8 fails prx_thread_local_destructors (run 41274748741); main passes it.
src/State.cpp:6/src/State.hpp:129:thread_local ThreadState threadholdsshared_ptrs, so it registers athread_localdestructor. On Windows that destructor runs after the emulated TLS freed the object. The test reportslibSceGLSlimVSH.prx: _ZTHN4Slim6threadE registers a thread_local destructorand the helpers that touch it (Current,Error,EglError,Display,Config,Complete,Color,Query).- Fix: keep the per-thread state in
HostThreadLocal<ThreadState, ThreadTag>()(core/libs/prx/libc/include/HostThreadLocal.hpp, same pattern aslibkernel/Module/src/DynamicLoader.cpp:40) and reach it through an accessor instead of thethreadglobal. Thenctest -R prx_thread_local_destructorsshould pass. - Nothing else changed in my review; the earlier approvals still apply to the rest.
…and pbuffer storage Implement the EGL 1.4 and OpenGL ES 2.0 exports that do not need a shader compiler or rasterizer as a host-side state machine following the Khronos specifications: the default display, a single RGBA8/depth16/stencil8 pbuffer configuration, ES2 contexts with share groups, per-thread current state and errors, buffers, textures with mipmap generation, renderbuffers, framebuffers and their completeness, shader and program objects, vertex attributes, every fixed-function state setter and query, clears, pixel uploads, copies and reads on CPU storage. The 22 unknown NIDs are named from the NID database and the Piglet, Orbis texture and compositor exports, together with shader compilation, program linking and reflection, uniforms, draws, native window surfaces and the Sony-specific APIs, stay NotImplemented_nid_no_patch; the gaps are in docs/dev/debt/libSceGLSlimVSH.md.
5c9bb73 to
19af8ed
Compare
|
@adriadam10 thanks, fixed in 19af8ed. The per-thread state is no longer a Checked with the same criterion as |
|
Checked the |
What
Implements
libSceGLSlimVSHEGL 1.4 and OpenGL ES 2.0 as a host-side state machine following the Khronos specifications (EGL 1.4, OpenGL ES 2.0.25). 138 of the library's 210 exports no longer throw; 72 stayNotImplemented_nid_no_patch.eglChooseConfigmatching,eglGetConfigAttrib), ES2 contexts with share groups, pbuffer surfaces with CPU color/depth/stencil storage, per-thread current context andeglGetError,eglMakeCurrent/eglReleaseThread/eglTerminatelifetime rules, surface and context queries,eglGetProcAddress.GL_RGB/GL_RGBA/GL_ALPHA/GL_LUMINANCE/GL_LUMINANCE_ALPHAwith byte and packed 565/4444/5551 types, unpack alignment,glGenerateMipmap), renderbuffers, framebuffers and completeness, shader and program objects and attachment rules, vertex attributes, every fixed-function setter andglGet*query with its default, the error flag, andglClear(scissor, masks),glReadPixels,glTexSubImage2D,glCopyTexImage2D/glCopyTexSubImage2Don that storage.tools/nid_names.py); each name hashes to its original NID. Exports of the 3.20 catalogue that were missing from the module are declared, so the export list matches the catalogue plus the seven unidentified NIDs.Shader compilation, program linking and reflection, uniforms, draws, native window surfaces, client-buffer pbuffers and the Sony-specific Piglet, Orbis texture and compositor exports stay
NotImplemented_nid_no_patch; no shader or program can report a successful compile or link.glGet*throws forGL_SHADER_COMPILER. These gaps and the implementation limits are indocs/dev/debt/libSceGLSlimVSH.md.tools/pr_overlap.pyreports the same export names in #6521; that PR implements them inlibScePigletv2VSH, a separate module, and touches nolibSceGLSlimVSHfile.Tested
Windows 11.
tests/State.cpp(registered asguest_glslim_state) uses only the exported EGL/GLES entry points, so it links against the shared library without reaching its internal thread-local state. Built as a host-ABI DLL plus a test executable linked against it with MinGW GCC 13.1 and run: passes. It covers EGL config matching, context/surface lifetime across threads, error codes, state defaults and setters, object lifetime and sharing, framebuffer completeness, clears with scissor and masks, texture pixel round trips (byte RGB and packed 565) read back through a framebuffer, mipmap generation,glReadPixelswith negative origins (pixel offsets are computed insize_tover the intersecting range only), andeglCreateContextrejecting the default ES1 request withEGL_BAD_CONFIG. The installed GCC 13.1 cannot build the guest runtime (it needs WinLibs 15.2 or MSYS2), so the guest build and CTest run are left to CI.python3 tools/check_conventions.py --base upstream/mainandpython3 core/libs/tests/test_public_headers.py --audit-onlypass. The library imports only libc symbols, so no cross-library NID import is involved. Not tested with a title.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)