[OpenJDK 2D-Dev] [9] request for review: 8087201: OGL: rendering of lcd text is slow

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Fri Jun 19 10:57:52 UTC 2015


Hi, Andrew.
Can you additionally provide the bench data about aa(before/after the 
fix) vs new lcd lcd?

Probably it well be more obvious if the code in OGLTextRenderer
1007     if (OGLC_IS_CAP_PRESENT(oglc, CAPS_EXT_TEXBARRIER) &&
1008         dstOps->textureTarget == GL_TEXTURE_2D)

Will be moved to the separate method and the check to the possibility of 
fast blit will be clarified instead of:
if (dstTextureID == 0) {

Also your review request contains useful information like 
fast/slow/read-after-write etc. I think this information can be useful 
as a comments in the code.

On 18.06.15 17:39, Andrew Brygin wrote:
> Hello,
>
>  could you please review a fix for 8087201?
>
>  The root of the problem is that we have to supply a content of
>  destination surface to lcd shader to compose the lcd glyph correctly.
>  In order to do this, we have to copy a sub-image from destination
>  buffer to an intermediate texture using glCopyTexSubImage2D() routine.
>  Unfortunately, this routine is quite slow on majority of systems, and it
>  dramatically reduces the overall speed of lcd text rendering.
>
>  The main idea of the fix is to use a texture associated with the 
> destination
>  surface if it exists. In this case we have a chance to completely 
> abandon the
>  data copying. However, we have to avoid read-after-write in order to get
>  correct results in this case. Fortunately, it can be achieved by 
> using the
>  GL_NV_texture_barrier extension:
>
> https://www.opengl.org/registry/specs/NV/texture_barrier.txt
>
> Beside this, suggested fix introduces following changes in OGL text 
> renderer:
>
> * Separate accelerated caches for LCD and AA glyphs
>    We have a single cache which is initialized ether for LCD or for AA 
> glyphs.
>    If application mixes these types of font smoothing from some 
> reasons, we
>    have got a significant performance degradation.
>    For example, if we use J2DBench in GUI mode, then swing GUI 
> initializes the
>    accelerated cache for AA,  and subsequent rendering of LCD text always
>    uses 'no-cache' code path.
>
> * Increase dimension of the glyph cache cell from 16x16 to 32x32.
>    This change gives significant performance boost on systems with retina
>   (because of average size of rendered glyphs).
>    However, on systems where the fast path with destination texture is 
> not
>    possible for any reasons, this change may cause a performance 
> degradation
>    because of more extenceive usage of glCopyTexSubImage2D.
>   So, we probably may want to get a means to configure the cell dimension
>   depending on system capabilities.
>
> Performance results overview:
> * MBP with Intel Iris (retina, texture barrier is available):
>   http://cr.openjdk.java.net/~bae/8087201/9/mbp-intel-iris.txt
>
> * iMac with AMD HD6750M (no retina, texture barrier is available):
>   http://cr.openjdk.java.net/~bae/8087201/9/imac-amd-hd6750m.txt
>
> * MBP with OSX10.8, NV GF9600M (no retina, no texture barrier):
>   http://cr.openjdk.java.net/~bae/8087201/9/mbp-10.8-NVGF9600M.txt
>
> Please take a look.
>
> Thanks,
> Andrew


-- 
Best regards, Sergey.




More information about the 2d-dev mailing list