[OpenJDK 2D-Dev] [11] Upgrade to Marlin renderer 0.9.1
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Tue Mar 6 03:20:00 UTC 2018
Hi, Laurent.
On 05/03/2018 14:19, Laurent Bourgès wrote:
> First Marlin 0.9.1 patch works well: no crash or bug with larger tiles
> 128x64 even if d3d / opengl uses internally 32x32 texture caches.
> Moreover xrender pipeline is the fastest compared to D3D (40% slower) or
> opengl (>250% slower) !
What types of GraphicsPrimitives were tested(in terms of java2d)? I
guess that d3d/ogl may outperform other pipelines only in case of
"native" blits, which are used in case of draw of cashed
bufferedImage(OGL texture) or VolatileImage(FBO) to the window/volatile
image(this also depends from the composite type and alpha).
In other cases it will be slower since it use an additional layer -
RenderQueue, it would be good to compare xrender and gdi/X11.
Some unrelated question: it is interesting how xrender will work in Wayland.
Note 1. OGL is not officially supported on linux. We need to check ogl
performance on macOS where it is used as a default pipeline.
Note 2. there are some other blit's related tiles like:
#define OGLC_BLIT_TILE_SIZE 128
Also please be care about different vendors:
OGLC_VENDOR_INTEL/OGLC_VENDOR_ATI/OGLC_VENDOR_NVIDIA because their
native blits are implemented differently. The reason was in a
performance of some OGL API(maybe this code is outdated).
I suggest to use some common testcases from J2DBench and SwingMark, so
at some point later it will be possible to check other changes for
possible regression, for example see:
https://bugs.openjdk.java.net/browse/JDK-8059944
Note that this fix in some cases decreased a performance by half but in
other cases improved it by 25422.21%. You can see we can improve
performance in one case but lose much more in another. This is why
J2DBench is better because it can check all combinations of
src/dst/composite/clip/size/etc..
> Soory to insist but who could advice me and give me explanations on the
> RenderQueue & d3d / opengl backends.
>
> I read JBS for RenderQueue buffering as I have several questions
> (asynchronous queue ?)
> How to auto-tune such buffer capacity ?
> It seems tricky as too small or too large buffers impacts performance as
> it depends on the GPU speed (drain the buffer).
> Is there any design document ?
As far as I know there are no documents about tile tuning, most of
decisions were made according to j2dbench results. But this code still
uses ogl_2 and d3d_9 so it can be possible that the new versions of
these API have a better alternative.
> PS: I will once again look into java2d pipelines for tile constants (32)
> to see if other parts should be updated (TexturePaint ?)...
> I also need help on testing such patches on many hw platforms to detect
> regressions (j2dBench, MapBench...)
I guess we can run these tests on at least supported configurations.
--
Best regards, Sergey.
More information about the 2d-dev
mailing list