Mesa (main): mesa: add a more straightforward callback for replacing shaders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 25 11:13:33 UTC 2021


Module: Mesa
Branch: main
Commit: d14c09f7f6960060caee51ce7b19637af321d472
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d14c09f7f6960060caee51ce7b19637af321d472

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Nov 24 12:49:08 2021 -0500

mesa: add a more straightforward callback for replacing shaders

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13946>

---

 src/mesa/main/shaderapi.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index c66ceeb470e..294f6471f71 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -88,6 +88,10 @@
 
    char* load_shader_replacement(struct _shader_replacement *repl);
 
+   And a method to replace the shader without sha1 matching:
+
+   char *try_direct_replace(const char *app, const char *source)
+
    shader_replacement.h can be generated at build time, or copied
    from an external folder, or any other method.
 */
@@ -98,6 +102,12 @@ struct _shader_replacement {
    gl_shader_stage stage;
 };
 struct _shader_replacement shader_replacements[0];
+
+static char *try_direct_replace(const char *app, const char *source)
+{
+   return NULL;
+}
+
 static char* load_shader_replacement(struct _shader_replacement *repl)
 {
    return NULL;
@@ -2044,8 +2054,12 @@ _mesa_read_shader_source(const gl_shader_stage stage, const char *source)
    generate_sha1(source, sha);
 
    if (!debug_get_bool_option("MESA_NO_SHADER_REPLACEMENT", false)) {
-      const char *process_name =
-         ARRAY_SIZE(shader_replacements) ? util_get_process_name() : NULL;
+      const char *process_name = util_get_process_name();
+
+      char *new_source = try_direct_replace(process_name, source);
+      if (new_source)
+         return new_source;
+
       for (size_t i = 0; i < ARRAY_SIZE(shader_replacements); i++) {
          if (stage != shader_replacements[i].stage)
             continue;



More information about the mesa-commit mailing list