Skip to content

feat(npcppwebapi): return the product label member reference - #15823

Open
JJenkx wants to merge 1 commit into
boykopovar:mainfrom
JJenkx:feat/npcwa-product-label-20261104
Open

JJenkx wants to merge 1 commit into
boykopovar:mainfrom
JJenkx:feat/npcwa-product-label-20261104

Conversation

@JJenkx

@JJenkx JJenkx commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

What

Implement InGameCatalog::V5::Product::getLabel (NID RbvteD35X-8) as a non-owning const reference to the member at object+0x30, represented by an opaque pointer. It currently throws on main. This does not interpret the member as character storage or copy/construct its contents.

Refreshed to one topic commit edb5b00d5ad9699a603152eb285d068d1cdb89d1 on main 7264864185f8455d30a11130a17d670a84fb7723. The header conflict is resolved while preserving main's separate getSkus(out,self) and opaque-reference getType declarations. The validated label implementation is unchanged.

Tested

Linux x86-64, GCC16.2.1, Ninja Release. Scoped build of the actual NP CMake module and its module/root CPU fixtures against a frozen libc/dependency bank from main7264; not a full-SDK build.

  • Main11/11; change12/12, zero skips. The product fixture checks member identity at three object locations, unchanged owner bytes and aliasing after an owner update.
  • Same final product executable: main's module gives the expected getLabel ... not implemented refusal(exit1); the change passes(exit0). ldd verifies each module/provider selection; fixture and frozen provider hashes remain unchanged.
  • Both public-header audits pass:406libraries/30612exports. Conventions have0errors (two nonfatal existing debt-length warnings); whitespace and current-main merge preview pass.
  • Compiled accessor bytes are 48 8d 47 30 c3, SHA256 0321673b432666a4424b02037c714740e175afd4c7f72138d0cda95f04ca6414, identical to the complete accessor bodies previously inspected in the modules bundled with PPSA21564 and PPSA05347. Those modules were inspected statically, never executed. Object construction, label contents, other SDK layouts, physical-console, refreshed-head Windows, title/GPU and FPS behavior are untested.

Current source diff, pins, scoped build recipe, logs/JUnit, header audits and compiled/reference/control evidence, SHA256 27764703850d2f1682cd94f9712149f0945a070af9827ed4145c159ac23b60ca (download verified). Original two-module static-reference evidence retains its original pins; it is not a test of the refreshed head.

The November2 staged-import snapshot found this export in37canonical titles. This is static import evidence, not a runtime call or title-unblock claim. Refreshed-head Windows validation is requested separately; earlier reports retain their original pins.

Overlap: current #14136 (92a37c0) and #14273 (24364bb) still refuse this getter. Both main and this branch merge cleanly with each exact head after preserving the newer adjacent declarations. No combined-runtime qualification is claimed.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw; silent stubs are listed in library technical debt
  • No notes, investigation files or images added to the repository
  • New third-party code is a submodule built from source (none added)
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none (no runtime/title unblock established)
  • GPUs tested: n/a (CPU-only accessor)
  • AI-assisted: yes

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Progress report (396ae3d → edb5b00)

📈 System libraries: 27.33% (+0.0026%, +1 implemented functions)

✅ 1 implemented
Library Name
libSceNpCppWebApi _ZNK3sce2Np9CppWebApi13InGameCatalog2V57Product8getLabelEv

Changed libraries (implemented exports)

Library Before After Change
libSceNpCppWebApi 997/1426 (69.92%) 998/1426 (69.99%) +0.07%

@JJenkx

JJenkx commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

Windows check for the scheduled cross-platform review, at head d428a277d6 merged onto main b611e634f7 (66d088a414, clean merge).

Setup: Windows 11 Enterprise 22621, WinLibs GCC 15.2 UCRT, Release. The hosted Windows check does not run this test on pull requests.

  • guest_np_cpp_web_api_product passes in 3 of 3 runs.

AI-assisted: yes.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Nov 5, 2026
@TechLevelZero

Copy link
Copy Markdown
Contributor

❌ AMD GPU test: failed

