<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<body text="#000000" bgcolor="#ffffff">
-------- Original Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Subject: </th>
<td>silverlight 3 features</td>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Date: </th>
<td>Mon, 09 Nov 2009 14:36:58 -0500</td>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">From: </th>
<td>David Reveman <a class="moz-txt-link-rfc2396E" href="mailto:firstname.lastname@example.org"><email@example.com></a></td>
<pre>Been doing some basic background research on the silverlight features we
need to implement for 3.0. I'm currently getting to know the moonlight
code base and will start to implement the features in the order
described below asap..
Basic perspective transformations of 2D objects is all that is supported
by silverlight 3.0. Perspective transformations are not supported by the
cairo API but supported by pixman and xlib backends. Which means we have
to implement it as bitmap transformations by pushing the rendering of a
UIElement into a bitmap and render that bitmap unto its parent with the
perspective transformation. This intermediate compositing step will have
an impact on performance mostly due to the extremely inefficient
implementation of perspective transformation in pixman.
Pixel Shader APIs
* No hardware accelerated in Silverlight 3.0
* .ps effect files
* Allows use of DirectX’s shader dialect called HLSL to create the
Obviously not supported by cairo so it will have to implemented in a
similar way to perspective transformations. We can't really have
anything like this run on the server side when xlib backend is used so
it will have to always run on the client side using local pixman images.
Can eventually be accelerated using an OpenGL output backend.
Cached Composition (GPU support)
* Push rendering of UIElements to cairo surfaces
* Use cached surface instead of rendering child elements
+ Provides GPU acceleration through Xrender
* OpenGL output surface could give better GPU acceleration
Integrates with perspective transformations and pixels shaders. The
amount of acceleration this will provide through Xrender depends much on
the X server driver architecture and such. Can provide significant
acceleration through an OpenGL backend.
Pixel shaders, perspective transformations and bitmap caching can be
implemented in a similar way to how the opacity mask property in the
UIElement class is handled.
I recommend that we use Gallium3D for pixel processing
+ MIT licenced
+ SSE2 optimized software implementation
+ LLVM implementation
+ Can be hardware accelerated if necessary
We need to convert .ps effect files to TGSI
Proposed order of implementation:
1. Bitmap caching
2. Perspective transformations
3. Pixel shaders
4. OpenGL acceleration