forked from enlightenment/efl
parent
42a59387a6
commit
ae3f83a212
|
@ -1006,6 +1006,9 @@ build_pipe_render="no"
|
||||||
# build_pipe_render="no"
|
# build_pipe_render="no"
|
||||||
#fi
|
#fi
|
||||||
|
|
||||||
|
AC_DEFINE(BUILD_PIPE_RENDER, 1, [Build pipe render support])
|
||||||
|
build_pipe_render="yes"
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
## CPU architecture specific assembly
|
## CPU architecture specific assembly
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ typedef struct _Thinfo
|
||||||
RGBA_Image *im;
|
RGBA_Image *im;
|
||||||
int thread_num;
|
int thread_num;
|
||||||
pthread_t thread_id;
|
pthread_t thread_id;
|
||||||
pthread_barrier_t *barrier;
|
Eina_Barrier *barrier;
|
||||||
const Eina_Inlist *tasks;
|
const Eina_Inlist *tasks;
|
||||||
Eina_Array cutout_trash;
|
Eina_Array cutout_trash;
|
||||||
Eina_Array rects_task;
|
Eina_Array rects_task;
|
||||||
|
@ -88,7 +88,7 @@ evas_common_pipe_thread(void *data)
|
||||||
|
|
||||||
/* wait for start signal */
|
/* wait for start signal */
|
||||||
// INF(" TH %i START...", thinfo->thread_num);
|
// INF(" TH %i START...", thinfo->thread_num);
|
||||||
pthread_barrier_wait(&(thinfo->barrier[0]));
|
eina_barrier_wait(&(thinfo->barrier[0]));
|
||||||
|
|
||||||
EINA_INLIST_FOREACH(thinfo->tasks, info)
|
EINA_INLIST_FOREACH(thinfo->tasks, info)
|
||||||
{
|
{
|
||||||
|
@ -106,7 +106,7 @@ evas_common_pipe_thread(void *data)
|
||||||
|
|
||||||
thinfo->tasks = NULL;
|
thinfo->tasks = NULL;
|
||||||
|
|
||||||
pthread_barrier_wait(&(thinfo->barrier[1]));
|
eina_barrier_wait(&(thinfo->barrier[1]));
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -114,13 +114,13 @@ evas_common_pipe_thread(void *data)
|
||||||
static Eina_List *im_task = NULL;
|
static Eina_List *im_task = NULL;
|
||||||
static Eina_List *text_task = NULL;
|
static Eina_List *text_task = NULL;
|
||||||
static Thinfo task_thinfo[TH_MAX];
|
static Thinfo task_thinfo[TH_MAX];
|
||||||
static pthread_barrier_t task_thbarrier[2];
|
static Eina_Barrier task_thbarrier[2];
|
||||||
static LK(im_task_mutex);
|
static LK(im_task_mutex);
|
||||||
static LK(text_task_mutex);
|
static LK(text_task_mutex);
|
||||||
|
|
||||||
static int thread_num = 0;
|
static int thread_num = 0;
|
||||||
static Thinfo thinfo[TH_MAX];
|
static Thinfo thinfo[TH_MAX];
|
||||||
static pthread_barrier_t thbarrier[2];
|
static Eina_Barrier thbarrier[2];
|
||||||
|
|
||||||
static RGBA_Pipe_Thread_Info *buf = NULL;
|
static RGBA_Pipe_Thread_Info *buf = NULL;
|
||||||
static unsigned int buf_size = 0;
|
static unsigned int buf_size = 0;
|
||||||
|
@ -212,7 +212,7 @@ evas_common_pipe_begin(RGBA_Image *im)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tell worker threads to start */
|
/* tell worker threads to start */
|
||||||
pthread_barrier_wait(&(thbarrier[0]));
|
eina_barrier_wait(&(thbarrier[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -222,7 +222,7 @@ evas_common_pipe_flush(RGBA_Image *im)
|
||||||
if (thread_num > 1)
|
if (thread_num > 1)
|
||||||
{
|
{
|
||||||
/* sync worker threads */
|
/* sync worker threads */
|
||||||
pthread_barrier_wait(&(thbarrier[1]));
|
eina_barrier_wait(&(thbarrier[1]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -614,16 +614,14 @@ evas_common_pipe_map_draw_do(RGBA_Image *dst, const RGBA_Pipe_Op *op, const RGBA
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
evas_common_pipe_map_draw_prepare(void *data, RGBA_Image *dst, RGBA_Pipe_Op *op)
|
evas_common_pipe_map_draw_prepare(void *data __UNUSED__, RGBA_Image *dst, RGBA_Pipe_Op *op)
|
||||||
{
|
{
|
||||||
RGBA_Draw_Context context;
|
RGBA_Draw_Context context;
|
||||||
Thinfo *info = data;
|
|
||||||
Eina_Bool r;
|
Eina_Bool r;
|
||||||
|
|
||||||
memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context));
|
memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context));
|
||||||
r = evas_common_map_rgba_prepare(op->op.map.src, dst,
|
r = evas_common_map_rgba_prepare(op->op.map.src, dst,
|
||||||
&context, op->op.map.m);
|
&context, op->op.map.m);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,7 +632,6 @@ evas_common_pipe_map_draw(RGBA_Image *src, RGBA_Image *dst,
|
||||||
{
|
{
|
||||||
RGBA_Pipe_Op *op;
|
RGBA_Pipe_Op *op;
|
||||||
/* RGBA_Map_Point *pts_copy; */
|
/* RGBA_Map_Point *pts_copy; */
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!src) return;
|
if (!src) return;
|
||||||
/* pts_copy = malloc(sizeof (RGBA_Map_Point) * 4); */
|
/* pts_copy = malloc(sizeof (RGBA_Map_Point) * 4); */
|
||||||
|
@ -703,7 +700,7 @@ evas_common_pipe_load(void *data)
|
||||||
Eina_Array_Iterator it;
|
Eina_Array_Iterator it;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
/* wait for start signal */
|
/* wait for start signal */
|
||||||
pthread_barrier_wait(&(tinfo->barrier[0]));
|
eina_barrier_wait(&(tinfo->barrier[0]));
|
||||||
|
|
||||||
while (im_task)
|
while (im_task)
|
||||||
{
|
{
|
||||||
|
@ -752,7 +749,7 @@ evas_common_pipe_load(void *data)
|
||||||
eina_array_clean(&tinfo->rects_task);
|
eina_array_clean(&tinfo->rects_task);
|
||||||
|
|
||||||
/* send finished signal */
|
/* send finished signal */
|
||||||
pthread_barrier_wait(&(tinfo->barrier[1]));
|
eina_barrier_wait(&(tinfo->barrier[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -769,10 +766,10 @@ evas_common_pipe_load_do(RGBA_Image *im)
|
||||||
task_thinfo[i].im = im;
|
task_thinfo[i].im = im;
|
||||||
|
|
||||||
/* Notify worker thread. */
|
/* Notify worker thread. */
|
||||||
pthread_barrier_wait(&(task_thbarrier[0]));
|
eina_barrier_wait(&(task_thbarrier[0]));
|
||||||
|
|
||||||
/* sync worker threads */
|
/* sync worker threads */
|
||||||
pthread_barrier_wait(&(task_thbarrier[1]));
|
eina_barrier_wait(&(task_thbarrier[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -868,8 +865,8 @@ evas_common_pipe_init(void)
|
||||||
LKI(im_task_mutex);
|
LKI(im_task_mutex);
|
||||||
LKI(text_task_mutex);
|
LKI(text_task_mutex);
|
||||||
|
|
||||||
pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1);
|
eina_barrier_new(&(thbarrier[0]), thread_num + 1);
|
||||||
pthread_barrier_init(&(thbarrier[1]), NULL, thread_num + 1);
|
eina_barrier_new(&(thbarrier[1]), thread_num + 1);
|
||||||
for (i = 0; i < thread_num; i++)
|
for (i = 0; i < thread_num; i++)
|
||||||
{
|
{
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
|
@ -892,8 +889,8 @@ evas_common_pipe_init(void)
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_barrier_init(&(task_thbarrier[0]), NULL, thread_num + 1);
|
eina_barrier_new(&(task_thbarrier[0]), thread_num + 1);
|
||||||
pthread_barrier_init(&(task_thbarrier[1]), NULL, thread_num + 1);
|
eina_barrier_new(&(task_thbarrier[1]), thread_num + 1);
|
||||||
for (i = 0; i < thread_num; i++)
|
for (i = 0; i < thread_num; i++)
|
||||||
{
|
{
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
|
|
Loading…
Reference in New Issue