debug: Add skeleton for switchable logging

No real flags are defined, only the macros and functions.

  VREND_DEBUG(flag, ctx, ...) translates to fprintf(stderr, ...)
    that is enabled based on whether logging is enabled  for flag
    in context ctx

  VREND_DEBUG_EXT(flag, ctx, X) can be used to add code sequenses
    as X, e.g. specific logging calls like for streams.

v2: Make use of variadic macros to make the VREND_DEBUG macro more
    like a call to *printf (Following a suggestion by Gurchetan)

v3: Already include debug header in vrend_renderer.c

Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
macos/master
Gert Wollny 6 years ago committed by Jakob Bornecrantz
parent 47a2154bd3
commit 20afd5c45b
  1. 2
      src/Makefile.am
  2. 48
      src/vrend_debug.c
  3. 59
      src/vrend_debug.h
  4. 18
      src/vrend_renderer.c
  5. 4
      src/vrend_renderer.h

@ -27,6 +27,8 @@ libvrend_la_SOURCES = \
vrend_shader.h \
vrend_object.c \
vrend_object.h \
vrend_debug.c \
vrend_debug.h \
vrend_decode.c \
vrend_formats.c \
vrend_blitter.c \

@ -0,0 +1,48 @@
/**************************************************************************
*
* Copyright (C) 2018 Collabora Ltd
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#include "vrend_debug.h"
#include "vrend_renderer.h"
#include "util/u_debug.h"
#include <stdlib.h>
#include <stdio.h>
static const struct debug_named_value vrend_debug_options[] = {
DEBUG_NAMED_VALUE_END
};
static uint64_t vrend_debug_flags = 0;
static int vrend_debug_flags_initalized = 0;
void vrend_init_debug_flags()
{
if (!vrend_debug_flags_initalized) {
vrend_debug_flags_initalized = 1;
vrend_debug_flags = debug_get_flags_option("VREND_DEBUG",
vrend_debug_options, 0);
}
}
unsigned vrend_debug(struct vrend_context *ctx, enum virgl_debug_flags flag)
{
return (vrend_debug_flags & flag) || vrend_context_has_debug_flag(ctx, flag);
}

@ -0,0 +1,59 @@
/**************************************************************************
*
* Copyright (C) 2018 Collabora Ltd
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#ifndef vrend_debug_h
#define vrend_debug_h
struct vrend_context;
void vrend_print_context_name(struct vrend_context *ctx);
enum virgl_debug_flags {
dummy
};
void vrend_init_debug_flags(void);
unsigned vrend_debug(struct vrend_context *ctx, enum virgl_debug_flags flag);
#ifndef NDEBUG
#define VREND_DEBUG(flag, ctx, ...) \
if (vrend_debug(ctx, flag)) \
do { \
vrend_print_context_name(ctx); \
fprintf(stderr, __VA_ARGS__); \
} while (0)
#define VREND_DEBUG_EXT(flag, ctx, X) \
if (vrend_debug(ctx, flag)) \
do { \
vrend_print_context_name(ctx); \
X; \
} while (0)
#else
#define VREND_DEBUG(flag, ctx, fmt, ...)
#define VREND_DEBUG_EXT(flag, ctx, X)
#endif
#endif

@ -47,6 +47,7 @@
#include "vrend_shader.h"
#include "vrend_renderer.h"
#include "vrend_debug.h"
#include "virgl_hw.h"
@ -577,6 +578,8 @@ struct vrend_context {
struct list_head ctx_entry;
struct vrend_shader_cfg shader_cfg;
unsigned debug_flags;
};
static struct vrend_resource *vrend_renderer_ctx_res_lookup(struct vrend_context *ctx, int res_handle);
@ -8632,6 +8635,19 @@ void vrend_renderer_create_sub_ctx(struct vrend_context *ctx, int sub_ctx_id)
ctx->sub0 = sub;
}
unsigned vrend_context_has_debug_flag(struct vrend_context *ctx, enum virgl_debug_flags flag)
{
return ctx && (ctx->debug_flags & flag);
}
void vrend_print_context_name(struct vrend_context *ctx)
{
if (ctx)
fprintf(stderr, "%s: ", ctx->debug_name);
else
fprintf(stderr, "HOST: ");
}
void vrend_renderer_destroy_sub_ctx(struct vrend_context *ctx, int sub_ctx_id)
{
struct vrend_sub_context *sub, *tofree = NULL;
@ -8699,7 +8715,7 @@ void vrend_renderer_reset(void)
vrend_object_fini_resource_table();
vrend_decode_reset(true);
vrend_object_init_resource_table();
vrend_renderer_context_create_internal(0, 0, NULL);
vrend_renderer_context_create_internal(0, strlen("HOST"), "HOST");
}
int vrend_renderer_get_poll_fd(void)

@ -28,6 +28,7 @@
#include "pipe/p_state.h"
#include "util/u_inlines.h"
#include "virgl_protocol.h"
#include "vrend_debug.h"
#include "vrend_iov.h"
#include "virgl_hw.h"
#include <epoxy/gl.h>
@ -409,6 +410,9 @@ void vrend_renderer_reset(void);
int vrend_renderer_get_poll_fd(void);
void vrend_decode_reset(bool ctx_0_only);
unsigned vrend_context_has_debug_flag(struct vrend_context *ctx,
enum virgl_debug_flags flag);
unsigned vrend_renderer_query_multisample_caps(unsigned max_samples,
struct virgl_caps_v2 *caps);

Loading…
Cancel
Save