Started coding parsing command line parameters
diff --git a/src/D3D12Sample.cpp b/src/D3D12Sample.cpp
index c6f3d45..8eb91b1 100644
--- a/src/D3D12Sample.cpp
+++ b/src/D3D12Sample.cpp
@@ -1448,8 +1448,74 @@
WaitGPUIdle(g_FrameIndex);
}
-int main()
+struct CommandLineParameters
{
+ bool m_Help;
+ bool m_List;
+ UINT32 m_GPUIndex = UINT32_MAX;
+ std::wstring m_GPUSubstring;
+
+ bool Parse(int argc, wchar_t** argv)
+ {
+ for(int i = 1; i < argc; ++i)
+ {
+ if(_wcsicmp(argv[i], L"-h") == 0 || _wcsicmp(argv[i], L"--Help") == 0)
+ {
+ m_Help = true;
+ }
+ else if(_wcsicmp(argv[i], L"-l") == 0 || _wcsicmp(argv[i], L"--List") == 0)
+ {
+ m_List = true;
+ }
+ else if((_wcsicmp(argv[i], L"-g") == 0 || _wcsicmp(argv[i], L"--GPU") == 0) && i + 1 < argc)
+ {
+ m_GPUSubstring = argv[i + 1];
+ }
+ else if((_wcsicmp(argv[i], L"-i") == 0 || _wcsicmp(argv[i], L"--GPUIndex") == 0) && i + 1 < argc)
+ {
+ m_GPUIndex = _wtoi(argv[i + 1]);
+ }
+ else
+ return false;
+ }
+ return true;
+ }
+};
+
+static void PrintLogo()
+{
+ wprintf(L"%s\n", WINDOW_TITLE);
+}
+
+static void PrintHelp()
+{
+ wprintf(
+ L"Command line syntax:\n"
+ L"-h, --Help Print this information\n"
+ L"-l, --List Print list of GPUs\n"
+ L"-g S, --GPU S Select GPU with name containing S\n"
+ L"-i N, --GPUIndex N Select GPU index N\n"
+ );
+}
+
+int main2(int argc, wchar_t** argv)
+{
+ CommandLineParameters cmdLineParams;
+ if(!cmdLineParams.Parse(argc, argv))
+ {
+ wprintf(L"ERROR: Invalid command line syntax.\n");
+ PrintLogo();
+ PrintHelp();
+ return -1;
+ }
+
+ if(cmdLineParams.m_Help)
+ {
+ PrintLogo();
+ PrintHelp();
+ return 0;
+ }
+
g_Instance = (HINSTANCE)GetModuleHandle(NULL);
CoInitialize(NULL);
@@ -1508,4 +1574,22 @@
}
}
return (int)msg.wParam;
+}
+
+int wmain(int argc, wchar_t** argv)
+{
+ try
+ {
+ return main2(argc, argv);
+ }
+ catch(const std::exception& ex)
+ {
+ fwprintf(stderr, L"ERROR: %hs\n", ex.what());
+ return -1;
+ }
+ catch(...)
+ {
+ fwprintf(stderr, L"UNKNOWN ERROR.\n");
+ return -1;
+ }
}