From 0ec2a33a22ad47780f1c98dd950d766264feb902 Mon Sep 17 00:00:00 2001 From: Alexander Kerner Date: Wed, 28 Jul 2010 00:16:06 +0000 Subject: [PATCH] From: Alexander Kerner Subject: [E-devel] 8bpp xcb evas engine Hi all, I've implemented the 8bpp grayscale evas engine. It is based on the 16bpp engine. It would be nice if someone could review the code and maybe commit into svn. The patches against evas and ecore are attached. SVN revision: 50560 --- legacy/evas/Makefile.am | 6 ++++ legacy/evas/configure.ac | 31 ++++++++++++++++ legacy/evas/m4/evas_check_engine.m4 | 40 +++++++++++++++++++++ legacy/evas/src/lib/Evas.h | 3 +- legacy/evas/src/lib/Makefile.am | 16 +++++++++ legacy/evas/src/lib/engines/Makefile.am | 6 ++++ legacy/evas/src/lib/file/evas_module.c | 8 +++++ legacy/evas/src/lib/include/Makefile.am | 1 + legacy/evas/src/modules/engines/Makefile.am | 6 ++++ 9 files changed, 116 insertions(+), 1 deletion(-) diff --git a/legacy/evas/Makefile.am b/legacy/evas/Makefile.am index 1e000f4c53..1114352f32 100644 --- a/legacy/evas/Makefile.am +++ b/legacy/evas/Makefile.am @@ -30,6 +30,7 @@ evas-software-buffer.pc \ evas-software-qtopia.pc \ evas-software-x11.pc \ evas-software-16-x11.pc \ +evas-software-8-x11.pc \ evas-xrender-x11.pc \ evas-xrender-xcb.pc \ evas-software-gdi.pc \ @@ -69,6 +70,7 @@ evas-software-buffer.pc.in \ evas-software-qtopia.pc.in \ evas-software-x11.pc.in \ evas-software-16-x11.pc.in \ +evas-software-8-x11.pc.in \ evas-xrender-x11.pc.in \ evas-xrender-xcb.pc.in \ evas-software-gdi.pc.in \ @@ -90,6 +92,10 @@ if BUILD_ENGINE_SOFTWARE_16_X11 pkgconfig_DATA += evas-software-16-x11.pc endif +if BUILD_ENGINE_SOFTWARE_8_X11 +pkgconfig_DATA += evas-software-8-x11.pc +endif + if BUILD_ENGINE_DIRECTFB pkgconfig_DATA += evas-directfb.pc endif diff --git a/legacy/evas/configure.ac b/legacy/evas/configure.ac index f76c784b9b..ce24f37b40 100644 --- a/legacy/evas/configure.ac +++ b/legacy/evas/configure.ac @@ -106,6 +106,7 @@ want_evas_engine_software_sdl="no" want_evas_engine_fb="no" want_evas_engine_directfb="no" want_evas_engine_software_qtopia="no" +want_evas_engine_software_8_x11="no" want_evas_engine_software_16_x11="no" want_evas_engine_software_16_ddraw="no" want_evas_engine_software_16_wince="no" @@ -148,6 +149,7 @@ case "$host_os" in *) want_evas_engine_software_xlib="auto" want_evas_engine_xrender_x11="auto" + want_evas_engine_software_8_x11="auto" want_evas_engine_software_16_x11="auto" ;; esac @@ -521,6 +523,8 @@ EVAS_CHECK_ENGINE([directfb], [${want_evas_engine_directfb}], [no], [DirectFB]) # disable cairo engine for the release #EVAS_CHECK_ENGINE([software-qtopia], [${want_evas_engine_software_qtopia}], [no], [Qtopia]) +EVAS_CHECK_ENGINE([software-8-x11], [${want_evas_engine_software_8_x11}], [yes], [Software X11 8 bits grayscale]) + EVAS_CHECK_ENGINE([software-16-x11], [${want_evas_engine_software_16_x11}], [yes], [Software X11 16 bits]) EVAS_CHECK_ENGINE([software-16-ddraw], [${want_evas_engine_software_16_ddraw}], [no], [Software DirectDraw 16 bits]) @@ -659,6 +663,28 @@ if test "x${have_static_software_16}" = "xyes"; then AC_DEFINE(EVAS_STATIC_BUILD_SOFTWARE_16, [1], [Build software 16 engine as part of libevas]) fi +# if software 8 x11 is enabled - build software_8 (the generic 8bit +# engine). +have_evas_engine_software_8="no" +if test "x$have_evas_engine_software_8_x11" = "xyes" -o "x$have_evas_engine_software_8_x11" = "xstatic"; then + have_evas_engine_software_8="yes" +fi +AM_CONDITIONAL(BUILD_ENGINE_SOFTWARE_8, test "x$have_evas_engine_software_8" = "xyes") + +# if software 8 need to be build as part of libevas.so +have_static_software_8="no" +AC_ARG_ENABLE([static-software-8], + [AC_HELP_STRING([--enable-static-software-8], [Build software 8 engine as part of libevas])], + [have_static_software_8=${enableval}] +) +AC_MSG_CHECKING([Whether to build software 8 engine as part of libevas]) +AC_MSG_RESULT([${have_static_software_8}]) + +AM_CONDITIONAL(EVAS_STATIC_BUILD_SOFTWARE_8, test "x${have_static_software_8}" = "xyes") +if test "x${have_static_software_8}" = "xyes"; then + AC_DEFINE(EVAS_STATIC_BUILD_SOFTWARE_8, [1], [Build software 8 engine as part of libevas]) +fi + ##################################################################### ## Image loaders @@ -1409,6 +1435,7 @@ evas-opengl-sdl.pc evas-quartz.pc evas-software-buffer.pc evas-software-x11.pc +evas-software-8-x11.pc evas-software-16-x11.pc evas-xrender-x11.pc evas-xrender-xcb.pc @@ -1437,6 +1464,7 @@ src/lib/engines/common/evas_op_copy/Makefile src/lib/engines/common/evas_op_mask/Makefile src/lib/engines/common/evas_op_mul/Makefile src/lib/engines/common/evas_op_sub/Makefile +src/lib/engines/common_8/Makefile src/lib/engines/common_16/Makefile src/modules/Makefile src/modules/engines/Makefile @@ -1456,6 +1484,8 @@ src/modules/engines/gl_sdl/Makefile src/modules/engines/quartz/Makefile src/modules/engines/xrender_x11/Makefile src/modules/engines/software_sdl/Makefile +src/modules/engines/software_8/Makefile +src/modules/engines/software_8_x11/Makefile src/modules/engines/software_16/Makefile src/modules/engines/software_16_x11/Makefile src/modules/engines/software_16_ddraw/Makefile @@ -1530,6 +1560,7 @@ fi echo " Software Framebuffer.......: $have_evas_engine_fb" echo " DirectFB...................: $have_evas_engine_directfb" #echo " Software Qtopia............: $have_evas_engine_software_qtopia" +echo " Software 8bit grayscale....: $have_evas_engine_software_8" echo " Software 16bit ............: $have_evas_engine_software_16" echo " Software 16bit X11.........: $have_evas_engine_software_16_x11" echo " Software 16bit Directdraw..: $have_evas_engine_software_16_ddraw" diff --git a/legacy/evas/m4/evas_check_engine.m4 b/legacy/evas/m4/evas_check_engine.m4 index 04549512b0..54ce5d2211 100644 --- a/legacy/evas/m4/evas_check_engine.m4 +++ b/legacy/evas/m4/evas_check_engine.m4 @@ -248,6 +248,8 @@ PKG_CHECK_MODULES([XCB], requirement="xcb xcb-shm xcb-image pixman-1" evas_engine_[]$1[]_cflags="${XCB_CFLAGS}" evas_engine_[]$1[]_libs="${XCB_LIBS}" + ],[ + have_dep="no" ] ) @@ -283,6 +285,8 @@ PKG_CHECK_MODULES([XCBRENDER], requirement="xcb xcb-shm xcb-render xcb-image pixman-1" evas_engine_[]$1[]_cflags="${XCBRENDER_CFLAGS}" evas_engine_[]$1[]_libs="${XCBRENDER_LIBS}" + ],[ + have_dep="no" ] ) @@ -655,6 +659,42 @@ fi ]) +dnl use: EVAS_CHECK_ENGINE_DEP_SOFTWARE_8_X11(engine, simple, want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) + +AC_DEFUN([EVAS_CHECK_ENGINE_DEP_SOFTWARE_8_X11], +[ + +have_dep="no" +evas_engine_[]$1[]_cflags="" +evas_engine_[]$1[]_libs="" + +PKG_CHECK_MODULES([XCB], + [xcb xcb-shm xcb-image >= 0.2.1 pixman-1], + [ + have_dep="yes" + requirement="xcb xcb-shm xcb-image pixman-1" + evas_engine_[]$1[]_cflags="${XCB_CFLAGS}" + evas_engine_[]$1[]_libs="${XCB_LIBS}" + ],[ + have_dep="no" + ] +) + +AC_SUBST([evas_engine_$1_cflags]) +AC_SUBST([evas_engine_$1_libs]) + +if test "x$3" = "xstatic" ; then + requirement_evas="${requirement} ${requirement_evas}" +fi + +if test "x${have_dep}" = "xyes" ; then + m4_default([$4], [:]) +else + m4_default([$5], [:]) +fi + +]) + dnl use: EVAS_CHECK_ENGINE_DEP_SOFTWARE_16_X11(engine, simple, want_static[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) AC_DEFUN([EVAS_CHECK_ENGINE_DEP_SOFTWARE_16_X11], [ diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 06e78b3159..7a5615678c 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -151,7 +151,8 @@ typedef enum _Evas_Colorspace /* these are not currently supported - but planned for the future */ EVAS_COLORSPACE_YCBCR422P601_PL, /**< YCbCr 4:2:2 Planar, ITU.BT-601 specifications. The data poitned to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */ EVAS_COLORSPACE_YCBCR422P709_PL,/**< YCbCr 4:2:2 Planar, ITU.BT-709 specifications. The data poitned to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */ - EVAS_COLORSPACE_RGB565_A5P /**< 16bit rgb565 + Alpha plane at end - 5 bits of the 8 being used per alpha byte */ + EVAS_COLORSPACE_RGB565_A5P, /**< 16bit rgb565 + Alpha plane at end - 5 bits of the 8 being used per alpha byte */ + EVAS_COLORSPACE_GRY8 /**< 8bit grayscale */ } Evas_Colorspace; /**< Colorspaces for pixel data supported by Evas */ /** diff --git a/legacy/evas/src/lib/Makefile.am b/legacy/evas/src/lib/Makefile.am index d80c8b87ef..94b081268e 100644 --- a/legacy/evas/src/lib/Makefile.am +++ b/legacy/evas/src/lib/Makefile.am @@ -67,6 +67,15 @@ SUBDIRS += ../modules/engines/software_16_x11/ EVAS_STATIC_MODULE += ../modules/engines/software_16_x11/libevas_engine_software_16_x11.la EVAS_STATIC_LIBADD += @evas_engine_software_16_x11_libs@ endif +if EVAS_STATIC_BUILD_SOFTWARE_8 +SUBDIRS += ../modules/engines/software_8/ +EVAS_STATIC_MODULE += ../modules/engines/software_8/libevas_engine_software_8.la +endif +if EVAS_STATIC_BUILD_SOFTWARE_8_X11 +SUBDIRS += ../modules/engines/software_8_x11/ +EVAS_STATIC_MODULE += ../modules/engines/software_8_x11/libevas_engine_software_8_x11.la +EVAS_STATIC_LIBADD += @evas_engine_software_8_x11_libs@ +endif if EVAS_STATIC_BUILD_SOFTWARE_SDL SUBDIRS += \ ../modules/engines/software_16_sdl/ \ @@ -220,6 +229,13 @@ libevas_la_DEPENDENCIES += engines/common_16/libevas_engine_common_16.la endif +if BUILD_ENGINE_SOFTWARE_8 + +libevas_la_LIBADD += engines/common_8/libevas_engine_common_8.la +libevas_la_DEPENDENCIES += engines/common_8/libevas_engine_common_8.la + +endif + libevas_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ DIST_SUBDIRS = canvas cache cserve file engines imaging include diff --git a/legacy/evas/src/lib/engines/Makefile.am b/legacy/evas/src/lib/engines/Makefile.am index 9d688758d4..0e7706cfb1 100644 --- a/legacy/evas/src/lib/engines/Makefile.am +++ b/legacy/evas/src/lib/engines/Makefile.am @@ -8,3 +8,9 @@ if BUILD_ENGINE_SOFTWARE_16 SUBDIRS += common_16 endif + +if BUILD_ENGINE_SOFTWARE_8 + +SUBDIRS += common_8 + +endif diff --git a/legacy/evas/src/lib/file/evas_module.c b/legacy/evas/src/lib/file/evas_module.c index 9d8cfbc868..957767a540 100644 --- a/legacy/evas/src/lib/file/evas_module.c +++ b/legacy/evas/src/lib/file/evas_module.c @@ -105,6 +105,8 @@ EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_16_ddraw); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_16_sdl); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_16_wince); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_16_x11); +EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_8); +EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_8_x11); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_ddraw); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_gdi); EVAS_EINA_STATIC_MODULE_DEFINE(engine, software_generic); @@ -176,6 +178,12 @@ static const struct { #ifdef EVAS_STATIC_BUILD_SOFTWARE_16_GDI EVAS_EINA_STATIC_MODULE_USE(engine, software_gdi), #endif +#ifdef EVAS_STATIC_BUILD_SOFTWARE_8 + EVAS_EINA_STATIC_MODULE_USE(engine, software_8), +#endif +#ifdef EVAS_STATIC_BUILD_SOFTWARE_8_X11 + EVAS_EINA_STATIC_MODULE_USE(engine, software_8_x11), +#endif #ifdef EVAS_STATIC_BUILD_SOFTWARE_GENERIC EVAS_EINA_STATIC_MODULE_USE(engine, software_generic), #endif diff --git a/legacy/evas/src/lib/include/Makefile.am b/legacy/evas/src/lib/include/Makefile.am index 1570bf4654..5c986c2280 100644 --- a/legacy/evas/src/lib/include/Makefile.am +++ b/legacy/evas/src/lib/include/Makefile.am @@ -8,5 +8,6 @@ evas_options.h \ evas_macros.h \ evas_mmx.h \ evas_common.h \ +evas_common_soft8.h \ evas_common_soft16.h \ evas_blend_ops.h diff --git a/legacy/evas/src/modules/engines/Makefile.am b/legacy/evas/src/modules/engines/Makefile.am index 1db0e21e05..bdc9ba1f2a 100644 --- a/legacy/evas/src/modules/engines/Makefile.am +++ b/legacy/evas/src/modules/engines/Makefile.am @@ -29,6 +29,12 @@ endif if !EVAS_STATIC_BUILD_QUARTZ SUBDIRS += quartz endif +if !EVAS_STATIC_BUILD_SOFTWARE_8 +SUBDIRS += software_8 +endif +if !EVAS_STATIC_BUILD_SOFTWARE_8_X11 +SUBDIRS += software_8_x11 +endif if !EVAS_STATIC_BUILD_SOFTWARE_16 SUBDIRS += software_16 endif