mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
gl/context/glx: dump GLXFBConfig information to debug logs
This commit is contained in:
parent
ea930a4bf8
commit
c7c2d09acf
1 changed files with 234 additions and 20 deletions
|
@ -121,27 +121,236 @@ gst_gl_context_glx_new (GstGLDisplay * display)
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static void
|
||||||
_describe_fbconfig (Display * display, GLXFBConfig config)
|
gst_gl_context_glx_dump_fb_config (GstGLContextGLX * glx,
|
||||||
|
Display * dpy, GLXFBConfig fbconfig)
|
||||||
{
|
{
|
||||||
int val;
|
|
||||||
|
|
||||||
glXGetFBConfigAttrib (display, config, GLX_FBCONFIG_ID, &val);
|
#define SIMPLE_STRING_ASSIGN(res_str,value,to_check,str) \
|
||||||
GST_DEBUG ("ID: %d", val);
|
if (res_str == NULL && value == to_check) \
|
||||||
glXGetFBConfigAttrib (display, config, GLX_DOUBLEBUFFER, &val);
|
res_str = str
|
||||||
GST_DEBUG ("double buffering: %d", val);
|
|
||||||
glXGetFBConfigAttrib (display, config, GLX_RED_SIZE, &val);
|
int fb_id, render_type;
|
||||||
GST_DEBUG ("red: %d", val);
|
{
|
||||||
glXGetFBConfigAttrib (display, config, GLX_GREEN_SIZE, &val);
|
int visual_id;
|
||||||
GST_DEBUG ("green: %d", val);
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_FBCONFIG_ID,
|
||||||
glXGetFBConfigAttrib (display, config, GLX_BLUE_SIZE, &val);
|
&fb_id))
|
||||||
GST_DEBUG ("blue: %d", val);
|
return;
|
||||||
glXGetFBConfigAttrib (display, config, GLX_ALPHA_SIZE, &val);
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_VISUAL_ID,
|
||||||
GST_DEBUG ("alpha: %d", val);
|
&visual_id))
|
||||||
glXGetFBConfigAttrib (display, config, GLX_DEPTH_SIZE, &val);
|
return;
|
||||||
GST_DEBUG ("depth: %d", val);
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_RENDER_TYPE,
|
||||||
glXGetFBConfigAttrib (display, config, GLX_STENCIL_SIZE, &val);
|
&render_type))
|
||||||
GST_DEBUG ("stencil: %d", val);
|
return;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (glx, "dumping GLXFBConfig %p with id 0x%x and "
|
||||||
|
"visual id 0x%x", fbconfig, fb_id, visual_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
#define MAX_RENDER_TYPE 8
|
||||||
|
#define MAX_DRAWABLE_TYPE 8
|
||||||
|
int x_renderable, visual_type, drawable_type, caveat, i = 0;
|
||||||
|
const char *render_values[MAX_RENDER_TYPE] = { NULL, };
|
||||||
|
const char *drawable_values[MAX_DRAWABLE_TYPE] = { NULL, };
|
||||||
|
const char *caveat_str = NULL;
|
||||||
|
const char *visual_type_str = NULL;
|
||||||
|
char *render_type_str = NULL;
|
||||||
|
char *drawable_type_str = NULL;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_X_RENDERABLE,
|
||||||
|
&x_renderable))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_CONFIG_CAVEAT,
|
||||||
|
&caveat))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_X_VISUAL_TYPE,
|
||||||
|
&visual_type))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_DRAWABLE_TYPE,
|
||||||
|
&drawable_type))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_TRUE_COLOR,
|
||||||
|
"TrueColor");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_DIRECT_COLOR,
|
||||||
|
"DirectColor");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_PSEUDO_COLOR,
|
||||||
|
"PseudoColor");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_STATIC_COLOR,
|
||||||
|
"StaticColor");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_GRAY_SCALE,
|
||||||
|
"GrayScale");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_STATIC_GRAY,
|
||||||
|
"StaticGray");
|
||||||
|
SIMPLE_STRING_ASSIGN (visual_type_str, visual_type, GLX_NONE, "None");
|
||||||
|
|
||||||
|
SIMPLE_STRING_ASSIGN (caveat_str, caveat, GLX_NONE, "None");
|
||||||
|
SIMPLE_STRING_ASSIGN (caveat_str, caveat, GLX_SLOW_CONFIG, "SlowConfig");
|
||||||
|
SIMPLE_STRING_ASSIGN (caveat_str, caveat, GLX_NON_CONFORMANT_CONFIG,
|
||||||
|
"NonConformantConfig");
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
if (render_type & GLX_RGBA_BIT)
|
||||||
|
render_values[i++] = "RGBA";
|
||||||
|
if (render_type & GLX_COLOR_INDEX_BIT)
|
||||||
|
render_values[i++] = "Color Index";
|
||||||
|
|
||||||
|
/* bad things have happened if this fails: we haven't allocated enough
|
||||||
|
* space to hold all the values */
|
||||||
|
g_assert (i < MAX_RENDER_TYPE);
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
if (drawable_type & GLX_WINDOW_BIT)
|
||||||
|
drawable_values[i++] = "Window";
|
||||||
|
if (drawable_type & GLX_PIXMAP_BIT)
|
||||||
|
drawable_values[i++] = "Pixmap";
|
||||||
|
if (drawable_type & GLX_PBUFFER_BIT)
|
||||||
|
drawable_values[i++] = "PBuffer";
|
||||||
|
|
||||||
|
/* bad things have happened if this fails: we haven't allocated enough
|
||||||
|
* space to hold all the values */
|
||||||
|
g_assert (i < MAX_DRAWABLE_TYPE);
|
||||||
|
|
||||||
|
render_type_str = g_strjoinv ("|", (char **) render_values);
|
||||||
|
drawable_type_str = g_strjoinv ("|", (char **) drawable_values);
|
||||||
|
GST_DEBUG_OBJECT (glx, "Is XRenderable?: %s, visual type: (0x%x) %s, "
|
||||||
|
"render type: (0x%x) %s, drawable type: (0x%x) %s, caveat: (0x%x) %s",
|
||||||
|
x_renderable ? "YES" : "NO", visual_type, visual_type_str, render_type,
|
||||||
|
render_type_str, drawable_type, drawable_type_str, caveat, caveat_str);
|
||||||
|
g_free (render_type_str);
|
||||||
|
g_free (drawable_type_str);
|
||||||
|
#undef MAX_RENDER_TYPE
|
||||||
|
#undef MAX_DRAWABLE_TYPE
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int buffer_size, level, double_buffered, stereo, aux_buffers;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_BUFFER_SIZE,
|
||||||
|
&buffer_size))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_LEVEL, &level))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_DOUBLEBUFFER,
|
||||||
|
&double_buffered))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_STEREO, &stereo))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_AUX_BUFFERS,
|
||||||
|
&aux_buffers))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx, "Level: %i, buffer size: %i, double buffered: %i, "
|
||||||
|
"stereo: %i, aux buffers: %i", level, buffer_size, double_buffered,
|
||||||
|
stereo, aux_buffers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (render_type & GLX_RGBA_BIT) {
|
||||||
|
int r, g, b, a;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_RED_SIZE, &r))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_GREEN_SIZE, &g))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_BLUE_SIZE, &b))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_ALPHA_SIZE, &a))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx, "[R, G, B, A] = [%i, %i, %i, %i]", r, g, b, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int d, s;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_DEPTH_SIZE, &d))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_STENCIL_SIZE, &s))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (glx, "[D, S] = [%i, %i]", d, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int r, g, b, a;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_ACCUM_RED_SIZE, &r))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_ACCUM_GREEN_SIZE,
|
||||||
|
&g))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_ACCUM_BLUE_SIZE,
|
||||||
|
&b))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_ACCUM_ALPHA_SIZE,
|
||||||
|
&a))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx, "Accumulation [R, G, B, A] = [%i, %i, %i, %i]", r, g,
|
||||||
|
b, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int transparent_type;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_TRANSPARENT_TYPE,
|
||||||
|
&transparent_type))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (transparent_type == GLX_NONE) {
|
||||||
|
GST_DEBUG_OBJECT (glx, "Is opaque");
|
||||||
|
} else if (transparent_type == GLX_TRANSPARENT_INDEX) {
|
||||||
|
int transparent_index;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_TRANSPARENT_INDEX,
|
||||||
|
&transparent_index))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx, "Is transparent for index value 0x%x",
|
||||||
|
transparent_index);
|
||||||
|
} else if (transparent_type == GLX_TRANSPARENT_RGB) {
|
||||||
|
int r, g, b, a;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig,
|
||||||
|
GLX_TRANSPARENT_RED_VALUE, &r))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig,
|
||||||
|
GLX_TRANSPARENT_GREEN_VALUE, &g))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig,
|
||||||
|
GLX_TRANSPARENT_BLUE_VALUE, &b))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig,
|
||||||
|
GLX_TRANSPARENT_ALPHA_VALUE, &a))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx, "Is transparent for value [R, G, B, A] = "
|
||||||
|
"[0x%x, 0x%x, 0x%x, 0x%x]", r, g, b, a);
|
||||||
|
} else {
|
||||||
|
GST_DEBUG_OBJECT (glx, "Unknown transparent type 0x%x", transparent_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int w, h, pixels;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_MAX_PBUFFER_WIDTH,
|
||||||
|
&w))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_MAX_PBUFFER_HEIGHT,
|
||||||
|
&h))
|
||||||
|
return;
|
||||||
|
if (Success != glXGetFBConfigAttrib (dpy, fbconfig, GLX_MAX_PBUFFER_PIXELS,
|
||||||
|
&pixels))
|
||||||
|
return;
|
||||||
|
GST_DEBUG_OBJECT (glx,
|
||||||
|
"PBuffer maximum dimensions are [%i, %i]. Max pixels are %i", w,
|
||||||
|
h, pixels);
|
||||||
|
}
|
||||||
|
#undef SIMPLE_STRING_ASSIGN
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_gl_context_glx_dump_all_fb_configs (GstGLContextGLX * glx,
|
||||||
|
Display * dpy, int screen)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
GLXFBConfig *configs;
|
||||||
|
|
||||||
|
configs = glXGetFBConfigs (dpy, screen, &n);
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
gst_gl_context_glx_dump_fb_config (glx, dpy, configs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFree (configs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GLXContext
|
static GLXContext
|
||||||
|
@ -400,6 +609,9 @@ gst_gl_context_glx_choose_format (GstGLContext * context, GError ** error)
|
||||||
};
|
};
|
||||||
int fbcount;
|
int fbcount;
|
||||||
|
|
||||||
|
gst_gl_context_glx_dump_all_fb_configs (context_glx, device,
|
||||||
|
DefaultScreen (device));
|
||||||
|
|
||||||
context_glx->priv->fbconfigs = glXChooseFBConfig (device,
|
context_glx->priv->fbconfigs = glXChooseFBConfig (device,
|
||||||
DefaultScreen (device), attribs, &fbcount);
|
DefaultScreen (device), attribs, &fbcount);
|
||||||
|
|
||||||
|
@ -410,7 +622,9 @@ gst_gl_context_glx_choose_format (GstGLContext * context, GError ** error)
|
||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
_describe_fbconfig (device, context_glx->priv->fbconfigs[0]);
|
GST_DEBUG_OBJECT (context_glx, "Chosen GLXFBConfig:");
|
||||||
|
gst_gl_context_glx_dump_fb_config (context_glx, device,
|
||||||
|
context_glx->priv->fbconfigs[0]);
|
||||||
|
|
||||||
window_x11->visual_info = glXGetVisualFromFBConfig (device,
|
window_x11->visual_info = glXGetVisualFromFBConfig (device,
|
||||||
context_glx->priv->fbconfigs[0]);
|
context_glx->priv->fbconfigs[0]);
|
||||||
|
|
Loading…
Reference in a new issue