PR head d428a27 merged onto main e772fb2 · tested 2026-11-05 17:45 UTC · 30 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ❌ 2,483 passed · 10 failed (1 new: 1 fail on main with the PR's tests too, 8 also fail on main, 1 unstable on main) · 17 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,510 of 4,074 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (1076 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.1 s, ⚠️ public_headers 85.3 s, ⚠️ agc_driver_graphics_maps_fallback 75.8 s, ⚠️ agc_driver_graphics 67.6 s, ⚠️ agc_graphics_profile_draw 60.3 s

Failing tests

This PR changes test files, so each failing test was also built and run on main with only the PR's test changes applied. ✅ there means the failure comes from the PR's other changes; ❌ means the test fails on main too, so this run does not show the PR caused it.

Test With this PR Same test on main e772fb2 (main + this PR's test changes only)
agc_graphics_profile_draw ❌ failed ❌ also fails
agc_graphics_profile_draw: Timeout (also failed when re-run alone), assertion and diagnostics
ctest: Timeout

[guestmem] read 0 calls 0 MiB 0.0 s compare 0 calls 0 MiB 0.0 s write 0 calls 0 MiB 0.0 s write-changed 0 calls 0 MiB 0.0 s collect 0 calls 0 MiB 0.0 s verify 1 calls 0 MiB 0.0 s query 0 calls 0 MiB 0.0 s collect-memo hits 0, collect epochs 0 collect-dirty 0 tracker waits 0 / 0 | arena 0x10000+0xfbf
[textures] sampled created: 0 from storage images, 0 cleared on the GPU, 0 snapshots (0 snapshot reads over recorded writes inside cachedTexture, 0 storage-path fallbacks); stage-A records 0: 0 fast hits, 0 full lookups; storage images 0 hits, 0 created, 0 own-object refreshes; image tables 0 reused
[guestmem] read 135 calls 6 MiB 0.0 s compare 0 calls 0 MiB 0.0 s write 44 calls 0 MiB 0.0 s write-changed 15 calls 0 MiB 0.0 s collect 0 calls 0 MiB 0.0 s verify 110137 calls 598 MiB 0.2 s query 0 calls 0 MiB 0.0 s collect-memo hits 0, collect epochs 0 collect-dirty 0 tracker waits 0 / 74705 | aren
[bufferpool] small: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB); large: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB); device: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB of 512); images: 0 hits, 0 misses, 0 evictions, 0 retained (0 MiB of 128)
[buffers] image mirrors: 0 ranges (0.0 MiB, 0 writable, 0 heap 0.0 MiB), 0 address-based builds served, 0 descriptor sub-ranges bound, 0 sparse heaps bound, 0 rebuilds, 33637 refreshes: 0 blocks compared, 0 copied, 0 refresh syncs; heap refills 0, unwatched heaps 33637, 0 heap mirrors evicted for bu
[descriptors] layouts 0 hits / 0 created, sets 0 from 0 pools and 0 dedicated pools, samplers 0 hits / 0 created
[dcc] 54 scans, 0.0 MiB scanned, 0 memo hits, 0 flush syncs, 0.0 ms; uncompressed keys stored: 0 on the GPU (0 with an unaligned head or tail), 17 on the CPU; key proofs: 0 proved, 0 scanned, 0 unstable
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 9 of the last 10 main runs
Failing on main too (8, not counted against this PR)
agc_driver_alpha_to_coverage_sample_mask_export
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_driver_submit_progress
Validation IDs already present on main (4 IDs in 765 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (765 tests): agc_compute_pipeline_replay, agc_driver_address_draw_space_reuse, agc_driver_address_draw_space_reuse_held, agc_driver_address_draw_space_reuse_off, agc_driver_address_draw_space_reuse_transitions, agc_driver_address_draw_space_reuse_verify, agc_driver_address_passes, agc_driver_address_passes_draw_transitions, and 757 more
VUID-vkCmdCopyImage-srcImage-01548 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-vkCmdCopyImage-srcImage-01551 (11 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_cpu_write_after_memo, agc_driver_depth_plane_cpu_write_after_page_unwatch, agc_driver_depth_plane_cpu_write_after_partial_unwatch, agc_driver_depth_plane_partial_store_image_copy, agc_driver_depth_plane_partial_store_unimported, agc_driver_depth_plane_partially_unmapped_plane, agc_driver_depth_plane_unmapped_plane, and 3 more
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (2 tests): agc_driver_prepared_exports, agc_driver_srgb8_color_target
Skipped (17)
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_copied_writer_label_order_drain: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_float16_unused_nan_payloads: skipped, the device has no native f16 conversions with RTE rounding and kept f16 denormals
agc_driver_gcn_display_present: skipped, no display: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_recorded_draw_staging: skipped, the device does not keep host imports write-watched, so the target is never resident
agc_driver_scattered_runs: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_sparse_dma_buf_import: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_vertex_elected_atomic_max: skipped, the device runs vertex programs in subgroups, so they keep their cross-lane reductions
agc_idle_publish_wait: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a forced watch of the import reads its submissions as CPU stores
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_storage_pending_key_refresh: skipped, refreshes over a pending key store are not testable here
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
Reproduce
git fetch origin d428a277d6712b28c4c09a9c25e9a7fc45d22963 e772fb25cc72ee5faf77847f06bbc69533016e82
git checkout e772fb25cc72ee5faf77847f06bbc69533016e82 && git merge --no-ff d428a277d6712b28c4c09a9c25e9a7fc45d22963
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1
# the failing tests, on this merge and on main:
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc_graphics_profile_draw)$' --parallel 1 -V

Automated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Refreshed this branch to f9d211891dd145be8b9246655d5b05b408f9b38a, retaining the previous public head on pinned main 151a2cb6e274f594a09c8a2ca42f44af2e5c40d8. Source/test/CMake changes merge cleanly. The only conflict was the debt entry: main's implemented factories and DataStatus iterators are retained, and its stale claim that Product::getLabel throws is corrected.

Fresh Linux Release CPU qualification: actual NP CMake module and fixtures build; 12/12 tests pass, zero skips, versus 11/11 existing main cases. The exact same product accessor executable fails with main's NP module (expected NotImplemented refusal, exit1) and passes with this branch's module (exit0); ldd verifies each selected module. The accessor test checks member address, unchanged owner storage, and reference identity after an owner update. Conventions and whitespace checks pass (one nonfatal upstream debt-length warning).

Source diff, scoped build recipe, full build/test/JUnit logs and same-executable control evidence, SHA-256 32ca073d4bad87eccd522bb58db41fbe478293bf0fd35725a33d4efe84ad1df4; uploaded artifact downloaded and verified. The harness's initial executable-path error is retained alongside its corrected control; neither affected source or the completed test suites. This is scoped Linux qualification using a frozen libc provider, not a fresh full-SDK/Windows/console/title-unblock or FPS claim. The prior Windows report keeps its original pins. AI-assisted: yes.

@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Nov 5, 2026
@JJenkx
JJenkx force-pushed the feat/npcwa-product-label-20261104 branch from f9d2118 to edb5b00 Compare November 5, 2026 23:01
@JJenkx

JJenkx commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Refreshed to edb5b00d5ad9699a603152eb285d068d1cdb89d1 on main 7264864185f8455d30a11130a17d670a84fb7723, as one topic commit. The API header conflict is resolved without reverting main's newer Product::getSkus(out,self) and getType signatures. The accessor's implementation is unchanged; its five compiled bytes still match the previously inspected two-SDK reference.

Fresh scoped Linux qualification: main11/11, change12/12, zero skips; both header audits406libraries/30612exports. The same final product fixture hits the exact getLabel refusal on main and passes the change, with verified loader selection and unchanged provider/fixture hashes. Current-main and both #14136/#14273 pairwise merge previews are clean; neither peer implements this getter. The description links the downloaded-and-SHA-verified current evidence archive and preserves the original static-reference provenance. No refreshed Windows/full-SDK/title/GPU/FPS result is claimed.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Nov 5, 2026
@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown

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.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 16128 docs/dev/debt/libSceNpCppWebApi.md L49
PR 16505 docs/dev/debt/libSceNpCppWebApi.md L49

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.

Pull request Shared files not compared
PR 14212 docs/dev/debt/libSceNpCppWebApi.md
PR 15029 core/libs/prx/libSceNpCppWebApi/Export.cpp
docs/dev/debt/libSceNpCppWebApi.md
PR 16436 core/libs/prx/libSceNpCppWebApi/Export.cpp

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants