diff options
author | Lukasz Kostyra <l.kostyra@samsung.com> | 2020-12-22 17:14:55 +0100 |
---|---|---|
committer | Lukasz Kostyra <l.kostyra@samsung.com> | 2021-01-07 17:40:54 +0100 |
commit | 70c95ad948c02f12572adae3c020dcb656beb365 (patch) | |
tree | e577092de0ba11bd29306fab638552ebf199653d | |
parent | aef0e34edd8e4a5fe49eb53153b9c2cdf2c8e8e6 (diff) | |
download | emulator-yagl-70c95ad948c02f12572adae3c020dcb656beb365.tar.gz emulator-yagl-70c95ad948c02f12572adae3c020dcb656beb365.tar.bz2 emulator-yagl-70c95ad948c02f12572adae3c020dcb656beb365.zip |
Keep shader state cached for further analysis
Change-Id: I55dac1c67109bb867af39079def0bcb827b925ff
-rw-r--r-- | GLESv2/yagl_gles2_calls.c | 12 | ||||
-rw-r--r-- | GLESv2/yagl_gles2_shader.c | 2 | ||||
-rw-r--r-- | GLESv2/yagl_gles2_shader.h | 3 |
3 files changed, 10 insertions, 7 deletions
diff --git a/GLESv2/yagl_gles2_calls.c b/GLESv2/yagl_gles2_calls.c index 75a4e13..1f3576c 100644 --- a/GLESv2/yagl_gles2_calls.c +++ b/GLESv2/yagl_gles2_calls.c @@ -1406,7 +1406,6 @@ YAGL_API void glShaderSource(GLuint shader, GLsizei count, const GLchar * const if (have_strings) { uint8_t *tmp_buff; - struct yagl_glsl_state glsl_state; int ret; int patched_len = 0; char *patched_source; @@ -1428,16 +1427,16 @@ YAGL_API void glShaderSource(GLuint shader, GLsizei count, const GLchar * const YAGL_LOG_TRACE("orig source = %s", tmp_buff); - yagl_glsl_state_init(&glsl_state, + yagl_glsl_state_init(&shader_obj->state, shader_obj->type, (char*)tmp_buff, total_length, (ctx->base.base.client_api == yagl_client_api_gles3)); - ret = yagl_glsl_parse(&glsl_state); + ret = yagl_glsl_parse(&shader_obj->state); - if ((ret == 0) && !glsl_state.have_error) { - patched_source = yagl_glsl_state_get_output(&glsl_state, + if ((ret == 0) && !shader_obj->state.have_error) { + patched_source = yagl_glsl_state_get_output(&shader_obj->state, &patched_len); YAGL_LOG_TRACE("patched source = %s", patched_source); @@ -1452,13 +1451,12 @@ YAGL_API void glShaderSource(GLuint shader, GLsizei count, const GLchar * const /* * Unable to parse source, pass as-is. */ + YAGL_LOG_TRACE("unable to patch shader source, passed as-is"); yagl_gles2_shader_source(shader_obj, (GLchar*)tmp_buff, (GLchar*)tmp_buff, total_length); } - - yagl_glsl_state_cleanup(&glsl_state); } out: diff --git a/GLESv2/yagl_gles2_shader.c b/GLESv2/yagl_gles2_shader.c index 1ab6bbd..19f5548 100644 --- a/GLESv2/yagl_gles2_shader.c +++ b/GLESv2/yagl_gles2_shader.c @@ -45,6 +45,8 @@ static void yagl_gles2_shader_destroy(struct yagl_ref *ref) yagl_host_glDeleteObjects(&shader->global_name, 1); + yagl_glsl_state_cleanup(&shader->state); + yagl_object_cleanup(&shader->base); yagl_free(shader); diff --git a/GLESv2/yagl_gles2_shader.h b/GLESv2/yagl_gles2_shader.h index 2c50be5..6cfe8b1 100644 --- a/GLESv2/yagl_gles2_shader.h +++ b/GLESv2/yagl_gles2_shader.h @@ -36,6 +36,7 @@ #include "yagl_types.h" #include "yagl_object.h" +#include "yagl_glsl_state.h" /* * Programs and shaders share the same namespace, @@ -61,6 +62,8 @@ struct yagl_gles2_shader GLenum type; GLchar *source; + + struct yagl_glsl_state state; // for late analysis at draw calls }; struct yagl_gles2_shader *yagl_gles2_shader_create(GLenum type); |