mirror of
https://github.com/mihawk-99/PS5_RetroArch.git
synced 2026-10-18 23:09:29 -05:00
Profiles 3-7 on the three games; a profiled run reports flexible memory
PHASE_LOG records Profiles 3 to 7: torture, GPU and RAM EFB copies and the 1x-6x ladder at full speed on RE4, Melee and Wind Waker; MSAA after ../PS5_Vulkan R75-R78 (2x, 4x and 8x at full speed, the maximum torture correct and GPU-bound). A profiled test run (the driver's /app0/ps5vk-profile.txt survived the stale test file sweep) prints the flexible memory left every ten seconds from the log flusher, beside the driver's direct_live, so a soak's leak shows as a line that only moves one way. verify.sh: all gates pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99503e7b2a
commit
cc75fc1353
2 files changed
+44
-1
No files matched your search
@@ -3324,3 +3324,27 @@ Profile 2 at 1x and 6x on all three games, 1,200 presents per 10 s and every
|
||||
steady window at 100% (99% in one screenshot window). Melee's first run on a new
|
||||
build still stalls 30-95 ms on each pipeline it compiles for the first time: the
|
||||
driver's shader cache is per build, and Profile 8 is where that is measured.
|
||||
|
||||
## 2026-09-25 — Profiles 3-7: torture, EFB, the scaling ladder and MSAA
|
||||
|
||||
On title 5beca7cc (../PS5_Vulkan R74) and, for MSAA, its successors:
|
||||
|
||||
- **Profile 3** (6x, ubershaders, 16x AF, forced filtering, every frame
|
||||
presented), **4** (6x GPU EFB copies) and **5** (6x EFB copies to RAM):
|
||||
RE4, Melee and Wind Waker at 100% in every steady window, correct pictures.
|
||||
RAM EFB copies read back 270 images a second in RE4 at full speed; Wind
|
||||
Waker's game settings already send its EFB copies to RAM, so its Profiles 4
|
||||
and 5 are the same run.
|
||||
- **Profile 6**, 1x to 6x at the accurate baseline: all eighteen runs at 100%,
|
||||
1,200 presents per 10 s; Wind Waker's GPU time grows from 0.21 to 1.37 ms a
|
||||
present, Melee's and RE4's stay under 0.2 ms.
|
||||
- **Profile 7**: 4x MSAA first stopped every game at its first resolve. The
|
||||
driver refused to sample a four-sample image and could not resolve into
|
||||
Dolphin's resolve texture, which it stores in rows; ../PS5_Vulkan R75-R77 added
|
||||
multisampled sampling, GPU resolves and rendering into rows. R78 added 2x and
|
||||
8x and moved the sample locations to the registers of every pixel of the 2x2
|
||||
quad (C8 had left the lower two at AGC's defaults). 2x, 4x and 8x at 1x: all
|
||||
three games at 100%, antialiased. The maximum torture (6x, 8x MSAA,
|
||||
ubershaders, 16x AF): correct and stable at 92-97% (RE4), 72-77% (Melee) and
|
||||
60-64% (Wind Waker), GPU-bound -- the uncompressed 8x surfaces at 6x
|
||||
quadruple the GPU work of Profile 3.
|
||||
+20
-1
@@ -29,6 +29,7 @@
|
||||
* says how far it got. See src/trace.hpp.
|
||||
*/
|
||||
|
||||
#include <atomic>
|
||||
#include <cstddef>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
@@ -53,6 +54,7 @@ extern "C" int rarch_main(int argc, char *argv[], void *data);
|
||||
extern "C" int sceSystemServiceHideSplashScreen();
|
||||
|
||||
extern "C" void ps5_vulkan_profile_init();
|
||||
extern "C" int sceKernelAvailableFlexibleMemorySize(std::size_t *size);
|
||||
extern "C" void ps5_crash_report_install();
|
||||
extern "C" void ps5_core_threads_start();
|
||||
extern "C" void ps5_sampler_start();
|
||||
@@ -88,14 +90,26 @@ constexpr const char *config_path = "/app0/config/retroarch.cfg";
|
||||
* and its what() are written to the trace here - the difference between "the
|
||||
* compiler refused this shader" and "a wild size reached a container", which are
|
||||
* not the same bug and were not distinguishable from the outside. */
|
||||
/* A profiled test run (the driver's /app0/ps5vk-profile.txt survived the stale
|
||||
* test file sweep) also reports the flexible memory left every ten seconds:
|
||||
* with the driver's direct_live, a soak's leak is a line that only moves one
|
||||
* way. Set once main has swept. */
|
||||
std::atomic<bool> g_memory_report{false};
|
||||
|
||||
/* Writes every buffered output stream out -- the trace file and RetroArch's
|
||||
* log among them -- four times a second, off the threads that log. */
|
||||
void *log_flusher(void *)
|
||||
{
|
||||
const timespec interval = {0, 250 * 1000 * 1000};
|
||||
for (;;)
|
||||
for (unsigned tick = 1;; ++tick)
|
||||
{
|
||||
nanosleep(&interval, nullptr);
|
||||
if (tick % 40 == 0 && g_memory_report.load(std::memory_order_relaxed))
|
||||
{
|
||||
std::size_t flexible = 0;
|
||||
sceKernelAvailableFlexibleMemorySize(&flexible);
|
||||
std::fprintf(stderr, "memory: flexible_free=%zu KiB\n", flexible >> 10);
|
||||
}
|
||||
std::fflush(nullptr);
|
||||
}
|
||||
return nullptr;
|
||||
@@ -269,6 +283,11 @@ int main()
|
||||
if (removed != 0)
|
||||
ps5::debug::mark_value("stale test files removed", static_cast<int>(removed));
|
||||
}
|
||||
if (std::FILE *profile = std::fopen("/app0/ps5vk-profile.txt", "rb"))
|
||||
{
|
||||
std::fclose(profile);
|
||||
g_memory_report.store(true, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
/* Extra arguments, one per line, from /app0/args.txt when that file is there.
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user