[PATCH vkd3d 6/6] vkd3d-common: Rework debug infrastructure.
Giovanni Mascellani
gmascellani at codeweavers.com
Thu May 12 08:54:17 CDT 2022
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
Il 10/05/22 20:21, Matteo Bruni ha scritto:
> Mostly so that the debug primitives don't depend on a shared
> variable.
>
> Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
> ---
> This allows to keep using a separate debug env var for vkd3d-shader
> even when building vkd3d as static lib(s). That will eventually make
> it possible to drop the related change in the vkd3d copy imported into
> Wine.
>
> include/private/vkd3d_debug.h | 32 +++++++++++++++++----------
> libs/vkd3d-common/blob.c | 2 ++
> libs/vkd3d-common/debug.c | 23 +++++++++----------
> libs/vkd3d-common/error.c | 2 ++
> libs/vkd3d-common/memory.c | 2 ++
> libs/vkd3d-shader/d3dbc.c | 2 ++
> libs/vkd3d-shader/dxbc.c | 2 ++
> libs/vkd3d-shader/hlsl.c | 2 ++
> libs/vkd3d-shader/hlsl.l | 2 ++
> libs/vkd3d-shader/hlsl.y | 2 ++
> libs/vkd3d-shader/hlsl_codegen.c | 2 ++
> libs/vkd3d-shader/hlsl_constant_ops.c | 2 ++
> libs/vkd3d-shader/hlsl_sm1.c | 2 ++
> libs/vkd3d-shader/hlsl_sm4.c | 2 ++
> libs/vkd3d-shader/preproc.l | 2 ++
> libs/vkd3d-shader/preproc.y | 2 ++
> libs/vkd3d-shader/spirv.c | 2 ++
> libs/vkd3d-shader/trace.c | 2 ++
> libs/vkd3d-shader/vkd3d_shader_main.c | 2 +-
> libs/vkd3d/command.c | 2 ++
> libs/vkd3d/device.c | 2 ++
> libs/vkd3d/resource.c | 2 ++
> libs/vkd3d/state.c | 2 ++
> libs/vkd3d/utils.c | 2 ++
> 24 files changed, 73 insertions(+), 26 deletions(-)
>
> diff --git a/include/private/vkd3d_debug.h b/include/private/vkd3d_debug.h
> index 8ab653ae..bc3bf5c9 100644
> --- a/include/private/vkd3d_debug.h
> +++ b/include/private/vkd3d_debug.h
> @@ -44,9 +44,15 @@ enum vkd3d_dbg_level
> VKD3D_DBG_LEVEL_TRACE,
> };
>
> -enum vkd3d_dbg_level vkd3d_dbg_get_level(void);
> +struct vkd3d_debug_channel
> +{
> + const char name[64];
> + enum vkd3d_dbg_level level;
> +};
> +
> +enum vkd3d_dbg_level vkd3d_dbg_get_level(struct vkd3d_debug_channel *channel);
>
> -void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...) VKD3D_PRINTF_FUNC(3, 4);
> +void vkd3d_dbg_printf(struct vkd3d_debug_channel *channel, enum vkd3d_dbg_level level, const char *function, const char *fmt, ...) VKD3D_PRINTF_FUNC(4, 5);
>
> const char *vkd3d_dbg_sprintf(const char *fmt, ...) VKD3D_PRINTF_FUNC(1, 2);
> const char *vkd3d_dbg_vsprintf(const char *fmt, va_list args);
> @@ -54,13 +60,15 @@ const char *debugstr_a(const char *str);
> const char *debugstr_an(const char *str, size_t n);
> const char *debugstr_w(const WCHAR *wstr, size_t wchar_size);
>
> -#define VKD3D_DBG_LOG(level) \
> +#define VKD3D_DBG_LOG(channel, level) \
> do { \
> + struct vkd3d_debug_channel *vkd3d_dbg_channel = &channel; \
> const enum vkd3d_dbg_level vkd3d_dbg_level = VKD3D_DBG_LEVEL_##level; \
> VKD3D_DBG_PRINTF
>
> -#define VKD3D_DBG_LOG_ONCE(first_time_level, level) \
> +#define VKD3D_DBG_LOG_ONCE(channel, first_time_level, level) \
> do { \
> + struct vkd3d_debug_channel *vkd3d_dbg_channel = &channel; \
> static bool vkd3d_dbg_next_time; \
> const enum vkd3d_dbg_level vkd3d_dbg_level = vkd3d_dbg_next_time \
> ? VKD3D_DBG_LEVEL_##level : VKD3D_DBG_LEVEL_##first_time_level; \
> @@ -68,29 +76,29 @@ const char *debugstr_w(const WCHAR *wstr, size_t wchar_size);
> VKD3D_DBG_PRINTF
>
> #define VKD3D_DBG_PRINTF(...) \
> - vkd3d_dbg_printf(vkd3d_dbg_level, __FUNCTION__, __VA_ARGS__); } while (0)
> + vkd3d_dbg_printf(vkd3d_dbg_channel, vkd3d_dbg_level, __FUNCTION__, __VA_ARGS__); } while (0)
>
> #ifndef TRACE
> -#define TRACE VKD3D_DBG_LOG(TRACE)
> +#define TRACE VKD3D_DBG_LOG(vkd3d_debug_channel, TRACE)
> #endif
>
> #ifndef WARN
> -#define WARN VKD3D_DBG_LOG(WARN)
> +#define WARN VKD3D_DBG_LOG(vkd3d_debug_channel, WARN)
> #endif
>
> #ifndef FIXME
> -#define FIXME VKD3D_DBG_LOG(FIXME)
> +#define FIXME VKD3D_DBG_LOG(vkd3d_debug_channel, FIXME)
> #endif
>
> -#define ERR VKD3D_DBG_LOG(ERR)
> +#define ERR VKD3D_DBG_LOG(vkd3d_debug_channel, ERR)
>
> #ifndef TRACE_ON
> -#define TRACE_ON() (vkd3d_dbg_get_level() == VKD3D_DBG_LEVEL_TRACE)
> +#define TRACE_ON() (vkd3d_dbg_get_level(&vkd3d_debug_channel) == VKD3D_DBG_LEVEL_TRACE)
> #endif
>
> -#define FIXME_ONCE VKD3D_DBG_LOG_ONCE(FIXME, WARN)
> +#define FIXME_ONCE VKD3D_DBG_LOG_ONCE(vkd3d_debug_channel, FIXME, WARN)
>
> -#define VKD3D_DEBUG_ENV_NAME(name) const char *vkd3d_dbg_env_name = name
> +#define VKD3D_DEBUG_ENV_NAME(name) static struct vkd3d_debug_channel vkd3d_debug_channel = {name, ~0u};
>
> static inline const char *debugstr_guid(const GUID *guid)
> {
> diff --git a/libs/vkd3d-common/blob.c b/libs/vkd3d-common/blob.c
> index c46abb55..1cb817ce 100644
> --- a/libs/vkd3d-common/blob.c
> +++ b/libs/vkd3d-common/blob.c
> @@ -23,6 +23,8 @@
> #include "vkd3d_debug.h"
> #include "vkd3d_memory.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> struct vkd3d_blob
> {
> ID3D10Blob ID3DBlob_iface;
> diff --git a/libs/vkd3d-common/debug.c b/libs/vkd3d-common/debug.c
> index 4868f3fb..0cbf2fbe 100644
> --- a/libs/vkd3d-common/debug.c
> +++ b/libs/vkd3d-common/debug.c
> @@ -31,8 +31,6 @@
> #define VKD3D_DEBUG_BUFFER_COUNT 64
> #define VKD3D_DEBUG_BUFFER_SIZE 512
>
> -extern const char *vkd3d_dbg_env_name;
> -
> static const char *debug_level_names[] =
> {
> /* VKD3D_DBG_LEVEL_NONE */ "none",
> @@ -42,37 +40,36 @@ static const char *debug_level_names[] =
> /* VKD3D_DBG_LEVEL_TRACE */ "trace",
> };
>
> -enum vkd3d_dbg_level vkd3d_dbg_get_level(void)
> +enum vkd3d_dbg_level vkd3d_dbg_get_level(struct vkd3d_debug_channel *channel)
> {
> - static unsigned int level = ~0u;
> const char *vkd3d_debug;
> unsigned int i;
>
> - if (level != ~0u)
> - return level;
> + if (channel->level != ~0u)
> + return channel->level;
>
> - if (!(vkd3d_debug = getenv(vkd3d_dbg_env_name)))
> + if (!(vkd3d_debug = getenv(channel->name)))
> vkd3d_debug = "";
>
> for (i = 0; i < ARRAY_SIZE(debug_level_names); ++i)
> {
> if (!strcmp(debug_level_names[i], vkd3d_debug))
> {
> - level = i;
> - return level;
> + channel->level = i;
> + return channel->level;
> }
> }
>
> /* Default debug level. */
> - level = VKD3D_DBG_LEVEL_FIXME;
> - return level;
> + channel->level = VKD3D_DBG_LEVEL_FIXME;
> + return channel->level;
> }
>
> -void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...)
> +void vkd3d_dbg_printf(struct vkd3d_debug_channel *channel, enum vkd3d_dbg_level level, const char *function, const char *fmt, ...)
> {
> va_list args;
>
> - if (vkd3d_dbg_get_level() < level)
> + if (vkd3d_dbg_get_level(channel) < level)
> return;
>
> assert(level < ARRAY_SIZE(debug_level_names));
> diff --git a/libs/vkd3d-common/error.c b/libs/vkd3d-common/error.c
> index 81c1fd97..51928148 100644
> --- a/libs/vkd3d-common/error.c
> +++ b/libs/vkd3d-common/error.c
> @@ -19,6 +19,8 @@
> #include "vkd3d_common.h"
> #include "vkd3d_debug.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> HRESULT hresult_from_vkd3d_result(int vkd3d_result)
> {
> switch (vkd3d_result)
> diff --git a/libs/vkd3d-common/memory.c b/libs/vkd3d-common/memory.c
> index f46f180c..3546e136 100644
> --- a/libs/vkd3d-common/memory.c
> +++ b/libs/vkd3d-common/memory.c
> @@ -19,6 +19,8 @@
>
> #include "vkd3d_memory.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> void *vkd3d_malloc(size_t size)
> {
> void *ptr;
> diff --git a/libs/vkd3d-shader/d3dbc.c b/libs/vkd3d-shader/d3dbc.c
> index c5518752..e0e5c16e 100644
> --- a/libs/vkd3d-shader/d3dbc.c
> +++ b/libs/vkd3d-shader/d3dbc.c
> @@ -24,6 +24,8 @@
>
> #include "vkd3d_shader_private.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #define VKD3D_SM1_VS 0xfffeu
> #define VKD3D_SM1_PS 0xffffu
>
> diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
> index 17be2306..410ed371 100644
> --- a/libs/vkd3d-shader/dxbc.c
> +++ b/libs/vkd3d-shader/dxbc.c
> @@ -21,6 +21,8 @@
> #include "vkd3d_shader_private.h"
> #include "sm4.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> void dxbc_writer_init(struct dxbc_writer *dxbc)
> {
> memset(dxbc, 0, sizeof(*dxbc));
> diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
> index 7239b183..ffee93a6 100644
> --- a/libs/vkd3d-shader/hlsl.c
> +++ b/libs/vkd3d-shader/hlsl.c
> @@ -22,6 +22,8 @@
> #include "hlsl.h"
> #include <stdio.h>
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> void hlsl_note(struct hlsl_ctx *ctx, const struct vkd3d_shader_location *loc,
> enum vkd3d_shader_log_level level, const char *fmt, ...)
> {
> diff --git a/libs/vkd3d-shader/hlsl.l b/libs/vkd3d-shader/hlsl.l
> index 2c398bc8..70a24c16 100644
> --- a/libs/vkd3d-shader/hlsl.l
> +++ b/libs/vkd3d-shader/hlsl.l
> @@ -24,6 +24,8 @@
> #include "hlsl.h"
> #include "hlsl.tab.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #define YYSTYPE HLSL_YYSTYPE
> #define YYLTYPE HLSL_YYLTYPE
>
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index 44e4964f..7d2f5014 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -108,6 +108,8 @@ int yylex(HLSL_YYSTYPE *yylval_param, HLSL_YYLTYPE *yylloc_param, void *yyscanne
> %code
> {
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #define YYLLOC_DEFAULT(cur, rhs, n) (cur) = YYRHSLOC(rhs, !!n)
>
> static void yyerror(YYLTYPE *loc, void *scanner, struct hlsl_ctx *ctx, const char *s)
> diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
> index 78b22910..0794cebd 100644
> --- a/libs/vkd3d-shader/hlsl_codegen.c
> +++ b/libs/vkd3d-shader/hlsl_codegen.c
> @@ -21,6 +21,8 @@
> #include "hlsl.h"
> #include <stdio.h>
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> /* Split uniforms into two variables representing the constant and temp
> * registers, and copy the former to the latter, so that writes to uniforms
> * work. */
> diff --git a/libs/vkd3d-shader/hlsl_constant_ops.c b/libs/vkd3d-shader/hlsl_constant_ops.c
> index d8787c21..647afc98 100644
> --- a/libs/vkd3d-shader/hlsl_constant_ops.c
> +++ b/libs/vkd3d-shader/hlsl_constant_ops.c
> @@ -22,6 +22,8 @@
>
> #include "hlsl.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> static bool fold_cast(struct hlsl_ctx *ctx, struct hlsl_ir_constant *dst, struct hlsl_ir_constant *src)
> {
> unsigned int k;
> diff --git a/libs/vkd3d-shader/hlsl_sm1.c b/libs/vkd3d-shader/hlsl_sm1.c
> index 0cdd3917..a6d14b32 100644
> --- a/libs/vkd3d-shader/hlsl_sm1.c
> +++ b/libs/vkd3d-shader/hlsl_sm1.c
> @@ -21,6 +21,8 @@
> #include "hlsl.h"
> #include <stdio.h>
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> bool hlsl_sm1_register_from_semantic(struct hlsl_ctx *ctx, const struct hlsl_semantic *semantic,
> bool output, D3DSHADER_PARAM_REGISTER_TYPE *type, unsigned int *reg)
> {
> diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c
> index a5fc094b..ce35d603 100644
> --- a/libs/vkd3d-shader/hlsl_sm4.c
> +++ b/libs/vkd3d-shader/hlsl_sm4.c
> @@ -23,6 +23,8 @@
> #include "vkd3d_d3dcommon.h"
> #include "sm4.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> static void write_sm4_block(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *buffer, const struct hlsl_block *block);
>
> static bool type_is_integer(const struct hlsl_type *type)
> diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l
> index 7686e018..f4db270d 100644
> --- a/libs/vkd3d-shader/preproc.l
> +++ b/libs/vkd3d-shader/preproc.l
> @@ -22,6 +22,8 @@
>
> #include "preproc.tab.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #undef ERROR /* defined in wingdi.h */
>
> #define YYSTYPE PREPROC_YYSTYPE
> diff --git a/libs/vkd3d-shader/preproc.y b/libs/vkd3d-shader/preproc.y
> index 3f02ac03..79870503 100644
> --- a/libs/vkd3d-shader/preproc.y
> +++ b/libs/vkd3d-shader/preproc.y
> @@ -46,6 +46,8 @@ int preproc_yylex(PREPROC_YYSTYPE *yylval_param, PREPROC_YYLTYPE *yylloc_param,
> %code
> {
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #define YYLLOC_DEFAULT(cur, rhs, n) (cur) = YYRHSLOC(rhs, !!n)
>
> #ifndef S_ISREG
> diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
> index 89b16305..b62a3f20 100644
> --- a/libs/vkd3d-shader/spirv.c
> +++ b/libs/vkd3d-shader/spirv.c
> @@ -34,6 +34,8 @@
> # include "vulkan/GLSL.std.450.h"
> #endif /* HAVE_SPIRV_UNIFIED1_GLSL_STD_450_H */
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> #ifdef HAVE_SPIRV_TOOLS
> # include "spirv-tools/libspirv.h"
>
> diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
> index 6c30edc9..80803d78 100644
> --- a/libs/vkd3d-shader/trace.c
> +++ b/libs/vkd3d-shader/trace.c
> @@ -27,6 +27,8 @@
> #include <stdio.h>
> #include <math.h>
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
> +
> static const char * const shader_opcode_names[] =
> {
> [VKD3DSIH_ABS ] = "abs",
> diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
> index 62baf17f..398d430b 100644
> --- a/libs/vkd3d-shader/vkd3d_shader_main.c
> +++ b/libs/vkd3d-shader/vkd3d_shader_main.c
> @@ -140,7 +140,7 @@ void vkd3d_shader_trace_text_(const char *text, size_t size, const char *functio
> q = end;
> else
> ++q;
> - vkd3d_dbg_printf(VKD3D_DBG_LEVEL_TRACE, function, "%.*s", (int)(q - p), p);
> + vkd3d_dbg_printf(&vkd3d_debug_channel, VKD3D_DBG_LEVEL_TRACE, function, "%.*s", (int)(q - p), p);
> }
> }
>
> diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
> index 55e6be58..60928bfc 100644
> --- a/libs/vkd3d/command.c
> +++ b/libs/vkd3d/command.c
> @@ -20,6 +20,8 @@
>
> #include "vkd3d_private.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> static void d3d12_fence_incref(struct d3d12_fence *fence);
> static void d3d12_fence_decref(struct d3d12_fence *fence);
> static HRESULT d3d12_fence_signal(struct d3d12_fence *fence, uint64_t value, VkFence vk_fence);
> diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
> index 5f8108ec..cfc8ed89 100644
> --- a/libs/vkd3d/device.c
> +++ b/libs/vkd3d/device.c
> @@ -19,6 +19,8 @@
> #include "vkd3d_private.h"
> #include "vkd3d_version.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> struct vkd3d_struct
> {
> enum vkd3d_structure_type type;
> diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
> index 68c28cd1..596b8f9e 100644
> --- a/libs/vkd3d/resource.c
> +++ b/libs/vkd3d/resource.c
> @@ -24,6 +24,8 @@
>
> LONG64 object_global_serial_id;
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> static inline bool is_cpu_accessible_heap(const D3D12_HEAP_PROPERTIES *properties)
> {
> if (properties->Type == D3D12_HEAP_TYPE_DEFAULT)
> diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c
> index 97e2856d..06260dab 100644
> --- a/libs/vkd3d/state.c
> +++ b/libs/vkd3d/state.c
> @@ -21,6 +21,8 @@
> #include "vkd3d_private.h"
> #include "vkd3d_shaders.h"
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> /* ID3D12RootSignature */
> static inline struct d3d12_root_signature *impl_from_ID3D12RootSignature(ID3D12RootSignature *iface)
> {
> diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
> index 8169b14b..73037654 100644
> --- a/libs/vkd3d/utils.c
> +++ b/libs/vkd3d/utils.c
> @@ -20,6 +20,8 @@
>
> #include <errno.h>
>
> +VKD3D_DEBUG_ENV_NAME("VKD3D_DEBUG");
> +
> #define COLOR (VK_IMAGE_ASPECT_COLOR_BIT)
> #define DEPTH (VK_IMAGE_ASPECT_DEPTH_BIT)
> #define STENCIL (VK_IMAGE_ASPECT_STENCIL_BIT)
More information about the wine-devel
mailing list