- Loading...
A working prototype of basic feature-set with Java 2D Metal rendering pipeline has been implemented for -
supported all parameters of blit operations
fixed resources leaks, added minor optimizations (in PipelineStateStorage and TexPool)
refactored MTLContext (splited into several classes)
fixed issues connected with changes of pipelineState
added minor optimizations (don’t change state when possible)
Closure of main performance bottleneck task JDK-8228573 after implementing proper back/front buffer drawing under JDK-8233190
JDK-8233233 - Implement Shape Clip (for aliased rendering)
It is available in the lanai repo https://hg.openjdk.java.net/lanai/lanai/
It can be tested with J2DDemo (available at - src/demo/share/jfc/J2Ddemo) that shows working / partially working / not-working Java 2D features with Metal rendering as compared with OpenGL rendering.
VM option -Dsun.java2d.metal=True needs to be passed in to switch rendering pipeline to Metal.
Also, antialiasing needs to be turned off (which is on by default in J2DDemo)
Current focus area is - Rendering performance evaluation :
As basic blocks of rendering have been implemented, it is a good time to check on rendering performance to evaluate how Metal rendering in Java 2D fares as compared to OpenGL rendering in Java 2D. As a first step, we are using below test benchmarkings -
The performance numbers for Java 2D Metal rendering pipeline are not up to the mark as compared to the Java 2D OpenGL rendering pipeline. Multiple design level optimizations are being done to address this.
Current numbers from RenderPerfTest (OGL vs Metal):
Bench | OGL | Metal |
---|---|---|
FlatOval(AA) | 40(16) | 41(5) |
FlatBox(AA) | 91(92) | 93(94) |
Image(AA) | 96(93) | 80(80) |
RotatedBox(AA) | 91(84) | 68(96) |
RotatedOval(AA) | 44(16) | 34(4) |
LinGradRotatedOval | 28 | 33 |
WiredBubbles(AA) | 25(11) | 23(3) |
WiredBox | 87 | 77 |
Lines | 88 | 73 |
FlatQuad(AA) | 53(9) | 52(1) |
WiredQuad(AA) | 42(11) | 43(3) |
TextNoAA | 84 | 29 |
TextLCD | 58 | 25 |
TextGray | 76 | 28 |
31-March-2020
The three main areas of implementation and there status is -
After most of the rendering implementations are done, our goal is to stabilize the build and work towards EA release.