From 7094cc78a442eacabd68b22e9ca8468c1437075e Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 28 Jul 2021 18:41:01 -0700 Subject: [PATCH] driconf: Add force_gl_renderer override Allow driconf to also override GL_RENDERER string. Signed-off-by: Rob Clark Reviewed-by: Emil Velikov Part-of: --- src/gallium/auxiliary/pipe-loader/driinfo_gallium.h | 1 + src/gallium/frontends/dri/dri_screen.c | 5 +++++ src/gallium/include/frontend/api.h | 1 + src/mesa/main/getstring.c | 4 ++++ src/mesa/main/mtypes.h | 1 + src/mesa/state_tracker/st_extensions.c | 1 + src/util/driconf.h | 3 +++ 7 files changed, 16 insertions(+) diff --git a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h index 95bd3a7c057..2ec793e125a 100644 --- a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h +++ b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h @@ -37,6 +37,7 @@ DRI_CONF_SECTION_DEBUG DRI_CONF_TRANSCODE_ETC(false) DRI_CONF_TRANSCODE_ASTC(false) DRI_CONF_FORCE_GL_VENDOR() + DRI_CONF_FORCE_GL_RENDERER() DRI_CONF_OVERRIDE_VRAM_SIZE() DRI_CONF_GLX_EXTENSION_OVERRIDE() DRI_CONF_INDIRECT_GL_EXTENSION_OVERRIDE() diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c index 4810dd4d787..b9e381543ab 100644 --- a/src/gallium/frontends/dri/dri_screen.c +++ b/src/gallium/frontends/dri/dri_screen.c @@ -117,6 +117,10 @@ dri_init_options(struct dri_screen *screen) if (*vendor_str) options->force_gl_vendor = strdup(vendor_str); + char *renderer_str = driQueryOptionstr(optionCache, "force_gl_renderer"); + if (*renderer_str) + options->force_gl_renderer = strdup(renderer_str); + driComputeOptionsSha1(optionCache, options->config_options_sha1); } @@ -548,6 +552,7 @@ dri_destroy_screen(__DRIscreen * sPriv) pipe_loader_release(&screen->dev, 1); free(screen->options.force_gl_vendor); + free(screen->options.force_gl_renderer); /* The caller in dri_util preserves the fd ownership */ free(screen); diff --git a/src/gallium/include/frontend/api.h b/src/gallium/include/frontend/api.h index d0e13d40f4d..16f0ff18189 100644 --- a/src/gallium/include/frontend/api.h +++ b/src/gallium/include/frontend/api.h @@ -240,6 +240,7 @@ struct st_config_options bool transcode_etc; bool transcode_astc; char *force_gl_vendor; + char *force_gl_renderer; unsigned char config_options_sha1[20]; }; diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c index 7ad147cbca9..272482391a6 100644 --- a/src/mesa/main/getstring.c +++ b/src/mesa/main/getstring.c @@ -128,6 +128,10 @@ _mesa_GetString( GLenum name ) return (const GLubyte *) ctx->Const.VendorOverride; } + if (ctx->Const.RendererOverride && name == GL_RENDERER) { + return (const GLubyte *) ctx->Const.RendererOverride; + } + /* this is a required driver function */ assert(ctx->Driver.GetString); { diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index fd3e32af8bc..1646482e5a1 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -4301,6 +4301,7 @@ struct gl_constants struct spirv_supported_extensions *SpirVExtensions; char *VendorOverride; + char *RendererOverride; /** Buffer size used to upload vertices from glBegin/glEnd. */ unsigned glBeginEndBufferSize; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index fa6ecfeb86c..c7d5a4bc960 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1283,6 +1283,7 @@ void st_init_extensions(struct pipe_screen *screen, consts->ForceIntegerTexNearest = options->force_integer_tex_nearest; consts->VendorOverride = options->force_gl_vendor; + consts->RendererOverride = options->force_gl_renderer; consts->UniformBooleanTrue = consts->NativeIntegers ? ~0U : fui(1.0f); diff --git a/src/util/driconf.h b/src/util/driconf.h index 3a90832faff..0b6434acf85 100644 --- a/src/util/driconf.h +++ b/src/util/driconf.h @@ -223,6 +223,9 @@ #define DRI_CONF_FORCE_GL_VENDOR() \ DRI_CONF_OPT_S_NODEF(force_gl_vendor, "Override GPU vendor string.") +#define DRI_CONF_FORCE_GL_RENDERER() \ + DRI_CONF_OPT_S_NODEF(force_gl_renderer, "Override GPU renderer string.") + #define DRI_CONF_FORCE_COMPAT_PROFILE(def) \ DRI_CONF_OPT_B(force_compat_profile, def, \ "Force an OpenGL compatibility context")