mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-07 10:29:46 +08:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 50b61b27d0 |
Binary file not shown.
|
Before Width: | Height: | Size: 656 KiB After Width: | Height: | Size: 1.1 MiB |
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB |
@@ -11307,9 +11307,7 @@ public static partial class AgcExports
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rejected/CPU-handled dispatches never hand evaluation's pooled buffers to a
|
if (evaluationHandledByCpu)
|
||||||
// consumer that would return them; reclaim here to keep GuestDataPool.Shared bounded.
|
|
||||||
if (evaluationHandledByCpu || !gpuDispatch)
|
|
||||||
{
|
{
|
||||||
ReturnPooledEvaluationArrays(evaluation);
|
ReturnPooledEvaluationArrays(evaluation);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -921,7 +921,6 @@ public static class AudioOut2Exports
|
|||||||
|
|
||||||
if (mixedPorts == 0)
|
if (mixedPorts == 0)
|
||||||
{
|
{
|
||||||
TraceSubmitSkipped(context, frames, "no-ports");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -943,7 +942,6 @@ public static class AudioOut2Exports
|
|||||||
var backend = ResolveContextBackend(context, out var backendName);
|
var backend = ResolveContextBackend(context, out var backendName);
|
||||||
if (backend is null)
|
if (backend is null)
|
||||||
{
|
{
|
||||||
TraceSubmitSkipped(context, frames, "no-backend");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1214,14 +1212,4 @@ public static class AudioOut2Exports
|
|||||||
Console.Error.WriteLine($"[LOADER][TRACE] audio_out2.{message}");
|
Console.Error.WriteLine($"[LOADER][TRACE] audio_out2.{message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void TraceSubmitSkipped(ContextState context, int frames, string reason)
|
|
||||||
{
|
|
||||||
var n = Interlocked.Increment(ref _submitSkipTraceCount);
|
|
||||||
if (n <= 8 || n % 500 == 0)
|
|
||||||
{
|
|
||||||
TraceAudioOut2(
|
|
||||||
$"context-submit-skip#{n} handle=0x{context.Handle:X} frames={frames} reason={reason}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,6 @@ internal static class GuestDataPool
|
|||||||
|
|
||||||
public static void Trim() => ((BoundedByteArrayPool)Shared).Trim();
|
public static void Trim() => ((BoundedByteArrayPool)Shared).Trim();
|
||||||
|
|
||||||
/// <summary>Outstanding lease count and idle cached bytes, for leak diagnostics.</summary>
|
|
||||||
public static (int LeaseCount, ulong CachedBytes) DiagnosticStats() =>
|
|
||||||
((BoundedByteArrayPool)Shared).Stats();
|
|
||||||
|
|
||||||
private sealed class BoundedByteArrayPool : ArrayPool<byte>
|
private sealed class BoundedByteArrayPool : ArrayPool<byte>
|
||||||
{
|
{
|
||||||
private readonly object _gate = new();
|
private readonly object _gate = new();
|
||||||
@@ -123,14 +119,6 @@ internal static class GuestDataPool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public (int LeaseCount, ulong CachedBytes) Stats()
|
|
||||||
{
|
|
||||||
lock (_gate)
|
|
||||||
{
|
|
||||||
return (_leases.Count, _cachedBytes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int GetAllocationLength(int minimumLength)
|
private int GetAllocationLength(int minimumLength)
|
||||||
{
|
{
|
||||||
if (minimumLength <= 16)
|
if (minimumLength <= 16)
|
||||||
|
|||||||
@@ -466,45 +466,4 @@ public static class KernelExports
|
|||||||
ctx[CpuRegister.Rax] = unchecked((ulong)(-1L));
|
ctx[CpuRegister.Rax] = unchecked((ulong)(-1L));
|
||||||
return (int)OrbisGen2Result.ORBIS_GEN2_OK;
|
return (int)OrbisGen2Result.ORBIS_GEN2_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
[SysAbiExport(
|
|
||||||
Nid = "tU5e3f9gSiU",
|
|
||||||
ExportName = "sceKernelIsTrinityMode",
|
|
||||||
Target = Generation.Gen4 | Generation.Gen5,
|
|
||||||
LibraryName = "libKernel")]
|
|
||||||
public static int KernelIsTrinityMode(CpuContext ctx)
|
|
||||||
{
|
|
||||||
ctx[CpuRegister.Rax] = 0;
|
|
||||||
|
|
||||||
return (int)OrbisGen2Result.ORBIS_GEN2_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
[SysAbiExport(
|
|
||||||
Nid = "DLORcroUqbc",
|
|
||||||
ExportName = "sceKernelGetOpenPsId",
|
|
||||||
Target = Generation.Gen4 | Generation.Gen5,
|
|
||||||
LibraryName = "libKernel")]
|
|
||||||
public static int KernelGetOpenPsId(CpuContext ctx)
|
|
||||||
{
|
|
||||||
ulong bufferPtr = ctx[CpuRegister.Rdi];
|
|
||||||
|
|
||||||
if (bufferPtr == 0)
|
|
||||||
{
|
|
||||||
ctx[CpuRegister.Rax] = unchecked((ulong)(int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT);
|
|
||||||
|
|
||||||
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
Span<byte> openPsId = stackalloc byte[16];
|
|
||||||
|
|
||||||
if (!ctx.Memory.TryWrite(bufferPtr, openPsId))
|
|
||||||
{
|
|
||||||
ctx[CpuRegister.Rax] = unchecked((ulong)(int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT);
|
|
||||||
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx[CpuRegister.Rax] = 0;
|
|
||||||
|
|
||||||
return (int)OrbisGen2Result.ORBIS_GEN2_OK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,15 +99,6 @@ public static class NpTrophy2Exports
|
|||||||
public static int NpTrophy2GetTrophyInfo(CpuContext ctx) =>
|
public static int NpTrophy2GetTrophyInfo(CpuContext ctx) =>
|
||||||
SetReturn(ctx, OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND);
|
SetReturn(ctx, OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND);
|
||||||
|
|
||||||
[SysAbiExport(
|
|
||||||
Nid = "y3zHpdZO6ME",
|
|
||||||
ExportName = "sceNpTrophy2GetTrophyInfoArray",
|
|
||||||
Target = Generation.Gen5,
|
|
||||||
LibraryName = "libSceNpTrophy2")]
|
|
||||||
public static int NpTrophy2GetTrophyInfoArray(CpuContext ctx) =>
|
|
||||||
SetReturn(ctx, OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND);
|
|
||||||
|
|
||||||
|
|
||||||
private static int WriteIdAndReturn(CpuContext ctx, ulong outAddress, ref int nextId)
|
private static int WriteIdAndReturn(CpuContext ctx, ulong outAddress, ref int nextId)
|
||||||
{
|
{
|
||||||
if (outAddress == 0)
|
if (outAddress == 0)
|
||||||
|
|||||||
@@ -1300,12 +1300,10 @@ public static class VideoOutExports
|
|||||||
var submitted = Interlocked.Exchange(ref _submittedFrameCount, 0);
|
var submitted = Interlocked.Exchange(ref _submittedFrameCount, 0);
|
||||||
var presentedCount = Interlocked.Exchange(ref _presentedFrameCount, 0);
|
var presentedCount = Interlocked.Exchange(ref _presentedFrameCount, 0);
|
||||||
var (draws, drawMs, pipelines, spirvCompiles) = GuestGpu.Current.ReadAndResetPerfCounters();
|
var (draws, drawMs, pipelines, spirvCompiles) = GuestGpu.Current.ReadAndResetPerfCounters();
|
||||||
var (poolLeases, poolCachedBytes) = SharpEmu.Libs.Gpu.GuestDataPool.DiagnosticStats();
|
|
||||||
Console.Error.WriteLine(
|
Console.Error.WriteLine(
|
||||||
$"[LOADER][PERF] videoout submitted_fps={submitted / elapsedSeconds:F1} " +
|
$"[LOADER][PERF] videoout submitted_fps={submitted / elapsedSeconds:F1} " +
|
||||||
$"presented_fps={presentedCount / elapsedSeconds:F1} " +
|
$"presented_fps={presentedCount / elapsedSeconds:F1} " +
|
||||||
$"draws={draws} draw_ms={drawMs:F0} pipelines={pipelines} spirv={spirvCompiles} " +
|
$"draws={draws} draw_ms={drawMs:F0} pipelines={pipelines} spirv={spirvCompiles}");
|
||||||
$"pool_leases={poolLeases} pool_cached_mb={poolCachedBytes / 1024.0 / 1024.0:F1}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly bool _flipPacingDisabled = string.Equals(
|
private static readonly bool _flipPacingDisabled = string.Equals(
|
||||||
|
|||||||
Reference in New Issue
Block a user