On Mon, 21 Jan 2013 10:51:01 -0600 Jeff Hoogland <jeffhoogl...@linux.com> said:
> Raster had mentioned on IRC last night that compositing had become > non-optional in SVN builds already. What is the reason for this? I > understand compositing is the future - but forcing it on everyone it going > to make E much less usable on legacy hardware - a place where it really > shines. reasons: 1. aesthetics. having to "design" for both compositing and non-compositing is limiting and painful. 2. code simplification - this cuts down mem usage and resource usage where we make non-compositing code paths redundant (never loaded) or even get totally removed. it also makes e and efl's code MUCH easier to maintain as we cut out a whole class of pain. 3. if you do non-compositing, then your other option is avoid anything that isnt a pure rectangle.. or use shapes... do u have any idea how inefficient shaped windows are? do you know how they are implemented? compositing is MORE efficient than shaped windows except for the most trivial shape cases. it also has fewer artefacts. don't make me do a rundown on the actual implementation of xshape etc... i have little enough time as-is. take if from someone who started doing x shape stuff back in 1996... 4. wayland - we cant sensibly become a wayland compositor without ALWAYS compositing. 5. compositing only allows us to move content out of windows (eg the container bg window that holds a canvas with wallpaper and your efm icons etc.) and merge it into the COMPOSITOR canvas. this reduces mem footrpint drastically - example. you have a 1600x1200 screen. you have a 1600x1200 walllpaper. e will keep the rgba pixels for that wallpaper inside its memory because it renders them to the bg canvas with software. this bg canvas is a window..that is composited.. this means this window consumes at least 1 pixmap of memory... that means 1600x1200 (8mb) for the original PLUS 8mb for the composited pixmap.. to store essentially the same content PLUS some icons. if we move it into the compositor canvas we get: 1. wallpaper image is rendered and scaled by the same enigne as the compositor (sw or gl). 2. only the original wp image is needed, not an intermediate window pixmap. we save 8mb of memory insnantly. 3. evas already has caches for scaled data and can throw out original data etc. so we also recycle this infra directly. 4. "animated" wallpapers now get faster as they render with gl... as do wallpaper transitions etc. repeat for everything else in e17... it all goes into the compositor canvas EXCEPT "window content" (client windows - be they e's internal dialogs or external apps - to e's compositor these will just be image objects - they currently are, but they also include the frame window sections (borders/titles) provided by e - these will be split out to live in the canvas). 6. if objects move into the comp canvas - like window borders, menus, shelves... we solve the clipping problem. right now borders, shelves, menus etc. get clipped by their window. that's life. once they live in the comp canvas they can extend beyond their object bounds (add glows, shadows, other effects or pixels/imagery extending beyond their bounds). this comes for "free" when moving into evas and out of a window and that is part of the plan - to migrate content all into the compositor canvas. 7. i can go on... (tldr time - you asked "why" so read, or never ask again :)) this has been talked about a lot amongst devs already. it's not possible to do non-compositing AND compositing and move forward. we have little enough developer resources as-is. this simplifies and allows us to have a future. the fact that we BOTHERED to have fast software compositing is a big part of the commitment to make compositing work for EVERYONE - you DONT need a "supported gpu + driver" to use it. yes - it means extra system load, and slowdowns for those avoiding compositing now entirely - but that's the price of progress. we've "lowered" the cost, but it isn't "free". no one is totally LEFT OUT. the software compositor works even in 16bpp (with extra overhead though). and 8bpp .. well ok - sorry 8bpp people. if you can only do 8bpp then we're leaving you behind. sorry. 1995 will be happy to keep you. :( we CAN reduce overhead of software compositing still - it's heavy because we HAVE to copy pixels from x (read data via x(shm)getimage). we can't fix that unless we can get a zero-copy path. x allows us no such path for software (shared pixmaps are not an option fyi). we COULD shortcut this path - but we need to do it at BOTH sides of the pipeline. that means modify toolkits/apps. we CAN modify efl to bypass x entirely for rendering and only use it for focus/input/events and use a back-channel shared memory system to export pixel buffers direct from client to comp. it's doable. we'd cut overhead in half for copies as we... get rid of them (we only have now rendering overehead). *IF* comp also bypasses x's fb management and goes direct to fbdev or kms... and does evil stuff... we can ALSO make "rendered pixel uploads" totally free. ie zero copy buffer swaps. - then the ONLY overhead we have is filling the comp "backbuffer". what you may not be aware of is.. evas ALREADY has this infra. it can already do this little zero-copy buffer swap trick... all the code is there.. it's even been tested with real drivers that do support this - there is even a virtual buffer swap emulation layer to test it if you don't have such a magic driver.... BUT... it requires driver work to make this possible - or bypassing x's fb driver entirely... but we can already do this kind of stuff. we're FAR from maximum optimal level in sw compositing. in fact if we did both of the above for things like scrolling your browser window around we'd basically increase framerate by 3 times compared to now. that's our existing potential upside if we plug all the bits together. we're far from pure ultimate potential, and even being far from it.. we are very usable on low end systems. so without a gpu to accelerate it all and make it all zero-copy... we have a potential upside (for efl apps) of up to 3 TIMES faster (and a minimum of 2 times faster). for non-efl epps up to 2 TIMES faster. though at this point.. we're almost being a wayland style compositor directly, so i'm wondering if we'll ever bother with x stuff to optimize this far and just jump to being wayland from there, as wayland is all about sending buffers around and avoiding copies... efl already lends itself very well to this. it already has the start of a wayland port and a wayland compositor in e17. and as above... we cant move to doing wayland stuff unless we move to being "compositing only". keeping mind "compositing only" does not EXCLUDe optimizations like "zeo copy/composite" you do for things like fullscreen windows (games etc.). if you do this just right you can take the client pixel buffer it sends you (it sends a handle to it - it doesn't COPY it to you) and you just program the gfx chipset to pint the real hw buffer scanout to the client buffer. ALL the compositor is doing is updating where the fb points to... it's doing zero actual compositing/copying/blending work in this case. its turles... err.. zero copy all the way down. so your games are not affected at all. if at any point some menu or dialog appears on top.. it begins compositing again for that frame on until that overlayed window goes away. given smart enough compositing and the right hardware you can EVEN avoid compositing in such simple scenarios.. a lot of hardware supports RGBA OVERLAYS - multiple buffers blended on top of eachother. your hw mouse cursor is exactly such an overlay buffer. "xv video acceleration uses such a wh buffer often too - but its yuv, not rgba... but same principle. a smart compositor can PROGRAM the overlay buffer to point to this "popup menu/dialog" and keep the 2 framebuffers totally separate... zero compositing/copies... until the 3 of windows becomes too complex to point directly at hw buffer layers, then it has to start compositing for real... my point here is... this is the path we MUST go down. we NEED to. wayland is being designed for this.. and they're right. this is how u get zero-tearing smooth screen updates with minimal overhead. it's a fundamental shift in perspective from copying pixels to a single shared framebuffer with clip rects, but it is the reality of most hardware you already have from phones through to set top boxes, tablets, laptops and desktops. you just don't know it. most of these capabilities lie idle and unused because our display system is too "old school" AND because of nay-sayers holding back progress saying "waaaa - i don't want compositing!". reality is that basically anyone who KNOWS graphics, hw and infra all the way down to these nuts and bolts is already in agreement - this is the way to go. we agree because we know what is actually going on behind the scenes. the decision to be compositing only is a big step - but in the right direction. suffice to say, that if you don't "get it" now, in a few years, you will. the penny may drop. maybe for some it won't - you may be the same people who think a green screen vt100 is all u ever need. pixels are useless. color is a waste of memory. reality is... sticking to non-composited displays is as useful as sticking to a vt100 attached to a 192000 baud serial line. :) -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnnow-d2d _______________________________________________ enlightenment-users mailing list enlightenment-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-users