diff options
author | jutty.lee <jutty.lee@samsung.com> | 2016-11-09 11:05:39 +0900 |
---|---|---|
committer | Haegeun Park <haegeun.park@samsung.com> | 2017-01-11 18:20:35 +0900 |
commit | dc4eaade3dd302d55818d24c4d9dd6238d0bbe14 (patch) | |
tree | 5a35c532fb5be681e5c78599319f03bd820cc019 | |
parent | fef73012cfe59525b9697ca814bc72c4fdb8e803 (diff) | |
download | efl-dc4eaade3dd302d55818d24c4d9dd6238d0bbe14.tar.gz |
evas/gl_common: (GL thread) Add resource_main at evgl_engine for Evas API threading
Add resource_main in EVGL_Engine for invoked thread needed
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_core.c | 10 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_core_private.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c index 8292b5ce42..b5fbfad4ec 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core.c +++ b/src/modules/evas/engines/gl_common/evas_gl_core.c @@ -1513,6 +1513,7 @@ _evgl_direct_renderable(EVGL_Resource *rsc, EVGL_Surface *sfc) if (rsc->id != evgl_engine->main_tid) return 0; if (!sfc->direct_fb_opt) return 0; if (!rsc->direct.enabled) return 0; + if (evas_gl_thread_enabled()) return 0; return 1; } @@ -1535,6 +1536,9 @@ _evgl_tls_resource_get(void) if (evgl_engine->resource_key) rsc = eina_tls_get(evgl_engine->resource_key); + if (rsc == NULL && eina_thread_self() == evas_gl_thread_get(EVAS_GL_THREAD_TYPE_EVGL)) + rsc = evgl_engine->resource_main; + return rsc; } @@ -1577,6 +1581,9 @@ _evgl_tls_resource_create(void *eng_data) return NULL; } + if (eina_thread_self() == evgl_engine->main_tid) + evgl_engine->resource_main = rsc; + // Set the resource in TLS if (eina_tls_set(evgl_engine->resource_key, (void*)rsc) == EINA_TRUE) { @@ -1629,6 +1636,9 @@ _evgl_tls_resource_destroy(void *eng_data) EINA_LIST_FOREACH(evgl_engine->resource_list, l, rsc) { _internal_resources_destroy(eng_data, rsc); + + if (rsc == evgl_engine->resource_main) + evgl_engine->resource_main = NULL; } eina_list_free(evgl_engine->resource_list); evgl_engine->resource_list = NULL; diff --git a/src/modules/evas/engines/gl_common/evas_gl_core_private.h b/src/modules/evas/engines/gl_common/evas_gl_core_private.h index 71deebe4c4..3b7540f67d 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core_private.h +++ b/src/modules/evas/engines/gl_common/evas_gl_core_private.h @@ -323,6 +323,7 @@ struct _EVGL_Engine Eina_TLS resource_key; Eina_List *resource_list; Eina_Thread main_tid; + EVGL_Resource *resource_main; // Add more debug logs (DBG levels 4 and 6) int api_debug_mode; |