From 76a50c2469a8608d8dc14a78efa0937d9bf6461a Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 8 Oct 2015 13:34:45 +0200 Subject: [PATCH] Add simple hacked-in environment variable settings for win32 vk layers --- renderdoc/os/win32/win32_process.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/renderdoc/os/win32/win32_process.cpp b/renderdoc/os/win32/win32_process.cpp index 30129fdc3..034a42a57 100644 --- a/renderdoc/os/win32/win32_process.cpp +++ b/renderdoc/os/win32/win32_process.cpp @@ -251,9 +251,33 @@ static PROCESS_INFORMATION RunProcess(const char *app, const char *workingDir, c wcscat_s(paramsAlloc, len, wcmd.c_str()); } + // VKTODOHIGH make this environment string modification more flexible (like linux's + // which will account for pre-existing variables and prepend/append). Perhaps + // via callbacks registered to API hooks? + const wchar_t *myEnv = GetEnvironmentStringsW(); + + wstring newEnv; + + // copy up to the terminating "\0\0" + while(myEnv[0] != L'\0' || myEnv[1] != L'\0') + newEnv.push_back(*(myEnv++)); + + newEnv.push_back(L'\0'); + + newEnv += L"VK_LAYER_PATH="; + newEnv += dirname(StringFormat::UTF82Wide(FileIO::GetReplayAppFilename())); + newEnv.push_back(L'\0'); + + newEnv += L"VK_DEVICE_LAYERS=RenderDoc"; + newEnv.push_back(L'\0'); + newEnv += L"VK_INSTANCE_LAYERS=RenderDoc"; + newEnv.push_back(L'\0'); + + newEnv.push_back(L'\0'); + BOOL retValue = CreateProcessW(NULL, paramsAlloc, - &pSec, &tSec, false, CREATE_SUSPENDED, - NULL, workdir.c_str(), &si, &pi); + &pSec, &tSec, false, CREATE_SUSPENDED|CREATE_UNICODE_ENVIRONMENT, + (void *)newEnv.c_str(), workdir.c_str(), &si, &pi); SAFE_DELETE_ARRAY(paramsAlloc);