mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-05-12 16:25:46 +00:00
Compare commits
2 Commits
Canary-1.3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49891ba7af | ||
|
|
89ea41ef84 |
@@ -3,11 +3,11 @@
|
|||||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageVersion Include="Avalonia" Version="11.3.14" />
|
<PackageVersion Include="Avalonia" Version="11.3.15" />
|
||||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.3.13" />
|
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.3.13" />
|
||||||
<PackageVersion Include="Avalonia.Desktop" Version="11.3.14" />
|
<PackageVersion Include="Avalonia.Desktop" Version="11.3.15" />
|
||||||
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.14" />
|
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.15" />
|
||||||
<PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.3.14" />
|
<PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.3.15" />
|
||||||
<PackageVersion Include="SharpCompress" Version="0.48.0" />
|
<PackageVersion Include="SharpCompress" Version="0.48.0" />
|
||||||
<PackageVersion Include="Svg.Controls.Avalonia" Version="11.3.9.5" />
|
<PackageVersion Include="Svg.Controls.Avalonia" Version="11.3.9.5" />
|
||||||
<PackageVersion Include="Svg.Controls.Skia.Avalonia" Version="11.3.9.5" />
|
<PackageVersion Include="Svg.Controls.Skia.Avalonia" Version="11.3.9.5" />
|
||||||
|
|||||||
@@ -177,8 +177,6 @@ namespace Ryujinx.Graphics.Vulkan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can somehow become -1.
|
|
||||||
// Logger.Info?.PrintMsg(LogClass.Gpu, $"_referenceCount: {_referenceCount}");
|
|
||||||
Debug.Assert(_referenceCount >= 0);
|
Debug.Assert(_referenceCount >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -622,15 +622,15 @@ namespace Ryujinx.Ava.Systems
|
|||||||
// If the GPU has no work and is cancelled, we need to handle that as well.
|
// If the GPU has no work and is cancelled, we need to handle that as well.
|
||||||
|
|
||||||
WaitHandle.WaitAny(new[] { _gpuDoneEvent, _gpuCancellationTokenSource.Token.WaitHandle });
|
WaitHandle.WaitAny(new[] { _gpuDoneEvent, _gpuCancellationTokenSource.Token.WaitHandle });
|
||||||
_gpuCancellationTokenSource.Dispose();
|
|
||||||
|
|
||||||
// Waiting for work to be finished before we dispose.
|
|
||||||
if (_renderingStarted)
|
if (_renderingStarted)
|
||||||
{
|
{
|
||||||
|
// Waiting for work to be finished before we dispose.
|
||||||
Device.Gpu.WaitUntilGpuReady();
|
Device.Gpu.WaitUntilGpuReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
_gpuDoneEvent.Dispose();
|
_gpuDoneEvent.Dispose();
|
||||||
|
_gpuCancellationTokenSource.Dispose();
|
||||||
|
|
||||||
DisposeGpu();
|
DisposeGpu();
|
||||||
AppExit?.Invoke(this, EventArgs.Empty);
|
AppExit?.Invoke(this, EventArgs.Empty);
|
||||||
@@ -1095,51 +1095,56 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
Device.Gpu.Renderer.RunLoop(() =>
|
Device.Gpu.Renderer.RunLoop(() =>
|
||||||
{
|
{
|
||||||
Device.Gpu.SetGpuThread();
|
try
|
||||||
Device.Gpu.InitializeShaderCache(_gpuCancellationTokenSource.Token);
|
|
||||||
|
|
||||||
_renderer.Window.ChangeVSyncMode(Device.VSyncMode);
|
|
||||||
|
|
||||||
while (_isActive)
|
|
||||||
{
|
{
|
||||||
_ticks += _chrono.ElapsedTicks;
|
Device.Gpu.SetGpuThread();
|
||||||
|
Device.Gpu.InitializeShaderCache(_gpuCancellationTokenSource.Token);
|
||||||
|
|
||||||
_chrono.Restart();
|
_renderer.Window.ChangeVSyncMode(Device.VSyncMode);
|
||||||
|
|
||||||
if (Device.WaitFifo())
|
while (_isActive)
|
||||||
{
|
{
|
||||||
Device.Statistics.RecordFifoStart();
|
_ticks += _chrono.ElapsedTicks;
|
||||||
Device.ProcessFrame();
|
|
||||||
Device.Statistics.RecordFifoEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (Device.ConsumeFrameAvailable())
|
_chrono.Restart();
|
||||||
{
|
|
||||||
if (!_renderingStarted)
|
if (Device.WaitFifo())
|
||||||
{
|
{
|
||||||
_renderingStarted = true;
|
Device.Statistics.RecordFifoStart();
|
||||||
_viewModel.SwitchToRenderer(false);
|
Device.ProcessFrame();
|
||||||
InitStatus();
|
Device.Statistics.RecordFifoEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
Device.PresentFrame(() => (RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
while (Device.ConsumeFrameAvailable())
|
||||||
}
|
{
|
||||||
|
if (!_renderingStarted)
|
||||||
|
{
|
||||||
|
_renderingStarted = true;
|
||||||
|
_viewModel.SwitchToRenderer(false);
|
||||||
|
InitStatus();
|
||||||
|
}
|
||||||
|
|
||||||
if (_ticks >= _ticksPerFrame)
|
Device.PresentFrame(() =>
|
||||||
{
|
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
||||||
UpdateStatus();
|
}
|
||||||
|
|
||||||
|
if (_ticks >= _ticksPerFrame)
|
||||||
|
{
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
// Make sure all commands in the run loop are fully executed before leaving the loop.
|
|
||||||
if (Device.Gpu.Renderer is ThreadedRenderer threaded)
|
|
||||||
{
|
{
|
||||||
Logger.Info?.PrintMsg(LogClass.Gpu, "Flushing threaded commands...");
|
// Make sure all commands in the run loop are fully executed before leaving the loop.
|
||||||
threaded.FlushThreadedCommands();
|
if (Device.Gpu.Renderer is ThreadedRenderer threaded)
|
||||||
Logger.Info?.PrintMsg(LogClass.Gpu, "Flushed!");
|
{
|
||||||
|
Logger.Info?.PrintMsg(LogClass.Gpu, "Flushing threaded commands...");
|
||||||
|
threaded.FlushThreadedCommands();
|
||||||
|
Logger.Info?.PrintMsg(LogClass.Gpu, "Flushed!");
|
||||||
|
}
|
||||||
|
_gpuDoneEvent.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
_gpuDoneEvent.Set();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user