Enlightenment CVS committal
Author : doursse
Project : e17
Module : libs/evas
Dir : e17/libs/evas/src/modules/engines/software_xcb
Modified Files:
Evas_Engine_Software_Xcb.h evas_engine.c evas_engine.h
evas_outbuf.c evas_xcb_buffer.c
Log Message:
update software xcb engine to use the latest cache system
===================================================================
RCS file:
/cvs/e/e17/libs/evas/src/modules/engines/software_xcb/Evas_Engine_Software_Xcb.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- Evas_Engine_Software_Xcb.h 9 Mar 2008 13:21:15 -0000 1.7
+++ Evas_Engine_Software_Xcb.h 7 Jul 2008 19:22:20 -0000 1.8
@@ -32,9 +32,9 @@
} info;
/* engine specific function calls to query stuff about the destination */
struct {
- xcb_visualtype_t * (*best_visual_get) (xcb_connection_t *conn, int
screen);
- xcb_colormap_t (*best_colormap_get) (xcb_connection_t *conn, int
screen);
- int (*best_depth_get) (xcb_connection_t *conn, int
screen);
+ xcb_visualtype_t * (*best_visual_get) (xcb_screen_t *screen);
+ xcb_colormap_t (*best_colormap_get) (xcb_screen_t *screen);
+ int (*best_depth_get) (xcb_screen_t *screen);
} func;
int mask_changed;
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/software_xcb/evas_engine.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- evas_engine.c 9 Mar 2008 13:21:15 -0000 1.19
+++ evas_engine.c 7 Jul 2008 19:22:20 -0000 1.20
@@ -21,9 +21,9 @@
/* prototypes we will use here */
static void *_output_setup(int w, int h, int rot, xcb_connection_t *conn,
xcb_screen_t *screen, xcb_drawable_t draw, xcb_visualtype_t *vis,
xcb_colormap_t cmap, int depth, int debug, int grayscale, int max_colors,
xcb_drawable_t mask, int shape_dither, int destination_alpha);
-static xcb_visualtype_t *_best_visual_get(xcb_connection_t *conn, int screen);
-static xcb_colormap_t _best_colormap_get(xcb_connection_t *conn, int screen);
-static int _best_depth_get(xcb_connection_t *conn, int screen);
+static xcb_visualtype_t *_best_visual_get(xcb_screen_t *screen);
+static xcb_colormap_t _best_colormap_get(xcb_screen_t *screen);
+static int _best_depth_get(xcb_screen_t *screen);
static void *eng_info(Evas *e);
static void eng_info_free(Evas *e, void *info);
@@ -120,32 +120,21 @@
}
static xcb_visualtype_t *
-_best_visual_get(xcb_connection_t *conn, int screen)
+_best_visual_get(xcb_screen_t *screen)
{
- xcb_screen_iterator_t iter_screen;
xcb_depth_iterator_t iter_depth;
- xcb_screen_t *scr = NULL;
- if (!conn) return NULL;
+ if (!screen) return NULL;
- iter_screen = xcb_setup_roots_iterator (xcb_get_setup (conn));
- for (; iter_screen.rem; --screen, xcb_screen_next (&iter_screen))
- if (screen == 0)
- {
- scr = iter_screen.data;
- break;
- }
- if (!scr) return NULL;
-
- iter_depth = xcb_screen_allowed_depths_iterator(scr);
+ iter_depth = xcb_screen_allowed_depths_iterator(screen);
for (; iter_depth.rem; xcb_depth_next (&iter_depth))
{
xcb_visualtype_iterator_t iter_vis;
iter_vis = xcb_depth_visuals_iterator(iter_depth.data);
- for (; iter_vis.rem; --screen, xcb_visualtype_next (&iter_vis))
+ for (; iter_vis.rem; xcb_visualtype_next (&iter_vis))
{
- if (scr->root_visual == iter_vis.data->visual_id)
+ if (screen->root_visual == iter_vis.data->visual_id)
return iter_vis.data;
}
}
@@ -154,34 +143,21 @@
}
static xcb_colormap_t
-_best_colormap_get(xcb_connection_t *conn, int screen)
+_best_colormap_get(xcb_screen_t *screen)
{
- xcb_screen_iterator_t iter;
- xcb_colormap_t c = { 0 };
-
- if (!conn) return c;
-
- iter = xcb_setup_roots_iterator (xcb_get_setup (conn));
- for (; iter.rem; --screen, xcb_screen_next (&iter))
- if (screen == 0)
- return iter.data->default_colormap;
+ if (!screen)
+ return 0;
- return c;
+ return screen->default_colormap;
}
static int
-_best_depth_get(xcb_connection_t *conn, int screen)
+_best_depth_get(xcb_screen_t *screen)
{
- xcb_screen_iterator_t iter;
-
- if (!conn) return 0;
-
- iter = xcb_setup_roots_iterator (xcb_get_setup (conn));
- for (; iter.rem; --screen, xcb_screen_next (&iter))
- if (screen == 0)
- return iter.data->root_depth;
+ if (!screen)
+ return 0;
- return 0;
+ return screen->root_depth;
}
/* engine api this module provides */
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/software_xcb/evas_engine.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- evas_engine.h 9 Mar 2008 13:21:15 -0000 1.9
+++ evas_engine.h 7 Jul 2008 19:22:20 -0000 1.10
@@ -64,14 +64,18 @@
unsigned char mask_dither : 1;
unsigned char destination_alpha : 1;
unsigned char debug : 1;
- unsigned char synced : 1;
+ unsigned char synced : 1;
} priv;
};
struct _Outbuf_Region
{
- Xcb_Output_Buffer *xcbob, *mxcbob;
- int x, y, w, h;
+ Xcb_Output_Buffer *xcbob;
+ Xcb_Output_Buffer *mxcbob;
+ int x;
+ int y;
+ int w;
+ int h;
};
struct _Xcb_Output_Buffer
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/software_xcb/evas_outbuf.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- evas_outbuf.c 3 Jun 2008 09:09:38 -0000 1.21
+++ evas_outbuf.c 7 Jul 2008 19:22:20 -0000 1.22
@@ -3,7 +3,6 @@
#include "evas_macros.h"
#include <xcb/shm.h>
#include <xcb/xcb_image.h>
-#include <xcb/xcb_atom.h>
#include <pixman.h>
#include <sys/time.h>
#include <sys/utsname.h>
@@ -134,7 +133,7 @@
im = buf->priv.pending_writes->data;
buf->priv.pending_writes =
evas_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
obr = im->extended_info;
- evas_cache_image_drop(im);
+ evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, 0);
if (obr->mxcbob) _unfind_xcbob(obr->mxcbob, 0);
free(obr);
@@ -378,6 +377,7 @@
Outbuf_Region *obr;
int bpl = 0;
int use_shm = 1;
+ int alpha;
if ((buf->onebuf) && (buf->priv.x.shm))
{
@@ -409,7 +409,7 @@
im = buf->priv.onebuf;
for (yy = y; yy < (y + h); yy++)
{
- memset(im->image->data + (im->image->w * yy) + x,
+ memset(im->image.data + (im->cache_entry.w * yy) + x,
0, w * sizeof(DATA32));
}
}
@@ -425,24 +425,24 @@
*cw = w;
*ch = h;
+ alpha = ((buf->priv.x.mask) || (buf->priv.destination_alpha));
+
use_shm = buf->priv.x.shm;
if ((buf->rot == 0) &&
(buf->priv.mask.r == 0xff0000) &&
(buf->priv.mask.g == 0x00ff00) &&
(buf->priv.mask.b == 0x0000ff))
{
- im = evas_cache_image_empty(evas_common_image_cache_get());
- im->image->w = buf->w;
- im->image->h = buf->h;
- im->image->data = NULL;
- im->image->no_free = 1;
- im->extended_info = obr;
obr->xcbob =
evas_software_xcb_x_output_buffer_new(buf->priv.x.conn,
buf->priv.x.depth,
buf->w, buf->h,
use_shm,
NULL);
- im->image->data = (DATA32 *)
evas_software_xcb_x_output_buffer_data(obr->xcbob, &bpl);
+ im = (RGBA_Image *)
evas_cache_image_data(evas_common_image_cache_get(),
+ buf->w, buf->h,
+ (DATA32 *)
evas_software_xcb_x_output_buffer_data(obr->xcbob, &bpl),
+ alpha,
EVAS_COLORSPACE_ARGB8888);
+ im->extended_info = obr;
if (buf->priv.x.mask)
obr->mxcbob =
evas_software_xcb_x_output_buffer_new(buf->priv.x.conn,
1,
@@ -452,10 +452,9 @@
}
else
{
- im = evas_cache_image_empty(evas_common_image_cache_get());
- im->image->w = buf->w;
- im->image->h = buf->h;
- evas_common_image_surface_alloc(im->image);
+ im = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
+ im->cache_entry.flags.alpha |= alpha ? 1 : 0;
+ evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
im->extended_info = obr;
if ((buf->rot == 0) || (buf->rot == 180))
obr->xcbob =
evas_software_xcb_x_output_buffer_new(buf->priv.x.conn,
@@ -475,12 +474,10 @@
use_shm,
NULL);
}
- if ((buf->priv.x.mask) || (buf->priv.destination_alpha))
- {
- im->cache_entry.flags.alpha = 1;
- /* FIXME: faster memset! */
- memset(im->image->data, 0, w * h * sizeof(DATA32));
- }
+ if (alpha)
+ /* FIXME: faster memset! */
+ memset(im->image.data, 0, w * h * sizeof(DATA32));
+
buf->priv.onebuf = im;
return im;
}
@@ -503,24 +500,23 @@
// use_shm = 0; /* 630 -> 1006 fps */
// if ((w * h) < (200 * 200)) use_shm = 0; /* 630 -> 962 fps */
+ alpha = ((buf->priv.x.mask) || (buf->priv.destination_alpha));
+
if ((buf->rot == 0) &&
(buf->priv.mask.r == 0xff0000) &&
(buf->priv.mask.g == 0x00ff00) &&
(buf->priv.mask.b == 0x0000ff))
{
- im = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
- if (!im) return NULL;
- im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
- if (!im) return NULL;
-
- im->extended_info = obr;
obr->xcbob = _find_xcbob(buf->priv.x.conn,
buf->priv.x.depth,
w, h,
use_shm,
NULL);
- im->image.no_free = 1;
- im->image.data = (DATA32
*)evas_software_xcb_x_output_buffer_data(obr->xcbob, &bpl);
+ im = (RGBA_Image *)
evas_cache_image_data(evas_common_image_cache_get(),
+ w, h,
+ (DATA32 *)
evas_software_xcb_x_output_buffer_data(obr->xcbob, &bpl),
+ alpha,
EVAS_COLORSPACE_ARGB8888);
+ im->extended_info = obr;
if (buf->priv.x.mask)
obr->mxcbob = _find_xcbob(buf->priv.x.conn,
1, w, h,
@@ -535,8 +531,8 @@
}
else
{
- im = evas_cache_image_empty(evas_common_image_cache_get());
- if (!im) return NULL;
+ im = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
+ im->cache_entry.flags.alpha |= alpha ? 1 : 0;
evas_cache_image_surface_alloc(&im->cache_entry, w, h);
im->extended_info = obr;
if ((buf->rot == 0) || (buf->rot == 180))
@@ -576,11 +572,9 @@
/* NULL); */
}
if ((buf->priv.x.mask) || (buf->priv.destination_alpha))
- {
- im->cache_entry.flags.alpha = 1;
/* FIXME: faster memset! */
- memset(im->image.data, 0, w * h * sizeof(DATA32));
- }
+ memset(im->image.data, 0, w * h * sizeof(DATA32));
+
buf->priv.pending_writes = evas_list_append(buf->priv.pending_writes, im);
return im;
}
@@ -680,7 +674,7 @@
buf->priv.pending_writes =
evas_list_remove_list(buf->priv.pending_writes,
buf->priv.pending_writes);
obr = im->extended_info;
- evas_cache_image_drop(im);
+ evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, 0);
if (obr->mxcbob) _unfind_xcbob(obr->mxcbob, 0);
/* if (obr->xcbob)
evas_software_xcb_x_output_buffer_free(obr->xcbob, 0); */
@@ -703,11 +697,11 @@
if (buf->priv.debug)
evas_software_x11_outbuf_debug_show(buf, buf->priv.x.win,
obr->x, obr->y, obr->w,
obr->h);
- evas_software_x11_x_output_buffer_paste(obr->xob, buf->priv.x.win,
+ evas_software_x11_x_output_buffer_paste(obr->xcbob,
buf->priv.x.win,
buf->priv.x.gc,
obr->x, obr->y, 0);
- if (obr->mxob)
- evas_software_x11_x_output_buffer_paste(obr->mxob,
+ if (obr->mxcbob)
+ evas_software_x11_x_output_buffer_paste(obr->mxcbob,
buf->priv.x.mask,
buf->priv.x.gcm,
obr->x, obr->y, 0);
@@ -721,17 +715,18 @@
RGBA_Image *im;
Outbuf_Region *obr;
- im = buf->priv.pending_writes->data;
+ im = evas_list_data(buf->priv.pending_writes);
buf->priv.pending_writes =
evas_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
obr = im->extended_info;
- evas_cache_image_drop(im);
- if (obr->xob) _unfind_xob(obr->xob, 0);
- if (obr->mxob) _unfind_xob(obr->mxob, 0);
+ evas_cache_image_drop(&im->cache_entry);
+ if (obr->xcbob) _unfind_xcbob(obr->xcbob, 0);
+ if (obr->mxcbob) _unfind_xcbob(obr->mxcbob, 0);
/*
- if (obr->xob) evas_software_x11_x_output_buffer_free(obr->xob, 0);
- if (obr->mxob) evas_software_x11_x_output_buffer_free(obr->mxob,
0);
+ if (obr->xcbob) evas_software_x11_x_output_buffer_free(obr->xcbob,
0);
+ if (obr->mxcbob)
evas_software_x11_x_output_buffer_free(obr->mxcbob, 0);
*/
free(obr);
+ evas_cache_image_drop(&im->cache_entry);
}
#endif
}
@@ -749,10 +744,10 @@
im = buf->priv.onebuf;
buf->priv.onebuf = NULL;
obr = im->extended_info;
- evas_cache_image_drop(im);
if (obr->xcbob) evas_software_xcb_x_output_buffer_free(obr->xcbob, 0);
if (obr->mxcbob) evas_software_xcb_x_output_buffer_free(obr->mxcbob, 0);
free(obr);
+ evas_cache_image_drop(&im->cache_entry);
}
else
{
@@ -768,7 +763,7 @@
evas_list_remove_list(buf->priv.prev_pending_writes,
buf->priv.prev_pending_writes);
obr = im->extended_info;
- evas_cache_image_drop(im);
+ evas_cache_image_drop(&im->cache_entry);
if (obr->xcbob) _unfind_xcbob(obr->xcbob, 0);
if (obr->mxcbob) _unfind_xcbob(obr->mxcbob, 0);
free(obr);
@@ -893,8 +888,9 @@
{
for (yy = 0; yy < obr->h; yy++)
evas_software_xcb_x_write_mask_line(buf, obr->mxcbob,
- src_data +
- (yy * obr->w), obr->w, yy);
+ src_data + (yy * obr->w),
+ obr->w,
+ yy);
#if 1
#else
/* XX async push */
@@ -907,7 +903,7 @@
}
#if 1
#else
- xcb_flush(buf->priv.x.disp);
+ xcb_flush(buf->priv.x.conn);
#endif
}
===================================================================
RCS file:
/cvs/e/e17/libs/evas/src/modules/engines/software_xcb/evas_xcb_buffer.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- evas_xcb_buffer.c 9 Mar 2008 13:21:16 -0000 1.13
+++ evas_xcb_buffer.c 7 Jul 2008 19:22:20 -0000 1.14
@@ -121,6 +121,10 @@
xcbob->connection = c;
xcbob->image = NULL;
xcbob->shm_info = NULL;
+ xcbob->w = w;
+ xcbob->h = h;
+
+ try_shm = 0;
if (try_shm > 0)
{
@@ -149,14 +153,14 @@
/* XErrorHandler ph; */
/* EventHandlers eh; */
- //
free(xcb_get_input_focus_reply(c, xcb_get_input_focus(c), NULL));
+ //
free(xcb_get_input_focus_reply(c, xcb_get_input_focus_unchecked(c), NULL));
_xcb_err = 0;
/* ph = XSetErrorHandler((XErrorHandler) */
/* x_output_tmp_x_err); */
xcb_shm_attach(c,
xcbob->shm_info->shmseg,
xcbob->shm_info->shmid, 0);
- //
free(xcb_get_input_focus_reply(c, xcb_get_input_focus(c), NULL));
+ //
free(xcb_get_input_focus_reply(c, xcb_get_input_focus_unchecked(c), NULL));
/* XSetErrorHandler((XErrorHandler)ph); */
if (!_xcb_err)
{
@@ -179,7 +183,7 @@
if (try_shm > 1) return NULL;
xcbob->image = xcb_image_create_native(c, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
- depth, NULL, 0, data);
+ depth, NULL, ~0, NULL);
if (!xcbob->image)
{
free(xcbob);
@@ -198,6 +202,10 @@
return NULL;
}
}
+
+ xcbob->bpl = xcbob->image->stride;
+ xcbob->psize = xcbob->image->size;
+
return xcbob;
}
@@ -209,7 +217,7 @@
{
if (sync)
free(xcb_get_input_focus_reply(xcbob->connection,
-
xcb_get_input_focus(xcbob->connection),
+
xcb_get_input_focus_unchecked(xcbob->connection),
NULL));
xcb_shm_detach(xcbob->connection, xcbob->shm_info->shmseg);
xcb_image_destroy(xcbob->image);
@@ -243,7 +251,7 @@
0);
if (sync)
free(xcb_get_input_focus_reply(xcbob->connection,
-
xcb_get_input_focus(xcbob->connection),
+
xcb_get_input_focus_unchecked(xcbob->connection),
NULL));
}
else
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs