launcher: check for custom d3d9.dll in user's game directory (#309)

## Link to GitHub Issue, if one exists
n/a

## Description of change
Log a message if d3d9.dll (and friends) are found in the game root or
the modules directory.

This is to help with troubleshooting in cases where the user is unaware
that d3d9 is being used to inject other DLLs (e.g., ifs_layeredfs), or
when DX9 reimplementation is causing issues / crashes (e.g., dxvk).

## Testing
Observed the new messages being logged in both modules / root directory.
This commit is contained in:
bicarus-dev
2025-05-02 01:51:23 -07:00
committed by GitHub
parent 4f72b0a98b
commit 2b735ffd55
3 changed files with 23 additions and 0 deletions
+10
View File
@@ -1820,6 +1820,16 @@ int main_implementation(int argc, char *argv[]) {
exit(spicecfg_run(sextet_devices)); exit(spicecfg_run(sextet_devices));
} }
// log some DLLs found in path (purely for troubleshooting purposes to detect
// dxvk, ForceD3D9On12, ifs_layeredfs, etc)
libutils::warn_if_dll_exists("d3d8.dll");
libutils::warn_if_dll_exists("d3d9.dll");
libutils::warn_if_dll_exists("d3d10core.dll");
libutils::warn_if_dll_exists("d3d11.dll");
libutils::warn_if_dll_exists("d3d12.dll");
libutils::warn_if_dll_exists("dxgi.dll");
libutils::warn_if_dll_exists("opengl32.dll");
// complain loudly & early about dll load ordering issue // complain loudly & early about dll load ordering issue
libutils::check_duplicate_dlls(); libutils::check_duplicate_dlls();
+12
View File
@@ -356,3 +356,15 @@ void libutils::check_duplicate_dlls() {
} }
} }
} }
void libutils::warn_if_dll_exists(const std::string &file_name) {
if (fileutils::file_exists(MODULE_PATH / file_name)) {
log_info("libutils", "found user-supplied {} in modules directory", file_name);
return;
}
const auto &spice_bin_path = libutils::module_file_name(nullptr).parent_path();
if (fileutils::file_exists(spice_bin_path / file_name)) {
log_info("libutils", "found user-supplied {} next to spice executable path", file_name);
return;
}
}
+1
View File
@@ -25,6 +25,7 @@ namespace libutils {
} }
void check_duplicate_dlls(); void check_duplicate_dlls();
void warn_if_dll_exists(const std::string &file_name);
// get module handle helpers // get module handle helpers
HMODULE get_module(const char *module_name); HMODULE get_module(const char *module_name);