From 73447f205dc5c3a777f3157e9b4085d7a5004bf6 Mon Sep 17 00:00:00 2001 From: Robert Baker Date: Sat, 7 Feb 2026 20:58:55 -0800 Subject: [PATCH 1/3] Add GPU Info to Crash Handler I'm sure there's a better way to do this, but I also shouldn't be allowed to touch any cpp code. This loops through all dxgi adapters based on example code I ripped from Microsoft and StackOverflow and dumps that into the crash log. I'm hoping it doesn't make the window too tall, so if there's a better way to list only the display adapters that are unique, I'm all for it. --- DalamudCrashHandler/DalamudCrashHandler.cpp | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/DalamudCrashHandler/DalamudCrashHandler.cpp b/DalamudCrashHandler/DalamudCrashHandler.cpp index f28715dc1..165cce26d 100644 --- a/DalamudCrashHandler/DalamudCrashHandler.cpp +++ b/DalamudCrashHandler/DalamudCrashHandler.cpp @@ -28,6 +28,9 @@ #include #include +#include +#pragma comment(lib, "dxgi.lib") + #pragma comment(lib, "comctl32.lib") #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") @@ -470,6 +473,37 @@ void open_folder_and_select_items(HWND hwndOpener, const std::wstring& path) { ILFree(piid); } +std::vector EnumerateAdapters(void) +{ + IDXGIAdapter1* pAdapter; + std::vector vAdapters; + IDXGIFactory1* pFactory = NULL; + + + // Create a DXGIFactory object. + if (FAILED(CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory))) + { + return vAdapters; + } + + + for (UINT i = 0; + pFactory->EnumAdapters1(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; + ++i) + { + vAdapters.push_back(pAdapter); + } + + + if (pFactory) + { + pFactory->Release(); + } + + return vAdapters; + +} + void export_tspack(HWND hWndParent, const std::filesystem::path& logDir, const std::string& crashLog, const std::string& troubleshootingPackData) { static const char* SourceLogFiles[] = { "output.log", // XIVLauncher for Windows @@ -1022,6 +1056,27 @@ int main() { log << std::format(L"System Time: {0:%F} {0:%T} {0:%Ez}", std::chrono::system_clock::now()) << std::endl; log << std::format(L"CPU Vendor: {}", vendor) << std::endl; log << std::format(L"CPU Brand: {}", brand) << std::endl; + + std::vector availableAdapters = EnumerateAdapters(); + + for (int i = 0; i < availableAdapters.size(); i++) { + auto& myAdapter = *availableAdapters[i]; + auto adapterDescription = DXGI_ADAPTER_DESC1(); + myAdapter.GetDesc1(&adapterDescription); + // Print description to console here + log << std::format(L"GPU Desc: {}", adapterDescription.Description) << std::endl; + } + + /* + for_each(availableAdapters.begin(), availableAdapters.end(), [](IDXGIAdapter1* adapter, , std::wostream log) { + auto& myAdapter = *adapter; + auto adapterDescription = DXGI_ADAPTER_DESC1(); + myAdapter.GetDesc1(&adapterDescription); + // Print description to console here + log << std::format(L"GPU Desc: {}", adapterDescription.Description) << std::endl; + }); + */ + log << L"\n" << stackTrace << std::endl; if (pProgressDialog) From abe27891c3ed07bf7be73bc7f19221945108afcc Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Thu, 12 Feb 2026 20:45:23 +0100 Subject: [PATCH 2/3] Tidy tidy --- DalamudCrashHandler/DalamudCrashHandler.cpp | 32 +++++---------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/DalamudCrashHandler/DalamudCrashHandler.cpp b/DalamudCrashHandler/DalamudCrashHandler.cpp index 165cce26d..81b37992b 100644 --- a/DalamudCrashHandler/DalamudCrashHandler.cpp +++ b/DalamudCrashHandler/DalamudCrashHandler.cpp @@ -473,20 +473,17 @@ void open_folder_and_select_items(HWND hwndOpener, const std::wstring& path) { ILFree(piid); } -std::vector EnumerateAdapters(void) +std::vector enum_dxgi_adapters() { - IDXGIAdapter1* pAdapter; - std::vector vAdapters; + std::vector vAdapters; + IDXGIFactory1* pFactory = NULL; - - - // Create a DXGIFactory object. if (FAILED(CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory))) { return vAdapters; } - + IDXGIAdapter1* pAdapter; for (UINT i = 0; pFactory->EnumAdapters1(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) @@ -501,7 +498,6 @@ std::vector EnumerateAdapters(void) } return vAdapters; - } void export_tspack(HWND hWndParent, const std::filesystem::path& logDir, const std::string& crashLog, const std::string& troubleshootingPackData) { @@ -1057,26 +1053,12 @@ int main() { log << std::format(L"CPU Vendor: {}", vendor) << std::endl; log << std::format(L"CPU Brand: {}", brand) << std::endl; - std::vector availableAdapters = EnumerateAdapters(); - - for (int i = 0; i < availableAdapters.size(); i++) { - auto& myAdapter = *availableAdapters[i]; - auto adapterDescription = DXGI_ADAPTER_DESC1(); - myAdapter.GetDesc1(&adapterDescription); - // Print description to console here + for (IDXGIAdapter1* adapter : enum_dxgi_adapters()) { + DXGI_ADAPTER_DESC1 adapterDescription{}; + myAdapter->GetDesc1(&adapterDescription); log << std::format(L"GPU Desc: {}", adapterDescription.Description) << std::endl; } - /* - for_each(availableAdapters.begin(), availableAdapters.end(), [](IDXGIAdapter1* adapter, , std::wostream log) { - auto& myAdapter = *adapter; - auto adapterDescription = DXGI_ADAPTER_DESC1(); - myAdapter.GetDesc1(&adapterDescription); - // Print description to console here - log << std::format(L"GPU Desc: {}", adapterDescription.Description) << std::endl; - }); - */ - log << L"\n" << stackTrace << std::endl; if (pProgressDialog) From b1b99bae134b76c954193739a1a848ee30e16d44 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Thu, 12 Feb 2026 21:03:38 +0100 Subject: [PATCH 3/3] Use correct variable name --- DalamudCrashHandler/DalamudCrashHandler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DalamudCrashHandler/DalamudCrashHandler.cpp b/DalamudCrashHandler/DalamudCrashHandler.cpp index 81b37992b..f8cadd82b 100644 --- a/DalamudCrashHandler/DalamudCrashHandler.cpp +++ b/DalamudCrashHandler/DalamudCrashHandler.cpp @@ -491,7 +491,6 @@ std::vector enum_dxgi_adapters() vAdapters.push_back(pAdapter); } - if (pFactory) { pFactory->Release(); @@ -1055,7 +1054,7 @@ int main() { for (IDXGIAdapter1* adapter : enum_dxgi_adapters()) { DXGI_ADAPTER_DESC1 adapterDescription{}; - myAdapter->GetDesc1(&adapterDescription); + adapter->GetDesc1(&adapterDescription); log << std::format(L"GPU Desc: {}", adapterDescription.Description) << std::endl; }