diff --git a/Wabbajack.Lib/MO2Compiler.cs b/Wabbajack.Lib/MO2Compiler.cs index 62fdbe46..16a90de3 100644 --- a/Wabbajack.Lib/MO2Compiler.cs +++ b/Wabbajack.Lib/MO2Compiler.cs @@ -535,6 +535,7 @@ namespace Wabbajack.Lib new IgnoreStartsWith(this, Path.Combine(Consts.GameFolderFilesDir, "Papyrus Compiler")), new IgnoreStartsWith(this, Path.Combine(Consts.GameFolderFilesDir, "Skyrim")), new IgnoreRegex(this, Consts.GameFolderFilesDir + "\\\\.*\\.bsa"), + new IncludeRegex(this, "^[^\\\\]*\\.bat$"), new IncludeModIniData(this), new DirectMatch(this), new IncludeTaggedMods(this, Consts.WABBAJACK_INCLUDE), diff --git a/Wabbajack.Lib/MO2Installer.cs b/Wabbajack.Lib/MO2Installer.cs index acb2238b..a5426975 100644 --- a/Wabbajack.Lib/MO2Installer.cs +++ b/Wabbajack.Lib/MO2Installer.cs @@ -315,16 +315,32 @@ namespace Wabbajack.Lib { var parser = new FileIniDataParser(new IniDataParser(config)); var data = parser.ReadFile(file); - if (data.Sections["Display"] == null) - return; - - if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null) + bool modified = false; + if (data.Sections["Display"] != null) { - data.Sections["Display"]["iSize W"] = SystemParameters.ScreenWidth.ToString(CultureInfo.CurrentCulture); - data.Sections["Display"]["iSize H"] = SystemParameters.ScreenHeight.ToString(CultureInfo.CurrentCulture); + + if (data.Sections["Display"]["iSize W"] != null && data.Sections["Display"]["iSize H"] != null) + { + data.Sections["Display"]["iSize W"] = + SystemParameters.ScreenWidth.ToString(CultureInfo.CurrentCulture); + data.Sections["Display"]["iSize H"] = + SystemParameters.ScreenHeight.ToString(CultureInfo.CurrentCulture); + modified = true; + } + + } + if (data.Sections["MEMORY"] != null) + { + if (data.Sections["MEMORY"]["VideoMemorySizeMb"] != null) + { + data.Sections["MEMORY"]["VideoMemorySizeMb"] = + SystemParameters.EnbLEVRAMSize.ToString(CultureInfo.CurrentCulture); + modified = true; + } } - parser.WriteFile(file, data); + if (modified) + parser.WriteFile(file, data); } catch (Exception ex) { diff --git a/Wabbajack.Lib/SystemParameters.cs b/Wabbajack.Lib/SystemParameters.cs index ceec3d09..15b6a39e 100644 --- a/Wabbajack.Lib/SystemParameters.cs +++ b/Wabbajack.Lib/SystemParameters.cs @@ -1,8 +1,23 @@ -namespace Wabbajack.Lib +using System; + +namespace Wabbajack.Lib { public class SystemParameters { + private static long ToMB(long input) + { + // KB MB + return input / 1024 / 1024; + } + public int ScreenHeight { get; set; } public int ScreenWidth { get; set; } + public long VideoMemorySize { get; set; } + public long SystemMemorySize { get; set; } + + /// + /// Value used in LE ENBs for VideoMemorySizeMb + /// + public long EnbLEVRAMSize => Math.Min(ToMB(SystemMemorySize) + ToMB(VideoMemorySize), 10240); } } diff --git a/Wabbajack.Test/EndToEndTests.cs b/Wabbajack.Test/EndToEndTests.cs index 0257634b..86e8c49b 100644 --- a/Wabbajack.Test/EndToEndTests.cs +++ b/Wabbajack.Test/EndToEndTests.cs @@ -78,6 +78,11 @@ namespace Wabbajack.Test "[General]", $"matchAll= {Path.GetFileName(modfiles[2].Download)}" }); + + File.WriteAllLines(Path.Combine(utils.MO2Folder, "startup.bat"), new [] + { + "ModOrganizer2.exe SKSE" + }); var modlist = await CompileAndInstall(profile); diff --git a/Wabbajack.Test/SanityTests.cs b/Wabbajack.Test/SanityTests.cs index 6651c2f9..3b4f30c6 100644 --- a/Wabbajack.Test/SanityTests.cs +++ b/Wabbajack.Test/SanityTests.cs @@ -8,6 +8,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Wabbajack.Common; using Wabbajack.Lib; using Wabbajack.Lib.CompilationSteps.CompilationErrors; +using Wabbajack.Util; using File = Alphaleonis.Win32.Filesystem.File; using Path = Alphaleonis.Win32.Filesystem.Path; @@ -197,15 +198,20 @@ namespace Wabbajack.Test "iSize H=3", "iSize W=-200", "[Display]", - "foo=4" + "foo=4", + "[MEMORY]", + "VideoMemorySizeMb=22" }); var modlist = await CompileAndInstall(profile); var ini = Path.Combine(utils.InstallFolder, "profiles", profile, "somegameprefs.ini").LoadIniFile(); + var sysinfo = SystemParametersConstructor.Create(); + Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenHeight.ToString(), ini?.Display?["iSize H"]); Assert.AreEqual(System.Windows.SystemParameters.PrimaryScreenWidth.ToString(), ini?.Display?["iSize W"]); + Assert.AreEqual(sysinfo.EnbLEVRAMSize.ToString(), ini?.MEMORY?["VideoMemorySizeMb"]); } [TestMethod] diff --git a/Wabbajack/App.xaml.cs b/Wabbajack/App.xaml.cs index ef0eb1c2..4802311a 100644 --- a/Wabbajack/App.xaml.cs +++ b/Wabbajack/App.xaml.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows; using Wabbajack.Common; +using Wabbajack.Util; namespace Wabbajack { diff --git a/Wabbajack/Util/SystemParametersConstructor.cs b/Wabbajack/Util/SystemParametersConstructor.cs index 6c5d7be8..977c6740 100644 --- a/Wabbajack/Util/SystemParametersConstructor.cs +++ b/Wabbajack/Util/SystemParametersConstructor.cs @@ -5,6 +5,7 @@ using System.Runtime.InteropServices; using MahApps.Metro.Controls; using Microsoft.VisualBasic; using PInvoke; +using SharpDX.DXGI; using Wabbajack.Lib; using static PInvoke.User32; using static PInvoke.Gdi32; @@ -44,10 +45,17 @@ namespace Wabbajack.Util public static SystemParameters Create() { var (width, height, _) = GetDisplays().First(d => d.IsPrimary); + + using var f = new Factory1(); + var video_memory = f.Adapters1.Select(a => + Math.Max(a.Description.DedicatedSystemMemory, (long)a.Description.DedicatedVideoMemory)).Max(); + var memory = Common.Utils.GetMemoryStatus(); return new SystemParameters { ScreenWidth = width, - ScreenHeight = height + ScreenHeight = height, + VideoMemorySize = video_memory, + SystemMemorySize = (long)memory.ullTotalPhys }; } } diff --git a/Wabbajack/Views/MainWindow.xaml.cs b/Wabbajack/Views/MainWindow.xaml.cs index ebfb03f8..bfa05634 100644 --- a/Wabbajack/Views/MainWindow.xaml.cs +++ b/Wabbajack/Views/MainWindow.xaml.cs @@ -7,6 +7,7 @@ using MahApps.Metro.Controls; using Newtonsoft.Json; using Wabbajack.Common; using Wabbajack.Lib.LibCefHelpers; +using Wabbajack.Util; using Application = System.Windows.Application; using Utils = Wabbajack.Common.Utils; @@ -31,6 +32,9 @@ namespace Wabbajack }; Utils.Log($"Wabbajack Build - {ThisAssembly.Git.Sha}"); + var p = SystemParametersConstructor.Create(); + Utils.Log( + $"System settings - ({p.SystemMemorySize.ToFileSizeString()} RAM), Display: {p.ScreenWidth} x {p.ScreenHeight} ({p.VideoMemorySize.ToFileSizeString()} VRAM - VideoMemorySizeMb={p.EnbLEVRAMSize})"); // Run logic to associate wabbajack lists with this app in the background Task.Run(async () => diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj index 3b6ae40a..b1089227 100644 --- a/Wabbajack/Wabbajack.csproj +++ b/Wabbajack/Wabbajack.csproj @@ -71,6 +71,7 @@ +