From d10f9feba624991c903d81092daa09a91d473fa4 Mon Sep 17 00:00:00 2001
From: GillianMC <70141395+SandeMC@users.noreply.github.com>
Date: Sat, 20 Jan 2024 01:07:59 +0200
Subject: [PATCH] add a failsafe for vram check
---
GTAIVSetupUtility/MainWindow.xaml.cs | 111 +++++++++++++++++----------
GTAIVSetupUtilityWPF.csproj | 7 +-
2 files changed, 76 insertions(+), 42 deletions(-)
diff --git a/GTAIVSetupUtility/MainWindow.xaml.cs b/GTAIVSetupUtility/MainWindow.xaml.cs
index a337662..8a24e07 100644
--- a/GTAIVSetupUtility/MainWindow.xaml.cs
+++ b/GTAIVSetupUtility/MainWindow.xaml.cs
@@ -15,6 +15,7 @@
using GTAIVSetupUtilityWPF.Common;
using GTAIVSetupUtilityWPF.Functions;
using System.Threading.Tasks;
+using PromptDialog;
// hi here, i'm an awful coder, so please clean up for me if it really bothers you
namespace GTAIVSetupUtilityWPF
@@ -540,8 +541,6 @@ private void setuplaunchoptions_Click(object sender, RoutedEventArgs e)
if (nomemrestrictcheck.IsChecked == true) { launchoptions.Add("-nomemrestrict"); Logger.Debug(" Added -nomemrestrict."); }
if (windowedcheck.IsEnabled)
{
- Logger.Debug(" Setting up Borderless Windowed...");
-
IniEditor iniParser = new IniEditor(iniModify);
string borderlessWindowedValue;
if (ffix)
@@ -588,57 +587,91 @@ private void setuplaunchoptions_Click(object sender, RoutedEventArgs e)
if (vidmemcheck.IsChecked == true)
{
Logger.Debug(" -availablevidmem checked, quering user's VRAM...");
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
- foreach (var tempvram in from ManagementObject obj in searcher.Get()
- let adapterRAM = obj["AdapterRAM"] != null ? obj["AdapterRAM"].ToString() : "N/A"
- let tempvram = System.Convert.ToInt16(ByteSize.FromBytes(System.Convert.ToDouble(adapterRAM)).MebiBytes + 1)
- select tempvram)
+ try
{
- if (firstgpu)
- {
- vram1 = tempvram;
- firstgpu = false;
- }
- else if (tempvram > vram1 || tempvram > vram2)
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
+ foreach (var tempvram in from ManagementObject obj in searcher.Get()
+ let adapterRAM = obj["AdapterRAM"] != null ? obj["AdapterRAM"].ToString() : "N/A"
+ let tempvram = System.Convert.ToInt16(ByteSize.FromBytes(System.Convert.ToDouble(adapterRAM)).MebiBytes + 1)
+ select tempvram)
{
- vram2 = tempvram;
+ if (firstgpu)
+ {
+ vram1 = tempvram;
+ firstgpu = false;
+ }
+ else if (tempvram > vram1 || tempvram > vram2)
+ {
+ vram2 = tempvram;
+ }
}
- }
- if (resultvk.Item3 || resultvk.Item4)
- {
- if (gb3check.IsChecked == true)
+ if (resultvk.Item3 || resultvk.Item4)
{
- if (vram1 > 3072) vram1 = 3072;
+ if (gb3check.IsChecked == true)
+ {
+ if (vram1 > 3072) vram1 = 3072;
+ }
+ else
+ {
+ if (vram1 > 4096) vram1 = 4096;
+ }
+ launchoptions.Add($"-availablevidmem {vram1}");
+ Logger.Debug($" Added -availablevidmem {vram1}.");
}
else
{
- if (vram1 > 4096) vram1 = 4096;
+ int vram;
+ if (!dxvkonigpu)
+ {
+ vram = Math.Max(vram1, vram2);
+ }
+ else
+ {
+ vram = Math.Min(vram1, vram2);
+ }
+ if (gb3check.IsChecked == true)
+ {
+ if (vram > 3072) vram = 3072;
+ }
+ else
+ {
+ if (vram > 4096) vram = 4096;
+ }
+ launchoptions.Add($"-availablevidmem {vram}");
+ Logger.Debug($" Added -availablevidmem {vram}.");
}
- launchoptions.Add($"-availablevidmem {vram1}");
- Logger.Debug($" Added -availablevidmem {vram1}.");
}
- else if (!resultvk.Item3 && !resultvk.Item4)
+ catch (Exception ex)
{
- int vram;
- if (!dxvkonigpu)
- {
- vram = Math.Max(vram1, vram2);
- }
- else
- {
- vram = Math.Min(vram1, vram2);
- }
- if (gb3check.IsChecked == true)
+ // i know this is an awful and unoptimized and full of bad practices implementation, plz forgib
+ Logger.Error(ex, "Had some weird error during quering vram; asking the user for manual input");
+ bool noerror = false;
+ int vram = 0;
+ while (!noerror)
{
+ try
+ {
+ vram = Convert.ToInt16(PromptDialog.Dialog.Prompt("VRAM could not be queried automatically.\n\nInput your VRAM value (in MB):", "Failsafe VRAM input"));
+ noerror = true;
+ }
+ catch
+ {
+ Logger.Error("Didn't receive a number, requesting again");
+ MessageBox.Show("Not a number, try again...");
+ }
+
+ }
+ if (gb3check.IsChecked == true)
+ {
if (vram > 3072) vram = 3072;
- }
- else
- {
+ }
+ else
+ {
if (vram > 4096) vram = 4096;
- }
- launchoptions.Add($"-availablevidmem {vram}");
- Logger.Debug($" Added -availablevidmem {vram}.");
+ }
+ launchoptions.Add($"-availablevidmem {vram}");
+ Logger.Debug($" Added -availablevidmem {vram}.");
}
}
if (monitordetailcheck.IsChecked == true)
diff --git a/GTAIVSetupUtilityWPF.csproj b/GTAIVSetupUtilityWPF.csproj
index b6b51b1..48feeec 100644
--- a/GTAIVSetupUtilityWPF.csproj
+++ b/GTAIVSetupUtilityWPF.csproj
@@ -7,7 +7,7 @@