Skip to content

perf(agc): probe the f32 denormal flush on MoltenVK - #8578

Merged
adriadam10 merged 1 commit into
boykopovar:mainfrom
imellag:perf/agc-f32-flush-probe-moltenvk
Oct 20, 2026
Merged

adriadam10 merged 1 commit into
boykopovar:mainfrom
imellag:perf/agc-f32-flush-probe-moltenvk

Conversation

@imellag

@imellag imellag commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

What

The startup probe that switches shaders from the emulated f32 denormal flush to the device's own flush (FloatFlushProbe, which compares 5472 results against the emulation and switches only when none differ) runs only on devices that declare shaderDenormFlushToZeroFloat32 with independent denormal behavior. MoltenVK declares neither, so on macOS every shader keeps the emulated flush around every f32 add, multiply, fma, min, max and comparison.

Float32FlushControlFor (new, Execution/include/Float32FlushControl.hpp) now decides two things from the driver ID and the float controls: whether to probe (as before, plus VK_DRIVER_ID_MOLTENVK) and whether the device declares the flush. VulkanDevice keeps the driver ID from the driver properties query and adds CapabilityDenormFlushToZero only when it is declared; SpirvModuleSetup emits the DenormFlushToZero execution mode only when that capability is supported. On MoltenVK a module compiled for the hardware flush therefore declares no execution mode and relies on the native behavior the probe measured; if any probe result differs, shaders keep the emulation as before. For every other driver the decision is the old condition, so nothing changes there. agc_float32_flush_control covers the decision; agc_driver_f32_denormal_flush also checks the natively flushed module (no execution mode, fewer words than the emulated one).

#8014 also stores the driver ID in VulkanDevice; whichever of the two merges second can use the other's field.

Tested

