mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
mesa: add support cursor support for relative path shader includes
This will allow us to continue searching the current path for relative shader includes. From the ARB_shading_language_include spec: "If it is quoted with double quotes in a previously included string, then the first search point will be the tree location where the previously included string had been found." Reviewed-by: Witold Baryluk <witold.baryluk@gmail.com>
This commit is contained in:
parent
db5197cec5
commit
1201d3377e
5 changed files with 55 additions and 1 deletions
|
|
@ -36,6 +36,12 @@ const char *
|
|||
_mesa_lookup_shader_include(struct gl_context *ctx, char *path,
|
||||
bool error_check);
|
||||
|
||||
size_t
|
||||
_mesa_get_shader_include_cursor(struct gl_shared_state *shared);
|
||||
|
||||
void
|
||||
_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cursor);
|
||||
|
||||
static void
|
||||
yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error);
|
||||
|
||||
|
|
@ -344,10 +350,14 @@ control_line_success:
|
|||
}
|
||||
}
|
||||
| HASH_TOKEN INCLUDE NEWLINE {
|
||||
size_t include_cursor = _mesa_get_shader_include_cursor(parser->gl_ctx->Shared);
|
||||
|
||||
/* Remove leading and trailing "" or <> */
|
||||
char *start = strchr($2, '"');
|
||||
if (!start)
|
||||
if (!start) {
|
||||
_mesa_set_shader_include_cursor(parser->gl_ctx->Shared, 0);
|
||||
start = strchr($2, '<');
|
||||
}
|
||||
char *path = strndup(start + 1, strlen(start + 1) - 1);
|
||||
|
||||
const char *shader =
|
||||
|
|
@ -410,6 +420,8 @@ control_line_success:
|
|||
glcpp_lex_destroy(tmp_parser->scanner);
|
||||
_mesa_hash_table_destroy(tmp_parser->defines, NULL);
|
||||
}
|
||||
|
||||
_mesa_set_shader_include_cursor(parser->gl_ctx->Shared, include_cursor);
|
||||
}
|
||||
| HASH_TOKEN IF pp_tokens NEWLINE {
|
||||
/* Be careful to only evaluate the 'if' expression if
|
||||
|
|
|
|||
|
|
@ -39,3 +39,19 @@ _mesa_lookup_shader_include(struct gl_context *ctx, char *path,
|
|||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t
|
||||
_mesa_get_shader_include_cursor(struct gl_shared_state *shared)
|
||||
{
|
||||
(void) shared;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_set_shader_include_cursor(struct gl_shared_state *shared,
|
||||
size_t cursor)
|
||||
{
|
||||
(void) shared;
|
||||
(void) cursor;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,4 +37,11 @@ const char *
|
|||
_mesa_lookup_shader_include(struct gl_context *ctx, char *path,
|
||||
bool error_check);
|
||||
|
||||
size_t
|
||||
_mesa_get_shader_include_cursor(struct gl_shared_state *shared);
|
||||
|
||||
void
|
||||
_mesa_set_shader_include_cursor(struct gl_shared_state *shared,
|
||||
size_t cursor);
|
||||
|
||||
#endif /* PP_STANDALONE_SCAFFOLDING_H */
|
||||
|
|
|
|||
|
|
@ -3162,6 +3162,7 @@ struct shader_includes {
|
|||
/* Array to hold include paths given to glCompileShaderIncludeARB() */
|
||||
struct sh_incl_path_entry **include_paths;
|
||||
size_t num_include_paths;
|
||||
size_t relative_path_cursor;
|
||||
|
||||
/* Root hash table holding the shader include tree */
|
||||
struct hash_table *shader_include_tree;
|
||||
|
|
@ -3176,6 +3177,18 @@ _mesa_init_shader_includes(struct gl_shared_state *shared)
|
|||
_mesa_key_string_equal);
|
||||
}
|
||||
|
||||
size_t
|
||||
_mesa_get_shader_include_cursor(struct gl_shared_state *shared)
|
||||
{
|
||||
return shared->ShaderIncludes->relative_path_cursor;
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cursor)
|
||||
{
|
||||
shared->ShaderIncludes->relative_path_cursor = cursor;
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_shader_include(struct hash_entry *entry)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -412,6 +412,12 @@ _mesa_dump_shader_source(const gl_shader_stage stage, const char *source);
|
|||
void
|
||||
_mesa_init_shader_includes(struct gl_shared_state *shared);
|
||||
|
||||
size_t
|
||||
_mesa_get_shader_include_cursor(struct gl_shared_state *shared);
|
||||
|
||||
void
|
||||
_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cusor);
|
||||
|
||||
void
|
||||
_mesa_destroy_shader_includes(struct gl_shared_state *shared);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue