skia backend and backend selection

Registered by Jesse Barker

* Runtime detection of NEON support
* Add backend that uses GPU (OpenGL ES 2.x) and NEON

Blueprint information

Status:
Complete
Approver:
Jesse Barker
Priority:
High
Drafter:
Jammy Zhou
Direction:
Needs approval
Assignee:
Jammy Zhou
Definition:
Approved
Series goal:
Accepted for 11.05
Implementation:
Implemented
Milestone target:
milestone icon 11.05-final
Started by
Jammy Zhou
Completed by
Jesse Barker

Whiteboard

[jazh Dec 3] simple application developed for arm hwcaps detection: lp:~jammy-zhou/+junk/neon
[jazh Dec 7] develop a simple application to check NEON support of the compiler
[jazh Dec 19] adapt to the new milestones for Graphics WG
[jazh Dec 21] create one bug for the cross compile toolchains in Ubuntu Maverick: https://bugs.launchpad.net/ubuntu/+source/gcc-defaults-armel-cross/+bug/692987
[jazh Dec 22] cross compile chromium browser successfully with fsl 4.4 toolchain
[jazh Dec 23] create one bug for linaro toolchain when compile chromium on ARM: https://bugs.launchpad.net/binutils-linaro/+bug/693686
[jazh Dec 24] two patches for NEON runtime detection in Skia sent out to chromium project for review: http://code.google.com/p/chromium/issues/detail?id=67954
[jazh Feb 28] create a topic in skia forum for patch review and discussion: https://groups.google.com/forum/#!topic/skia-discuss/gw92Z7lrmKw
[jazh March 15] There is benchmark for skia in its own source tree, named "bench". And there is no response from upstream about the patches, which make this blueprint in risk.
[jazh March 30] Re-org the WIs
[jazh March 31] Post the patch to skia reviewboard: http://codereview.appspot.com/4323046
[jazh April 1] Upstream contact: <email address hidden>, and <email address hidden>
[jazh April 5] Report one bug for skia on ARM: http://code.google.com/p/skia/issues/detail?id=201
[jazh April 10] Create skia branch with neon runtime detection in git.linaro.org: http://git.linaro.org/gitweb?p=people/jammy-zhou/skia.git;a=summary

[rajeev Jan 21 2011]
Please add or split work items for milestone 11.03 and 11.04. Also, move work items mentioned towards end of sheet to any of the already existing milestone such as 11.01.

===============

[alf Oct 21 2010]
Skia currently has an experimental gl/gles1.1 backend that is not ready for production and currently unsupported: http://code.google.com/p/skia/source/browse/trunk/src/gl/
See http://markmail.org/message/bnf2nuvtte7kyjht for a short status report by one of the devs.
Furthermore the existing gl code is fixed pipeline oriented (eg gles1.1).

[jazh Oct 22 2010]
Skia has already implemented some neon optimizations for blit and bitmap operations, and the optimization path is enabled by compile flag '__ARM_HAVE_NEON'. For runtime detection of NEON, one possible solution is to do the same as pixman to check "/proc/self/auxv" for arm verison and hardware capability.

(?)

Work Items

Work items for 11.01:
implement the check of NEON support in toolchain: DONE
build chromium browser for ARM platform (native build or cross compile) based on upstream code: DONE
get familiar with the 'gyp' build system of chromium browser: DONE
add NEON runtime detection code in opts_check_arm_neon.cpp: DONE

Work items for 11.02:
extract NEON specific code into separate files: DONE
compile NEON specific files with "-mfpu=neon": DONE
send out the patch to upstream for review: DONE

Work items for 11.03:
find benchmark for evaluating skia performance: DONE

Work items for 11.04:
Review the skia and chromium contribution process: DONE
Add stand-alone build support of Skia on ARM platform: DONE
Adapt original patches to latest skia upstream: DONE
Separate the huge patchset into smaller ones for easy review: DONE
Do benchmark testing: DONE
Send out the patch for review according to the process: DONE
Upstream the patches: BLOCKED

Work items:
download and package upstream Skia to Launchpad: DONE
look into the skia implementation about NEON optimization: DONE
present the proposal of NEON runtime detection to upstream for feedbacks: DONE

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.