summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjutty.lee <jutty.lee@samsung.com>2016-11-09 11:05:39 +0900
committerHaegeun Park <haegeun.park@samsung.com>2017-01-11 18:20:35 +0900
commitdc4eaade3dd302d55818d24c4d9dd6238d0bbe14 (patch)
tree5a35c532fb5be681e5c78599319f03bd820cc019
parentfef73012cfe59525b9697ca814bc72c4fdb8e803 (diff)
downloadefl-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.c10
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_core_private.h1
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;