dzn: add debug option to redirect stdout/stderr
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Thu, 19 May 2022 12:47:31 +0000 (14:47 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 1 Jun 2022 08:54:22 +0000 (08:54 +0000)
For applications that doesn't have a terminal, it's useful to get output
like nir_log etc output somewhere.

This outputs these to stderr.txt and stdout.txt in the current user's
home directory, typically in C:\Users\my-user\.

Acked-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16640>

src/microsoft/vulkan/dzn_device.c
src/microsoft/vulkan/dzn_private.h

index 941d0dd..34f5607 100644 (file)
@@ -43,6 +43,7 @@
 #include <stdlib.h>
 
 #include <windows.h>
+#include <shlobj.h>
 
 #include <directx/d3d12sdklayers.h>
 
@@ -111,6 +112,7 @@ static const struct debug_control dzn_debug_options[] = {
    { "gbv", DZN_DEBUG_GBV },
    { "d3d12", DZN_DEBUG_D3D12 },
    { "debugger", DZN_DEBUG_DEBUGGER },
+   { "redirects", DZN_DEBUG_REDIRECTS },
    { NULL, 0 }
 };
 
@@ -187,6 +189,16 @@ dzn_instance_create(const VkInstanceCreateInfo *pCreateInfo,
       }
    }
 
+   if (instance->debug_flags & DZN_DEBUG_REDIRECTS) {
+      char home[MAX_PATH], path[MAX_PATH];
+      if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_PROFILE, NULL, 0, home))) {
+         snprintf(path, sizeof(path), "%s\\stderr.txt", home);
+         freopen(path, "w", stderr);
+         snprintf(path, sizeof(path), "%s\\stdout.txt", home);
+         freopen(path, "w", stdout);
+      }
+   }
+
    instance->dxil_validator = dxil_create_validator(NULL);
    instance->d3d12.serialize_root_sig = d3d12_get_serialize_root_sig();
 
index f9142fe..1d09e0a 100644 (file)
@@ -921,6 +921,7 @@ enum dzn_debug_flags {
    DZN_DEBUG_GBV = 1 << 6,
    DZN_DEBUG_D3D12 = 1 << 7,
    DZN_DEBUG_DEBUGGER = 1 << 8,
+   DZN_DEBUG_REDIRECTS = 1 << 9,
 };
 
 struct dzn_instance {