Well I would get to it sooner or later, so here's EFL (Evas, Elementary) on the N900, and yes - an OpenGL-ES2.0 rendering engine is used too for most of the videos. For comparison elementary also is shown with a software rendering engine. It all works. no worse than anything else I'd say and probably better in most ways considering how much is actually being done. Below they are for your enjoyment.
Wednesday, 24 February 2010
Evas OpenGL and OpenGL-ES improvements
Well the world turns and things move on... and that's true of Evas. Not only
did it get 3D - it has had an OpenGL engine for a while. Recently this has
been revamped. It's a full OpenGL AND OpenGL-ES2.0 engine - it does
both with the same codebase (and a few minimal #ifdefs). It's entirely built
around shaders and is very complete. This is in addition to the already very
optimised Evas software engine and the myriad of others. There are already
ports to WebOS on the Palm Pre, and it should all work on any Linux system,
Desktop, Laptop or embedded (ARM, x86 etc. etc.).
(Android excluded as it's not Linux - not Linux as ins the normal usage of
the word meaning Linux plus the whole userspace ecosystem than comes with it).
Not only is the OpenGL engine of Evas able to work, it ALSO supports
texture-from-pixmap - which means... I just added a simple compositor module
to E17 that uses this. It can either composite with software or with OpenGL
and shortcut to zero-copy via texture-from-pixmap. It even all works with
OpenGL-ES2.0. On Desktop it works nicely with NVIDIA drivers, though others
may have mileage that varies, but in my experience most other drivers are not
as complete or stable as NVIDIA's closed ones (even they have a few issues).
So what else is great about this? Well I also found some nice speedups. It's
now at the point where I can run E17 + compositor (OpenGL-ES2.0) on an SoC
at 480x800 AND keep silky smooth framerates with Evas based apps (like
Elementary) while scrolling around AND compositing. I'm seeing composited
framerates beat 100FPS. That is - the app can render at 100FPS.. or more... and
still have its window be composited. I know there are even excess copies in
the pipeline driver-side that are still to be fixed/improved. This baby is on
fire.
Don't forget... this is also all running under X11. There will be some overhead
but not much. It's a myth that X11 makes things slow - it's bad drivers that do
that, and badly written X11 apps or toolkits. So let it be known that Evas has
for many years supported OpenGL as a rendering path, as well as software, but
now also fully supports OpenGL-ES2.0 ,and it's getting love and attention. This
means that you can without any change in your apps, use either software or
OpenGL - or a myriad of other engines, and get the best out of your hardware,
if it has working and stable OpenGL drivers libraries or not.
Here is the performance data for this ARM based SoC - 480x800 screen, 32bpp.
Yes, it has an OpenGL-ES2.0 Hardware core (SGX based). Numbers are in frames
per second.
Test
Software
OpenGL-ES2.0
Widgets File Icons
17.50
19.13 (+9.3%)
Widgets File Icons 2
46.90
66.42 (+41.6%)
Widgets File Icons 3
32.87
17.26 (-47.5%)
Widgets File Icons 4
45.72
86.58 (+89.4%)
Image Blend Unscaled
16.72
49.29 (+194.8%)
Image Blend Solid Middle Unscaled
12.02
27.56 (+129.3%)
Image Blend Fade Unscaled
8.84
30.92 (+249.8%)
Image Blend Fade Power 2 Unscaled
8.84
30.92 (+249.8%)
Image Blend Solid Unscaled
80.31
78.54 (-2.2%)
Image Blend Solid Fade Unscaled
13.52
30.88 (+128.4%)
Image Blend Solid Fade Power 2 Unscaled
13.52
30.94 (+128.8%)
Image Blend Nearest Scaled
6.61
43.50 (+558.1%)
Image Blend Nearest Solid Scaled
69.48
64.72 (-6.9%)
Image Blend Smooth Scaled
1.59
36.71 (+2208.8%)
Image Blend Smooth Solid Scaled
31.15
64.74 (+107.8%)
Image Blend Nearest Same Scaled
34.20
77.97 (+128.0%)
Image Blend Nearest Solid Same Scaled
104.67
87.20 (-16.7%)
Image Blend Smooth Same Scaled
34.01
60.17 (+76.9%)
Image Blend Smooth Solid Same Scaled
121.32
86.62 (-28.6%)
Image Blend Border
2.05
36.00 (+1656.1%)
Image Blend Solid Middle Border
25.16
38.28 (+52.1%)
Image Blend Solid Border
33.04
46.62 (+41.1%)
Image Blend Border Recolor
1.71
18.66 (+991.2%)
Image Map Rotate
4.17
71.79 (+1621.6%)
Image Map Solid Rotate
4.73
121.01 (+2458.4%)
Image Map Nearest Rotate
14.84
82.85 (+458.3%)
Image Map Nearest Solid Rotate
25.13
120.54 (+379.7%)
Image Map Color Rotate
3.75
50.77 (+1253.9%)
Image Map Color Solid Rotate
4.20
119.53 (+2746.0%)
Image Map Color Nearest Rotate
8.16
50.94 (+524.3%)
Image Map Color Nearest Solid Rotate
10.52
120.06 (+1041.3%)
Image Map Color Alpha Rotate
3.67
50.76 (+1283.1%)
Image Map Color Alpha Solid Rotate
3.70
50.75 (+1271.6%)
Image Map Color Alpha Nearest Rotate
7.77
50.89 (+555.0%)
Image Map Color Alpha Nearest Solid Rotate
7.86
50.90 (+547.6%)
Image Map 3D 1
35.07
75.81 (+116.2%)
Image Map 3D 2
21.42
83.48 (+289.7%)
Image Map 3D 3
19.16
62.44 (+225.9%)
Image Map 3D 4
11.04
62.39 (+465.1%)
Image Map 3D 5
37.66
137.53 (+265.2%)
Image Map 3D 6
60.70
177.48 (+192.4%)
Image Map 3D Flow
15.43
23.65 (+53.3%)
Image Quality Scale
23.66
191.34 (+708.7%)
Image Data ARGB
121.94
27.85 (-77.2%)
Image Data ARGB Alpha
33.01
19.57 (-40.7%)
Image Data YCbCr 601 Pointer List
61.12
33.08 (-45.9%)
Image Data YCbCr 601 Pointer List Wide Stride
48.79
53.40 (+9.4%)
Image Crossfade
68.51
135.38 (+97.6%)
Text Basic
62.73
56.12 (-10.5%)
Text Styles
5.10
5.22 (+2.4%)
Text Styles Different Strings
4.06
4.60 (+13.3%)
Text Change
43.11
45.51 (+5.6%)
Textblock Basic
54.10
53.64 (-0.9%)
Textblock Intl
180.16
94.14 (-47.7%)
Rect Blend
8.03
26.90 (+235.0%)
Rect Blend Power 2
8.05
26.93 (+234.5%)
Rect Solid
73.41
79.09 (+7.7%)
Rect Blend Few
689.16
187.13 (-72.8%)
Rect Blend Power 2 Few
663.81
187.10 (-71.8%)
Rect Solid Few
967.81
203.34 (-79.0%)
Image Blend Occlude 1 Few
520.61
155.05 (-70.2%)
Image Blend Occlude 2 Few
178.36
122.45 (-31.3%)
Image Blend Occlude 3 Few
119.99
144.50 (+20.4%)
Image Blend Occlude 1
372.49
60.59 (-83.7%)
Image Blend Occlude 2
89.63
48.63 (-45.7%)
Image Blend Occlude 3
30.46
69.11 (+126.9%)
Image Blend Occlude 1 Many
150.62
23.74 (-84.2%)
Image Blend Occlude 2 Many
36.58
19.72 (-46.1%)
Image Blend Occlude 3 Many
12.25
31.17 (+154.4%)
Image Blend Occlude 1 Very Many
13.86
2.13 (-84.6%)
Image Blend Occlude 2 Very Many
3.54
2.29 (-35.3%)
Image Blend Occlude 3 Very Many
2.02
4.16 (+105.9%)
Polygon Blend
15.70
12.81 (-18.4%)
EVAS SPEED
78.40
66.03 (-15.8%)
Wednesday, 16 December 2009
The Day Democracy Died
So... on Tuesday, the 15th of December, 2009, democracy was killed in
Australia. A democracy exists to represent the desires of the majority
of the people in a nation. Regardless how it is implemented (as a
representative democracy where you vote for someone to represent you), or
some other way, the POINT is to represent the people and their desires. This
no longer is the case. Not by a long shot.
95% of people responding say NO to the filtering, but... go ahead it shall.
I am not going to get into the sideshow of child porn and who controls the
list of filtered sites, and that it's easy enough to get around. It's the
principle of democracy simply failing miserably. We can argue that the people
voting in this poll are a skewed subset of Australians... but that's just
trying to push an agenda anyway - even if it was skewed.. 95% implies its a
majority of people that oppose no matter what.
It is a sad day to be an Australian. It is a sad day for democracy. It is a
sad day for freedom of speech. From this day on there is now an on-line
censorship mechanism that, mark my words, future governments will use to not
"protect the children" but to censor disagreement with their views.
Countries like China do this already. Australia is now following. Good job
Conroy! NOT!
Saturday, 31 October 2009
Evas does 3D
So.. evas now can do "3D" (it's 2.5D - fake-ish 3D, but good enough so you
won't notice in real life). All objects can have a "Map" applies. This is
a mapping of the 2 points that make up the objects corner points and each
point can be assigned an X, Y an Z coordinate, as well as "texture" U and V
coordinates from the original object to be transformed using the map.
This map now works with all objects. Including smart objects. That means Edje
objects too, widgets from Elementary, and more. Of course, here is the
obligatory screenshot:
Some notes. It's not complete yet. It's not efficient. It's horribly
efficient right now as it re-renders any transformed object (except images)
to a temporary surface on any re-draw, then uses that surface for the draw
with the map to the parent surface (yes. it can nest). There is only code for
the software engine right now. I cactually made sure the code there is fast
and wel optimised. It can do both sampled (nearest) and smooth (linear
filtered) rendering. It's very good considering its software. Adding code to
the GL engine will be easy enough, so it's not a focus right now. Software is
and should always be the first to work and work decently.
Also there are some matters of there now being 2 geometries to deal with
(original and now mapped geometry), translating coordinates between mapped
and parent coordinate spaces for events, being able to request smooth or
non-smooth mapping, more utility calls for doing transforms to a map (sofar
rotate and zoom calls are in).
I also want to add color to each point so it can interpolate RGBA values and
use them to "multiply" the texture pixels. This can be used for things like
lighting ans shading etc. This would allow for an apparently "real" 3D
engine. I will cook up a demo or 2 to show this when it's done.
Also I need to have the surfaces be cached to avoid re-renders for mapped
objects, allow hints as to the storage of such surfaces etc. etc. There needs
to be a balance between memory used and speed. I need to only queue redraws
of the right regions when children change, and a few other things.
What this does do though, is open up a path to another long-desired feature
for Evas - filtering. For example - blurring all objects that are in the map.
Now the infrastructure is in place for it.
Monday, 26 October 2009
Enlightenment+EFL on a s3c6410 Device
On the weekend I played a bit with my
SmartQ 5. This is a Chinese
Web Tablet, with a Samsung s3c6410 ARM SoC inside, 128M of ram, 1GB of Flash, a
800x480 4.3" LCD and Wifi. I put Mer on
it (Mer is an Ubuntu 9.04 based distribution for wbe dablets and devices). I
used 0.16 testing 6 on
it for reference. This isn't a bad gadget. It's faster than the Openmoko
GTA02 (Freerunner) by a massive shot. In fact this (with a smaller screen and
a phone) is what the GTA03 should have been (next phone after GTA02), but
thanks to bumbling and the collapse of Openmoko (no fingers will be pointed,
but I know they point away from me), this will never exist.
Interestingly, I compared the memory footprint of Enlightenment (E17) vs
the Mer GUI built with GTK+ and matchbox. Taking away base system footprint,
Enlightenment 0.17 with a wallpaper etc. set up uses about 16M of RAM as a
footprint. Mer's GTK+/Matchbox GUI uses... 43M of RAM. That's a big
difference. I never knew it was so big. Well... that's interesting. (Note
these included xinit and the server footprint, which would be the same for
both, and the base system footprint below these desktops was about 14M)
Anyway, so here comes the content. Here is the new Evas 3D Mapping feature
running on this device
Of course I couldn't resist. I dug out an old 3D engine i wrote years ago
and ran it ther. I fact the 3D code in Evas is based on this algorithm. So it's
an indicator of what you can do with Evas now... if you tried. I'll have to
cook up a good demo some time.
Friday, 2 January 2009
Performance testing of several embedded systems
So I thought I'd do some tests since I got my new
Beagleboard (thanks Thomas!). What is
this? well you can go follow the link - but it's an OMAP3530 based devel board
with pretty much nothing much on it other than the CPU. You need to plug in
serial to get the console - there is no input or screen on it... but it does
have DVI out and a usb OTG port (which so far has been utterly useless to me
as my supposed USB-A to USB-Mini-A doesn't work for OTG :( ). Anyway. This
little CPU (SoC - System on a Chip) is not too shabby. it's not even running
at the 600Mhz rated that the 3530 can do (mind you that's overdrive - but I'd
expect to use that normally as the other power case is 0 clock so while on
and doing things - do them fast, otherwise sleep as much as you can). Also
the RAM could be clocked up much higher (it's at 133Mhz on this board).
So that covers the hardware. Software wise I'm using expedite below. This is
the Software-X11 engine. Output is 16bpp RGB565 (except the Desktop which is
RGB32). The Desktop of course will have multiple threads rendering. It also
gets MMX and SSE assembly. The ARM systems get the plain C routines. So thus
far I have yet to put in any ASM for ARM in the software routines - but I
intend to throw in some preload (pld) calls as well... but... what I really
need to do is put in some NEON (OMAP3'x equivalent of MMX/SSE that actually
doesn't suck). I have NOT done any of this - so the below numbers are RAW
as-is. the PXA270 might have some room for optimising with Wireless MMX. The
s3x2442 I think is pretty much not going to go anywhere as it's ARMv4, so a
lost cause. So take the numbers for the PXA270 as "could be a little better".
From what I have read of the 3530's NEON - it could get a fair bit better if
not 50% or more on the FPS numbers below (yes the numbers are in frames per
second, rendering to a QVGA sized window in all cases).