From 3935d2540eadde33f711306d46f0bc216a274850 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 11 Jan 2019 13:43:15 +0100 Subject: [PATCH] [util] Get rid of explicit wchar_t parameter We shouldn't be catering to Windows' weird string encoding mechanisms. --- src/dxvk/dxvk_cs.cpp | 2 +- src/dxvk/dxvk_queue.cpp | 2 +- src/dxvk/dxvk_state_cache.cpp | 4 ++-- src/util/util_env.cpp | 14 ++++++++++++-- src/util/util_env.h | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/dxvk/dxvk_cs.cpp b/src/dxvk/dxvk_cs.cpp index bdc4f0dad..2ada434d2 100644 --- a/src/dxvk/dxvk_cs.cpp +++ b/src/dxvk/dxvk_cs.cpp @@ -133,7 +133,7 @@ namespace dxvk { void DxvkCsThread::threadFunc() { - env::setThreadName(L"dxvk-cs"); + env::setThreadName("dxvk-cs"); DxvkCsChunkRef chunk; diff --git a/src/dxvk/dxvk_queue.cpp b/src/dxvk/dxvk_queue.cpp index 9dc6b315a..a0ee3f609 100644 --- a/src/dxvk/dxvk_queue.cpp +++ b/src/dxvk/dxvk_queue.cpp @@ -35,7 +35,7 @@ namespace dxvk { void DxvkSubmissionQueue::threadFunc() { - env::setThreadName(L"dxvk-queue"); + env::setThreadName("dxvk-queue"); while (!m_stopped.load()) { Rc cmdList; diff --git a/src/dxvk/dxvk_state_cache.cpp b/src/dxvk/dxvk_state_cache.cpp index 494e009a4..999a797c7 100644 --- a/src/dxvk/dxvk_state_cache.cpp +++ b/src/dxvk/dxvk_state_cache.cpp @@ -360,7 +360,7 @@ namespace dxvk { void DxvkStateCache::workerFunc() { - env::setThreadName(L"dxvk-shader"); + env::setThreadName("dxvk-shader"); while (!m_stopThreads.load()) { WorkerItem item; @@ -385,7 +385,7 @@ namespace dxvk { void DxvkStateCache::writerFunc() { - env::setThreadName(L"dxvk-writer"); + env::setThreadName("dxvk-writer"); std::ofstream file; diff --git a/src/util/util_env.cpp b/src/util/util_env.cpp index 463234f78..a4c40b319 100644 --- a/src/util/util_env.cpp +++ b/src/util/util_env.cpp @@ -43,9 +43,19 @@ namespace dxvk::env { } - void setThreadName(const wchar_t* name) { + void setThreadName(const std::string& name) { using SetThreadDescriptionProc = void (WINAPI *) (HANDLE, PCWSTR); + int nameLen = ::MultiByteToWideChar( + CP_ACP, 0, name.c_str(), name.length() + 1, + nullptr, 0); + + std::vector wideName(nameLen); + + ::MultiByteToWideChar( + CP_ACP, 0, name.c_str(), name.length() + 1, + wideName.data(), nameLen); + HMODULE module = ::GetModuleHandleW(L"kernel32.dll"); if (module == nullptr) @@ -55,7 +65,7 @@ namespace dxvk::env { ::GetProcAddress(module, "SetThreadDescription")); if (proc != nullptr) - (*proc)(::GetCurrentThread(), name); + (*proc)(::GetCurrentThread(), wideName.data()); } } diff --git a/src/util/util_env.h b/src/util/util_env.h index 9a4d5d9ae..d672c6468 100644 --- a/src/util/util_env.h +++ b/src/util/util_env.h @@ -29,6 +29,6 @@ namespace dxvk::env { * \brief Sets name of the calling thread * \param [in] name Thread name */ - void setThreadName(const wchar_t* name); + void setThreadName(const std::string& name); }