Basically ecore_gl_drm support two mode. one is gl_drm and unother is gl_tbm.
In gl_tbm evas engine, it use offscreen GL engine(tbm_surface_queue).
To seperate the render engine and present to lcd, we should use tbm base evas_engine.
Change-Id: I4af327a2ed5fd1e350b18685d8df3a2f3b1fae44
/* set env for use tbm_surface_queue*/
setenv("USE_EVAS_SOFTWARE_TBM_ENGINE", "1", 1);
+ //setenv("USE_EVAS_GL_TBM_ENGINE", "1", 1);
/* set gl available if we have ecore_evas support */
- if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_DRM))
+ if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_DRM) ||
+ ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_TBM))
e_comp_gl_set(EINA_TRUE);
/* e_comp_screen new */
Evas_GL_Surface *sfc = NULL;
Evas_GL_Config *cfg = NULL;
Eina_Bool res;
- const char *name;
if (!e_comp_gl_get()) return;
- name = ecore_evas_engine_name_get(e_comp->ee);
- if (!name) return;
- if (strcmp(name, "gl_drm")) return;
-
/* create dummy evas gl to bind wayland display of enlightenment to egl display */
e_main_ts("\tE_Comp_Wl_GL Init");
if (ref->buffer->resource)
{
if (!wl_resource_get_client(ref->buffer->resource)) return;
+
wl_buffer_send_release(ref->buffer->resource);
#ifdef HAVE_WAYLAND_TBM
wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
}
else if (tbm_surf)
{
- tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
- if (!tbm_surf)
- goto err;
-
- if ((ec) && (ec->comp_data->video_client))
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
- buffer->w = buffer->h = 1;
- }
- else
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
- buffer->w = tbm_surface_get_width(tbm_surf);
- buffer->h = tbm_surface_get_height(tbm_surf);
- }
+ tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
+ if (!tbm_surf)
+ goto err;
+
+ if ((ec) && (ec->comp_data->video_client))
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+ buffer->w = buffer->h = 1;
+ }
+ else
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
+ buffer->w = tbm_surface_get_width(tbm_surf);
+ buffer->h = tbm_surface_get_height(tbm_surf);
+ }
}
else if (e_comp->gl)
{
# include <tbm_surface_internal.h>
# include <wayland-tbm-server.h>
# include <Evas_Engine_GL_Drm.h>
+# include <Evas_Engine_GL_Tbm.h>
# include <Evas_Engine_Software_Tbm.h>
# ifndef CLEAR
if (info->info.surface)
tbm_queue = gbm_tbm_get_surface_queue(info->info.surface);
}
+ else if(!strcmp(name, "gl_drm_tbm"))
+ {
+ Evas_Engine_Info_GL_Tbm *info;
+ info = (Evas_Engine_Info_GL_Tbm *)evas_engine_info_get(e_comp->evas);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(info, NULL);
+ tbm_queue = (tbm_surface_queue_h)info->info.tbm_queue;
+ }
else if(!strcmp(name, "drm_tbm"))
{
Evas_Engine_Info_Software_Tbm *info;
einfo->info.hwc_enable = EINA_TRUE;
ecore_evas_manual_render_set(e_comp->ee, 1);
}
+ else if(!strcmp("gl_drm_tbm", name))
+ {
+ ecore_evas_manual_render_set(e_comp->ee, 1);
+ return EINA_TRUE;
+ }
else if(!strcmp("drm_tbm", name))
{
ecore_evas_manual_render_set(e_comp->ee, 1);
# include <tbm_surface_internal.h>
# include <wayland-tbm-server.h>
# include <Evas_Engine_GL_Drm.h>
+# include <Evas_Engine_GL_Tbm.h>
# include <Evas_Engine_Software_Tbm.h>
# include <sys/eventfd.h>
# if HAVE_LIBGOMP
if (info->info.surface)
tbm_queue = gbm_tbm_get_surface_queue(info->info.surface);
}
+ else if(!strcmp(name, "gl_drm_tbm"))
+ {
+ Evas_Engine_Info_GL_Tbm *info;
+ info = (Evas_Engine_Info_GL_Tbm *)evas_engine_info_get(ecore_evas_get(ee));
+ EINA_SAFETY_ON_NULL_RETURN_VAL(info, NULL);
+ tbm_queue = (tbm_surface_queue_h)info->info.tbm_queue;
+ }
else if(!strcmp(name, "drm_tbm"))
{
Evas_Engine_Info_Software_Tbm *info;
renderer->event_hdlr = ecore_main_fd_handler_add(renderer->event_fd, ECORE_FD_READ,
_e_plane_renderer_cb_queue_acquirable_event, NULL, NULL, NULL);
- tqueue = _get_tbm_surface_queue(renderer->ee);
- if (tqueue && !e_plane_renderer_surface_queue_set(renderer, tqueue))
- ERR("fail to e_plane_renderer_queue_set");
-
ecore_evas_geometry_get(renderer->ee, NULL, NULL, &ee_width, &ee_height);
if (renderer->tqueue_width != ee_width || renderer->tqueue_height != ee_height)
ecore_evas_manual_render(renderer->ee);
+
+ tqueue = _get_tbm_surface_queue(renderer->ee);
+ if (tqueue && !e_plane_renderer_surface_queue_set(renderer, tqueue))
+ ERR("fail to e_plane_renderer_queue_set");
}
return renderer;
EINA_SAFETY_ON_NULL_RETURN(renderer);
- ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ec(%p) state(%d) mode_chage_age(%d)",
- NULL, NULL, renderer, renderer->plane, renderer->ec, renderer->state, renderer->mode_change_age);
+ if (renderer->ec)
+ ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ec(%p) state(%d) mode_chage_age(%d)",
+ NULL, NULL, renderer, renderer->plane, renderer->ec, renderer->state, renderer->mode_change_age);
+ else
+ ELOGF("E_PLANE_RENDERER", "Renderer(%p) Plane(%p) ee_engine:%s state(%d) mode_chage_age(%d)",
+ NULL, NULL, renderer, renderer->plane, ecore_evas_engine_name_get(renderer->ee), renderer->state, renderer->mode_change_age);
EINA_LIST_FOREACH(renderer->disp_surfaces, l, tmp_tsurface)
{