[OpenJDK 2D-Dev] XRender pipeline - request for first review
linuxhippy at gmail.com
Thu Aug 20 03:18:32 PDT 2009
I've just put together a webref of the xrender pipeline-rewrite for a first
Please ignore the content of the xrender-repo, I finally gave up on using hg
for this task.
Please take a look at the webref located at:
Many things are not as mature/clean as I wished they would be, and some
areas are just plain ugly ;) ... but I guess waiting any longer would just
increase the risk of missing JDK7.
The webref contains two small "fixes" required to make the JDK build on
Fedora-Rawhide, please ignore them for now.
The "pure-java" backend is for now experimental only and disabled by
default, as it is not well tested and requires some enhancements.
PS: below you find some kind of status-document with questions inside. would
be great if somebody could take a look at the open questions.
1. CopyArea GC leak. It seems XRSurfaceDara.flush() is only called for
Pixmaps, even when overrriden in XRSurfaceData, is there any way to get a
notification when a window is disposed?
2. Sometimes I get bad XID errors for different operations.
3. How can that happen? Only loops for X11 destination surfaces have been
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
sun.awt.image.BufImgSurfaceData cannot be cast to
4. X11 automatic flush does not work (see e.g. Java2Demo, without
antialiasing, high delay).
Commands are flushed only when events occur or the output-buffer is full.
5. How does the SW->Surface blit behave, if tmp>source? (interpolation
Possible solution: Simply set up source-rectangle, this will emulate surface
- D3D pipeline needs adjustments to the new GlyphInfo structure (managed=1)
- Proprietary glyph scaler needs to initialize managed-field at GlyphInfo
- Implement tracing support (java2d.trace=log/count)
- Improve blit-mask handling to save fillrate (use scaling without modifying
the mask contents if possible)
- Implement linear gradients using a 1xY temporary pixmap.
- XPutImage+Composite used for MaskFill is slow, especially on intel
- Rendering artifacts for TransformedBlits intel
- Uploading multiple glyphs at once crashes the XServer
*Open Questions: *
- How does pipeline initialization interier with font stuff?
Why does it need static initialization instead of how it is done for now?
(mark knows more about that, fixed it recently),
- How to install an appropriate ColorModel and use it, instead of
bit-twiddling with the pixel value we get?
- Is there a reliable way of detecting if a glpyh is LCD or grayscale? For
zero-width glyphs rowBytes==width doesn't do the trick.
For now, I upload a zero-width glyph as lcd, if GlyphList contains other lcd
Would streamline the code in some cases a bit.
- How does the pipeline behave on bgBlits? Does it fallback to sw loops, or
simply emulate the behaviour with a two-step operation.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the 2d-dev