Enable the glStringMarker logger when available

glStringMarker is usually only available when running under some
kind of GL debugger, and can be used to insert strings into the
GL command string. Writing logs using it can be useful, since it
lets us correspond GL calls with what happens in compton.

More info about the extension can be found here:

https://www.khronos.org/registry/OpenGL/extensions/GREMEDY/GREMEDY_string_marker.txt

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
Yuxuan Shui 2019-01-09 21:58:16 +00:00
parent fed4634250
commit c93789f5e9
No known key found for this signature in database
GPG Key ID: D3A4405BE6CC17F4
4 changed files with 15 additions and 3 deletions

View File

@ -2953,6 +2953,14 @@ session_init(session_t *ps_old, int argc, char **argv) {
exit(0);
}
if (bkend_use_glx(ps)) {
auto glx_logger = glx_string_marker_logger_new();
if (glx_logger) {
log_info("Enabling gl string marker");
log_add_target_tls(glx_logger);
}
}
// Initialize software optimization
if (ps->o.sw_opti)
ps->o.sw_opti = swopti_init(ps);

View File

@ -8,7 +8,7 @@
#include <unistd.h>
#ifdef CONFIG_OPENGL
#include <GL/glx.h>
#include <opengl.h>
#endif
#include "compiler.h"
@ -326,6 +326,10 @@ static const struct log_ops glx_string_marker_logger_ops = {
};
struct log_target *glx_string_marker_logger_new(void) {
if (!glx_hasglext("GL_GREMEDY_string_marker")) {
return NULL;
}
void *fnptr = glXGetProcAddress((GLubyte *)"glStringMarkerGREMEDY");
if (!fnptr)
return NULL;

View File

@ -347,7 +347,7 @@ glx_init(session_t *ps, bool need_render) {
// Check GL_ARB_texture_non_power_of_two, requires a GLX context and
// must precede FBConfig fetching
if (need_render)
psglx->has_texture_non_power_of_two = glx_hasglext(ps,
psglx->has_texture_non_power_of_two = glx_hasglext(
"GL_ARB_texture_non_power_of_two");
// Acquire function addresses

View File

@ -119,7 +119,7 @@ glx_hasglxext(session_t *ps, const char *ext) {
* Check if a GLX extension exists.
*/
static inline bool
glx_hasglext(session_t *ps, const char *ext) {
glx_hasglext(const char *ext) {
const char *gl_exts = (const char *) glGetString(GL_EXTENSIONS);
if (!gl_exts) {
log_error("Failed get GL extension list.");