Apple M4 Pro, macOS 27.0.1, x86-64 under Rosetta 2, MoltenVK 1.4.2 (Vulkan SDK 1.4.363.0), Apple clang 21.0.0.

  • main 8375116: the libraries do not build on macOS, so the changed files (VulkanDevice.cpp, SpirvModuleSetup.cpp, F32DenormalFlush.cpp) were compiled on their own and agc_float32_flush_control was run: passes.
  • mugurc's macOS series ci/macos-series-2 53db0ba (plus feat(libkernel): JIT shared memory on macOS hosts #7937's code commits, needed to build libkernel, and fix(libkernel): keep host fault signals available on macOS #8477), AGC and shader suites on MoltenVK: 761/807 without this change, 762/808 with it, the same 46 failures. All 10 probe lines in that run read [float-controls] f32 denormal flush: hardware (0 of 5472 probe results differ from the emulated flush). agc_driver_f32_denormal_flush fails in both runs at the same case (v_mul_f32 v25, |v4|, -v5 gives 0x00000000, expected 0x80000000): a signed zero lost by SPIRV-Cross's helper for NoContraction multiplies, unrelated to the flush.
  • Speed: Planet of Lana (PPSA19450), standing still in the village after a restored save, 3840x2160, warm caches (each build ran once before), APS5_TRACE_SECONDS=140:5 only, base and change alternated twice in one session. The base is the macOS integration head 7cf8c61 (former feat: macOS on Apple Silicon host support (Rosetta 2 and MoltenVK) #7332) and not main, because titles do not run from main on macOS. The presenter waits about 4 ms less per frame for the GPU (GPU busy per present is noisier), and the frame rate rises by about 10%:
capture commit presents in 5 s frame p50 (ms) frame p90 (ms) GPU busy per present (ms) presenter wait (ms/frame) trace
base 1 7cf8c61 127 39.5 41.9 22.2 10.0 1-base-1-aps5-trace-7cf8c610c6a7-63071.json.gz
change 1 bb2942110 139 35.6 38.8 21.5 6.3 2-change-1-aps5-trace-bb294211065d-64633.json.gz
base 2 7cf8c61 127 39.5 41.4 24.8 10.3 3-base-2-aps5-trace-7cf8c610c6a7-66252.json.gz
change 2 bb2942110 140 35.7 37.8 17.9 5.8 4-change-2-aps5-trace-bb294211065d-67934.json.gz
Summary lines
{"commit":"7cf8c610c6a7","dirty":false,"env":{"APS5_ASYNC_PIPELINES":"1","APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"140:5"},"gpu":"Apple M4 Pro","driver":"MoltenVK 1.4.2","os":"Darwin 27.0.0","resolution":"3840x2160","window":{"spec":"seconds 140:5","first_present":5264,"ms":5032.929},"presents":127,"frame_ms":{"p50":39.459,"p90":41.929,"p99":45.242,"max":59.616},"gpu_busy_ms_per_present":22.226,"worker_busy_pct":{"queue worker 0x0":70.944},"top_phases_ms_per_frame":{"Driver.Packet":27.888,"Driver.Packet.draw":22.728,"Driver.Draw":22.532,"Graphics.Draw":14.661,"Driver.Draw.shader_compile_and_link":14.565,"VideoOut.Flip":10.904,"Driver.Present":10.141,"VideoOut.Flip.present":10.062},"trace_dropped":false,"trace":"aps5-trace-7cf8c610c6a7-63071.json.gz"}
{"commit":"bb294211065d","dirty":false,"env":{"APS5_ASYNC_PIPELINES":"1","APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"140:5"},"gpu":"Apple M4 Pro","driver":"MoltenVK 1.4.2","os":"Darwin 27.0.0","resolution":"3840x2160","window":{"spec":"seconds 140:5","first_present":5877,"ms":5000.632},"presents":139,"frame_ms":{"p50":35.568,"p90":38.840,"p99":45.673,"max":55.205},"gpu_busy_ms_per_present":21.484,"worker_busy_pct":{"queue worker 0x0":77.581},"top_phases_ms_per_frame":{"Driver.Packet":27.657,"Driver.Packet.draw":22.200,"Driver.Draw":22.007,"Graphics.Draw":14.757,"Driver.Draw.shader_compile_and_link":14.109,"Graphics.Draw.draw_and_resource_release":9.637,"VideoOut.Flip":7.256,"Shader.DrawStage":7.220},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":4.949,"events_lost":3181,"totals_full":false}},"trace":"aps5-trace-bb294211065d-64633.json.gz"}
{"commit":"7cf8c610c6a7","dirty":false,"env":{"APS5_ASYNC_PIPELINES":"1","APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"140:5"},"gpu":"Apple M4 Pro","driver":"MoltenVK 1.4.2","os":"Darwin 27.0.0","resolution":"3840x2160","window":{"spec":"seconds 140:5","first_present":5264,"ms":5011.095},"presents":127,"frame_ms":{"p50":39.534,"p90":41.368,"p99":45.362,"max":48.058},"gpu_busy_ms_per_present":24.782,"worker_busy_pct":{"queue worker 0x0":69.381},"top_phases_ms_per_frame":{"Driver.Packet":27.141,"Driver.Packet.draw":21.848,"Driver.Draw":21.651,"Graphics.Draw":14.490,"Driver.Draw.shader_compile_and_link":13.997,"VideoOut.Flip":11.166,"Driver.Present":10.443,"VideoOut.Flip.present":10.363},"trace_dropped":false,"trace":"aps5-trace-7cf8c610c6a7-66252.json.gz"}
{"commit":"bb294211065d","dirty":false,"env":{"APS5_ASYNC_PIPELINES":"1","APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"140:5"},"gpu":"Apple M4 Pro","driver":"MoltenVK 1.4.2","os":"Darwin 27.0.0","resolution":"3840x2160","window":{"spec":"seconds 140:5","first_present":5852,"ms":5008.229},"presents":140,"frame_ms":{"p50":35.669,"p90":37.750,"p99":49.340,"max":54.747},"gpu_busy_ms_per_present":17.935,"worker_busy_pct":{"queue worker 0x0":79.566},"top_phases_ms_per_frame":{"Driver.Packet":28.213,"Driver.Packet.draw":22.872,"Driver.Draw":22.671,"Graphics.Draw":14.922,"Driver.Draw.shader_compile_and_link":14.747,"Graphics.Draw.draw_and_resource_release":9.768,"Shader.DrawStage":7.534,"VideoOut.Flip":6.730},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":4.790,"events_lost":12286,"totals_full":false}},"trace":"aps5-trace-bb294211065d-67934.json.gz"}

In the two captures of the change the queue worker's trace buffer filled 4.8 and 4.9 s into the 5 s window (trace_dropped). The four traces are attached in a comment below. Linux and Windows were not run; for drivers other than MoltenVK the probe decision is unchanged, as the unit test checks.

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 (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: Apple M4 Pro, MoltenVK 1.4.2 (Vulkan SDK 1.4.363.0), macOS 27.0.1
  • AI-assisted: yes

The startup probe that lets shaders use the device's f32 denormal flush
instead of the emulated one only ran on devices that declare
shaderDenormFlushToZeroFloat32 with independent denormal behavior.
MoltenVK declares neither flushing nor preserving f32 denormals, so every
shader kept the emulated flush on every f32 add, multiply, fma, min, max
and comparison.

On MoltenVK the probe now runs too. Since the device declares no
DenormFlushToZero capability there, a module compiled for the hardware
flush declares no DenormFlushToZero execution mode and relies on the
native behavior the probe measured; when any probe result differs from
the emulated flush, shaders keep the emulation as before. Devices that
declare the capability are unchanged.
@github-actions github-actions Bot added the perf Performance change label Oct 20, 2026
@imellag

imellag commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor Author

Traces of the four captures in the table above, in the same order (each file name matches the trace field of its summary line):

1-base-1-aps5-trace-7cf8c610c6a7-63071.json.gz
2-change-1-aps5-trace-bb294211065d-64633.json.gz
3-base-2-aps5-trace-7cf8c610c6a7-66252.json.gz
4-change-2-aps5-trace-bb294211065d-67934.json.gz

They open in ui.perfetto.dev; python3 tools/trace_digest.py <trace> gives the per-thread table the presenter wait comes from.

@github-actions

github-actions Bot commented Oct 20, 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 8697 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp L1326-1328

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 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4040 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4072 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4472 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5431 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5441 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5499 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6146 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6202 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6290 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6292 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6501 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6615 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6682 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6683 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6747 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6788 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6801 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp
PR 6804 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6868 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6946 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6947 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6960 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6977 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7233 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7371 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7446 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7449 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7484 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7505 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7644 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7677 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7800 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7888 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp
PR 7922 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8004 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8206 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8278 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8295 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8672 core/libs/prx/libSceAgcDriver/CMakeLists.txt

@github-actions github-actions Bot added build shader core/shader agc libSceAgc* labels Oct 20, 2026
@adriadam10 adriadam10 self-assigned this Oct 20, 2026
@adriadam10
adriadam10 merged commit e48bbff into boykopovar:main Oct 20, 2026
13 checks passed
@adriadam10

Copy link
Copy Markdown
Collaborator

Checked the decision table (agc_float32_flush_control), that drivers other than MoltenVK keep the old condition, that the DenormFlushToZero mode is emitted only with the device capability, and that the probe still gates the switch (any differing result keeps the emulation). Re-checked against current main: clean merge, no semantic overlap. The measured presenter-wait and frame-time gain on MoltenVK is consistent with the change; merged.

@Mauro42K

Copy link
Copy Markdown

Tested the M1 probe on a MacBook Pro (Apple M1, macOS 27.0.1) with LunarG Vulkan SDK 1.4.363.0 and MoltenVK 1.4.2. The filtered ^(agc|shader) CTest suite was run with -j2, using the same reference profile at both revisions.

Three tests that failed at baseline passed at the #8578 revision: agc_driver_sgpr_pattern_fill_keys, agc_driver_storage_read_during_idle_store, and agc_driver_vertex_target_range_imported. No new failing tests appeared in the selected suite. This is one run per revision; it does not establish causality or repeatability for those changes.

The reference-profile failure lists are included below. “Failed/aborted” follows CTest’s summary; agc_driver_rect_list_indirect, agc_driver_vertex_clip_cull_draw, and agc_driver_vertex_clip_cull_draw_no_key were subprocess aborts at both revisions.

Baseline failures — 2bfbc2f (51)
  • agc_driver_compute_fs_table_calls
  • agc_driver_dpp16_operands
  • agc_driver_f16_conversion_float_mode
  • agc_driver_f16_fma_denormal_modes
  • agc_driver_f32_constant_factor_tininess
  • agc_driver_f32_denormal_flush
  • agc_driver_f32_output_modifier
  • agc_driver_f64_add_mul_denormal_modes
  • agc_driver_f64_rounding_denormal_modes
  • agc_driver_float16_fma_rounding
  • agc_driver_float16_misc
  • agc_driver_float16_modifiers
  • agc_driver_float16_rounding
  • agc_driver_guest_memory_lifetime
  • agc_driver_guest_memory_lifetime_copy
  • agc_driver_guest_memory_lifetime_direct
  • agc_driver_guest_memory_lifetime_heap
  • agc_driver_guest_memory_lifetime_heap_uncached
  • agc_driver_guest_memory_lifetime_locked
  • agc_driver_image_cache_bits
  • agc_driver_image_plane_bias_on_single_level_volume
  • agc_driver_image_srgb_sample_copy
  • agc_driver_image_srgb_sample_copy_forced
  • agc_driver_image_table_reuse
  • agc_driver_image_texel_status
  • agc_driver_indirect_arguments_pending_producer
  • agc_driver_ldexp_f16_inline_constants
  • agc_driver_multisample_retirement
  • agc_driver_packed_alu
  • agc_driver_packed_f16_denormal_modes
  • agc_driver_pass_input_hazard
  • agc_driver_pixel_interlock
  • agc_driver_pixel_sample_coverage
  • agc_driver_pixel_sample_iteration
  • agc_driver_rect_list_indirect
  • agc_driver_sample_mask_multisample
  • agc_driver_sdwa_float_selectors
  • agc_driver_sdwa_ldexp_f16
  • agc_driver_sgpr_pattern_fill_keys
  • agc_driver_stencil_ref_export_unused
  • agc_driver_storage_read_during_idle_store
  • agc_driver_tessellation
  • agc_driver_uint8x4_color_target
  • agc_driver_vertex_clip_cull_distances
  • agc_driver_vertex_clip_cull_draw
  • agc_driver_vertex_clip_cull_draw_no_key
  • agc_driver_vertex_target_range_imported
  • agc_driver_vertex_user_data_tail
  • agc_driver_vop2_modifier_forms
  • agc_performance_overlay_statistics
  • agc_write_tracking
With #8578 — a4a16a6 (48)
  • agc_driver_compute_fs_table_calls
  • agc_driver_dpp16_operands
  • agc_driver_f16_conversion_float_mode
  • agc_driver_f16_fma_denormal_modes
  • agc_driver_f32_constant_factor_tininess
  • agc_driver_f32_denormal_flush
  • agc_driver_f32_output_modifier
  • agc_driver_f64_add_mul_denormal_modes
  • agc_driver_f64_rounding_denormal_modes
  • agc_driver_float16_fma_rounding
  • agc_driver_float16_misc
  • agc_driver_float16_modifiers
  • agc_driver_float16_rounding
  • agc_driver_guest_memory_lifetime
  • agc_driver_guest_memory_lifetime_copy
  • agc_driver_guest_memory_lifetime_direct
  • agc_driver_guest_memory_lifetime_heap
  • agc_driver_guest_memory_lifetime_heap_uncached
  • agc_driver_guest_memory_lifetime_locked
  • agc_driver_image_cache_bits
  • agc_driver_image_plane_bias_on_single_level_volume
  • agc_driver_image_srgb_sample_copy
  • agc_driver_image_srgb_sample_copy_forced
  • agc_driver_image_table_reuse
  • agc_driver_image_texel_status
  • agc_driver_indirect_arguments_pending_producer
  • agc_driver_ldexp_f16_inline_constants
  • agc_driver_multisample_retirement
  • agc_driver_packed_alu
  • agc_driver_packed_f16_denormal_modes
  • agc_driver_pass_input_hazard
  • agc_driver_pixel_interlock
  • agc_driver_pixel_sample_coverage
  • agc_driver_pixel_sample_iteration
  • agc_driver_rect_list_indirect
  • agc_driver_sample_mask_multisample
  • agc_driver_sdwa_float_selectors
  • agc_driver_sdwa_ldexp_f16
  • agc_driver_stencil_ref_export_unused
  • agc_driver_tessellation
  • agc_driver_uint8x4_color_target
  • agc_driver_vertex_clip_cull_distances
  • agc_driver_vertex_clip_cull_draw
  • agc_driver_vertex_clip_cull_draw_no_key
  • agc_driver_vertex_user_data_tail
  • agc_driver_vop2_modifier_forms
  • agc_performance_overlay_statistics
  • agc_write_tracking

Tests were run with assistance from OpenAI Codex; the figures and test lists were checked against the captured local logs. No game-performance claim is inferred from these tests.

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

Labels

agc libSceAgc* build perf Performance change shader core/shader

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants