gallium/hud: control visibility at startup and runtime.
- env GALLIUM_HUD_VISIBLE: control default visibility - env GALLIUM_HUD_SIGNAL_TOGGLE: toggle visibility via signal Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
0bee3acc2a
commit
56a1c10bb8
|
@ -179,6 +179,12 @@ Mesa EGL supports different sets of environment variables. See the
|
||||||
<li>GALLIUM_HUD - draws various information on the screen, like framerate,
|
<li>GALLIUM_HUD - draws various information on the screen, like framerate,
|
||||||
cpu load, driver statistics, performance counters, etc.
|
cpu load, driver statistics, performance counters, etc.
|
||||||
Set GALLIUM_HUD=help and run e.g. glxgears for more info.
|
Set GALLIUM_HUD=help and run e.g. glxgears for more info.
|
||||||
|
<li>GALLIUM_HUD_VISIBLE - control default visibility, defaults to true.
|
||||||
|
<li>GALLIUM_HUD_TOGGLE_SIGNAL - toggle visibility via user specified signal.
|
||||||
|
Especially useful to toggle hud at specific points of application and
|
||||||
|
disable for unencumbered viewing the rest of the time. For example, set
|
||||||
|
GALLIUM_HUD_VISIBLE to false and GALLIUM_HUD_SIGNAL_TOGGLE to 10 (SIGUSR1).
|
||||||
|
Use kill -10 <pid> to toggle the hud as desired.
|
||||||
<li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc.
|
<li>GALLIUM_LOG_FILE - specifies a file for logging all errors, warnings, etc.
|
||||||
rather than stderr.
|
rather than stderr.
|
||||||
<li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment
|
<li>GALLIUM_PRINT_OPTIONS - if non-zero, print all the Gallium environment
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
* Set GALLIUM_HUD=help for more info.
|
* Set GALLIUM_HUD=help for more info.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "hud/hud_context.h"
|
#include "hud/hud_context.h"
|
||||||
|
@ -51,6 +52,8 @@
|
||||||
#include "tgsi/tgsi_text.h"
|
#include "tgsi/tgsi_text.h"
|
||||||
#include "tgsi/tgsi_dump.h"
|
#include "tgsi/tgsi_dump.h"
|
||||||
|
|
||||||
|
/* Control the visibility of all HUD contexts */
|
||||||
|
static boolean huds_visible = TRUE;
|
||||||
|
|
||||||
struct hud_context {
|
struct hud_context {
|
||||||
struct pipe_context *pipe;
|
struct pipe_context *pipe;
|
||||||
|
@ -95,6 +98,11 @@ struct hud_context {
|
||||||
} text, bg, whitelines;
|
} text, bg, whitelines;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_visible_handler(int sig, siginfo_t *siginfo, void *context)
|
||||||
|
{
|
||||||
|
huds_visible = !huds_visible;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
hud_draw_colored_prims(struct hud_context *hud, unsigned prim,
|
hud_draw_colored_prims(struct hud_context *hud, unsigned prim,
|
||||||
|
@ -441,6 +449,9 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)
|
||||||
struct hud_pane *pane;
|
struct hud_pane *pane;
|
||||||
struct hud_graph *gr;
|
struct hud_graph *gr;
|
||||||
|
|
||||||
|
if (!huds_visible)
|
||||||
|
return;
|
||||||
|
|
||||||
hud->fb_width = tex->width0;
|
hud->fb_width = tex->width0;
|
||||||
hud->fb_height = tex->height0;
|
hud->fb_height = tex->height0;
|
||||||
hud->constants.two_div_fb_width = 2.0f / hud->fb_width;
|
hud->constants.two_div_fb_width = 2.0f / hud->fb_width;
|
||||||
|
@ -1125,6 +1136,10 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
|
||||||
struct pipe_sampler_view view_templ;
|
struct pipe_sampler_view view_templ;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
const char *env = debug_get_option("GALLIUM_HUD", NULL);
|
const char *env = debug_get_option("GALLIUM_HUD", NULL);
|
||||||
|
unsigned signo = debug_get_num_option("GALLIUM_HUD_TOGGLE_SIGNAL", 0);
|
||||||
|
static boolean sig_handled = FALSE;
|
||||||
|
struct sigaction action = {};
|
||||||
|
huds_visible = debug_get_bool_option("GALLIUM_HUD_VISIBLE", TRUE);
|
||||||
|
|
||||||
if (!env || !*env)
|
if (!env || !*env)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1267,6 +1282,20 @@ hud_create(struct pipe_context *pipe, struct cso_context *cso)
|
||||||
|
|
||||||
LIST_INITHEAD(&hud->pane_list);
|
LIST_INITHEAD(&hud->pane_list);
|
||||||
|
|
||||||
|
/* setup sig handler once for all hud contexts */
|
||||||
|
if (!sig_handled && signo != 0) {
|
||||||
|
action.sa_sigaction = &signal_visible_handler;
|
||||||
|
action.sa_flags = SA_SIGINFO;
|
||||||
|
|
||||||
|
if (signo >= NSIG)
|
||||||
|
fprintf(stderr, "gallium_hud: invalid signal %u\n", signo);
|
||||||
|
else if (sigaction(signo, &action, NULL) < 0)
|
||||||
|
fprintf(stderr, "gallium_hud: unable to set handler for signal %u\n", signo);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
|
sig_handled = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
hud_parse_env_var(hud, env);
|
hud_parse_env_var(hud, env);
|
||||||
return hud;
|
return hud;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue