summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/shaderapi.c34
-rw-r--r--src/mesa/main/shaderapi.h3
2 files changed, 37 insertions, 0 deletions
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index c7f5ac797e7..7fe3d0d0a0e 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -3275,6 +3275,40 @@ validate_and_tokenise_sh_incl(struct gl_context *ctx,
return true;
}
+const char *
+_mesa_lookup_shader_include(struct gl_context *ctx, char *path)
+{
+ void *mem_ctx = ralloc_context(NULL);
+ struct sh_incl_path_entry *path_list;
+
+ if (!validate_and_tokenise_sh_incl(ctx, mem_ctx, &path_list, path)) {
+ ralloc_free(mem_ctx);
+ return NULL;
+ }
+
+ struct sh_incl_path_ht_entry *sh_incl_ht_entry = NULL;
+ struct hash_table *path_ht =
+ ctx->Shared->ShaderIncludes->shader_include_tree;
+
+ struct sh_incl_path_entry *entry;
+ foreach(entry, path_list) {
+ struct hash_entry *ht_entry =
+ _mesa_hash_table_search(path_ht, entry->path);
+
+ if (!ht_entry) {
+ return NULL;
+ } else {
+ sh_incl_ht_entry = (struct sh_incl_path_ht_entry *) ht_entry->data;
+ }
+
+ path_ht = sh_incl_ht_entry->path;
+ }
+
+ ralloc_free(mem_ctx);
+
+ return sh_incl_ht_entry ? sh_incl_ht_entry->shader_source : NULL;
+}
+
GLvoid GLAPIENTRY
_mesa_NamedStringARB(GLenum type, GLint namelen, const GLchar *name,
GLint stringlen, const GLchar *string)
diff --git a/src/mesa/main/shaderapi.h b/src/mesa/main/shaderapi.h
index 8a9d94e1c1f..05048672089 100644
--- a/src/mesa/main/shaderapi.h
+++ b/src/mesa/main/shaderapi.h
@@ -415,6 +415,9 @@ _mesa_init_shader_includes(struct gl_shared_state *shared);
void
_mesa_destroy_shader_includes(struct gl_shared_state *shared);
+const char *
+_mesa_lookup_shader_include(struct gl_context *ctx, char *path);
+
#ifdef __cplusplus
}
#endif