Add AMD GPU Support

This commit is contained in:
copecone committed 2026-06-14 20:18:23 +09:00
1 parent e533fc0bc7
commit 675661878d
3 files changed
+62 -20

No files matched your search

+49 -14
View File
@@ -32,12 +32,13 @@ namespace ADOFAIRenderer.Core
public long frameCount;
public bool skipPressToStart;
public string levelPath = "";
public bool isRenderCancelled;
public bool isRenderCancelled { get; private set; }
public RenderConfig Configuration = null!;
// Render Sessions State (OOP Instance Fields)
public bool isRendering;
public bool isCapturing;
public bool overrideLoading { get; private set; }
public bool isRendering { get; private set; }
public bool isCapturing { get; private set; }
public double timeBase;
public double unscaledTimeBase;
public double dspTimeBase;
@@ -90,10 +91,46 @@ namespace ADOFAIRenderer.Core
CleanUpActiveRender();
}
/// <summary>
/// Sets overrideLoading to true when starting to load the render scene.
/// </summary>
public void StartLoadingOverride()
{
overrideLoading = true;
}
/// <summary>
/// Sets isRendering to true when starting the rendering setup.
/// </summary>
public void StartRendering()
{
isRendering = true;
}
/// <summary>
/// Sets isCapturing to true and resets the cancellation flag when starting the actual frame capture.
/// </summary>
public void StartCapturing()
{
isCapturing = true;
isRenderCancelled = false;
}
/// <summary>
/// Resets all rendering-related states.
/// </summary>
public void ResetRenderState(bool success)
{
isRendering = false;
isCapturing = false;
overrideLoading = false;
isRenderCancelled = !success;
}
public void CleanUpActiveRender()
{
isRendering = isCapturing = false;
isRenderCancelled = true;
ResetRenderState(success: false);
AudioSpectrumGenerator.Clear();
if (_activeVideoFFmpeg != null)
@@ -160,7 +197,7 @@ namespace ADOFAIRenderer.Core
dspTimeBase = AudioSettings.dspTime;
frameCountBase = Time.frameCount;
isRendering = true;
StartRendering();
countdown = 3;
wonFrame = -1;
@@ -178,7 +215,7 @@ namespace ADOFAIRenderer.Core
if (!isRendering) return;
if (!scrController.instance || scrController.instance.state == States.Fail || scrController.instance.state == States.Fail2)
{
isRendering = isCapturing = false;
ResetRenderState(success: false);
StopFFmpeg(false);
EndRender();
}
@@ -192,7 +229,7 @@ namespace ADOFAIRenderer.Core
var extraFrames = (long)Math.Ceiling(Configuration.DelayAfterLevelEnd * Configuration.RenderFPS);
if (frameCount - wonFrame < extraFrames) return;
isRendering = isCapturing = false;
ResetRenderState(success: true);
StopFFmpeg(true);
}
}
@@ -307,14 +344,13 @@ namespace ADOFAIRenderer.Core
return;
}
if (Instance != null)
Instance.levelPath = ADOBase.levelPath;
if (Instance) Instance.levelPath = ADOBase.levelPath;
scnEditor.instance.CheckUnsavedChanges(() =>
{
var quitDelegate =
(Func<bool>)Delegate.CreateDelegate(typeof(Func<bool>), scnEditor.instance, targetMethod);
if (Instance) Instance.StartLoadingOverride();
Application.wantsToQuit -= quitDelegate;
ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "Assets/Scenes/RenderSettingsScene.unity");
});
@@ -356,7 +392,7 @@ namespace ADOFAIRenderer.Core
_frameReader = new FrameReader();
StartFFmpegThread();
isCapturing = true;
StartCapturing();
scrController.instance.paused = scrController.instance.audioPaused = false;
scrController.instance.levelWasSkipped = true;
@@ -539,8 +575,7 @@ namespace ADOFAIRenderer.Core
public void CancelRender()
{
isRendering = isCapturing = false;
isRenderCancelled = true;
ResetRenderState(success: false);
StopFFmpeg(false);
EndRender();
+1 -3
View File
@@ -159,11 +159,9 @@ namespace ADOFAIRenderer.Patch.Engine
[SuppressMessage("ReSharper", "InconsistentNaming")]
public static void Prefix(ref bool stream)
{
if (RenderManager.Instance && RenderManager.Instance.Configuration.ProcessAudio)
{
if (RenderManager.Instance && RenderManager.Instance.overrideLoading && RenderManager.Instance.Configuration.ProcessAudio)
stream = false;
}
}
}
}
}
+12 -3
View File
@@ -15,10 +15,14 @@ namespace ADOFAIRenderer.Util
public static class GPUUtil
{
private const string NvidiaPattern =
@"^NVIDIA GeForce [RG]TX [0-9]+(?>(?> Ti)|(?> SUPER)|(?> [0-9]+GB))?(?> Laptop GPU)?/PCIe/SSE2$";
@"^NVIDIA GeForce [RG]TX [0-9]+(?> SUPER| Ti(?> SUPER)?)?(?> [0-9]+GB)?(?> Laptop GPU)?/PCIe/SSE2$";
private const string IntelPattern =
@"^Intel(?>\(R\))* (?>U*HD Graphics [0-9]+$|Arc\(TM\) [A-C][0-9]+ Graphics)";
@"^Intel(?>\(R\))? (?>U?HD Graphics [0-9]+$|Arc\(TM\) [A-C][0-9]+ Graphics)$";
// ReSharper disable once InconsistentNaming
private const string AMDPattern =
@"^AMD Radeon RX [0-9]+(?> XT)?$";
private static readonly Dictionary<Codec, List<(GPUVendor, string)>> CodecMap = new()
{
@@ -29,7 +33,7 @@ namespace ADOFAIRenderer.Util
[Codec.VVC] = new List<(GPUVendor, string)> { (GPUVendor.Unknown, "libvvenc") }
};
public static GPUVendor GetActiveGPUVendor()
private static GPUVendor GetActiveGPUVendor()
{
var gpuName = UnityEngine.SystemInfo.graphicsDeviceName;
Melon<RenderMod>.Logger.Msg($"Active GPU: {gpuName}");
@@ -44,6 +48,11 @@ namespace ADOFAIRenderer.Util
return GPUVendor.Intel;
}
foreach (Match unused in Regex.Matches(gpuName, AMDPattern))
{
return GPUVendor.AMD;
}
return GPUVendor.Unknown;
}