[OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow (original) (raw)
Sergey Bylokhov Sergey.Bylokhov at oracle.com
Tue Apr 29 19:25:01 UTC 2014
- Previous message: [OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow
- Next message: [OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello, Jim. I have started working with another issue, which touches the same code. https://bugs.openjdk.java.net/browse/JDK-8017626 The problem is clear our surface in opengl contains data in premultiplied mode[1][2], but we have only one surface->sw loop in opengl which is: new OGLSurfaceToSwBlit(SurfaceType.IntArgb, OGLSurfaceData.PF_INT_ARGB);
Note that both parameters are argb. As you remember this blit is implemented via glReadPixels which transfer data without modification. So we are in trouble in case of translucent volatile image, when alpha != 1.0. I see two possible solutions:
- Change the type of the surface->sw blit to _pre and change all related code to fail back to this blit, other draws will be done via intermediate backbuffer.
- Restore the colors during the flip operation for case of argb blit
- create new blit to cover argb_pre(it will have current implementation).
What do you think?
[1] http://mail.openjdk.java.net/pipermail/2d-dev/2013-October/003783.html [2] https://bugs.openjdk.java.net/browse/JDK-8017626
On 4/24/14 3:48 AM, Jim Graham wrote:
The benchmark spreads look much better and the code looks good, but I worry that we are being inconsistent in whether or not we set the SKIP values. This function sets them back to 0 when done, but can we assume that about all code that uses these methods?
...jim On 4/23/14 1:46 PM, Sergey Bylokhov wrote: Hello. Please review an updated version of the fix.
Bugs which were found in the previous version: - Destination vertical offset was ignored(j2dglPixelStorei(GLPACKSKIPROWS, dsty)) now we take it into account using PtrAddBytes(pDst, dsty * dstInfo.scanStride) - srcy wasn't recalculated for the correct direction - In the first version of the fix scanStride was used for iteration over destination memory and as a parameter of memcpy. This is incorrect, because we should flip only a drawable part of destination. Now memcpy uses pixelStride * width Because no one of these problems were not found by the tests a new ones were added. I filed another issue related to the surface->sw blit, opengl and d3d ignore the clip of the destination JDK-8041644 Bug: https://bugs.openjdk.java.net/browse/JDK-8041129 Webrev can be found at: http://cr.openjdk.java.net/~serb/8041129/webrev.03/webrev Benchmarks: to decrease the spread I increased the time per test from 2500 ms to 25 seconds ======================================================================= Windows 7 x64, lenovo T410, nvidia NVS 3100M http://cr.openjdk.java.net/~serb/8041129/webrev.03/J2DBench/results-nvidia-windows.txt
Summary: OGL-base-nvidia-windows: Number of tests: 10 Overall average: 1943.4318817726798 Best spread: 0.36% variance Worst spread: 4.16% variance (Basis for results comparison) OGL-fix2-nvidia-windows: Number of tests: 10 Overall average: 181165.51031119752 Best spread: 0.35% variance Worst spread: 2.57% variance Comparison to basis: Best result: 19142.77% of basis Worst result: 97.75% of basis Number of wins: 8 Number of ties: 2 Number of losses: 0 D3D-base-nvidia-windows: Number of tests: 10 Overall average: 30046.475416066532 Best spread: 0.05% variance Worst spread: 4.56% variance Comparison to basis: Best result: 13660.29% of basis Worst result: 9.34% of basis Number of wins: 6 Number of ties: 1 Number of losses: 3 ======================================================================= OSX 10.8.5, macbook pro retina, nvidia GeForce GT 650M 1024 MB http://cr.openjdk.java.net/~serb/8041129/webrev.03/J2DBench/results-nvidia-osx.txt Summary: OGL-base-nvidia-osx: Number of tests: 10 Overall average: 719.3548194040994 Best spread: 0.1% variance Worst spread: 4.09% variance (Basis for results comparison) OGL-fix2-nvidia-osx: Number of tests: 10 Overall average: 11050.087724732544 Best spread: 0.11% variance Worst spread: 3.54% variance Comparison to basis: Best result: 4713.13% of basis Worst result: 175.51% of basis Number of wins: 10 Number of ties: 0 Number of losses: 0 ======================================================================= OSX 10.8.5, macbook pro retina, Intel HD Graphics 4000 http://cr.openjdk.java.net/~serb/8041129/webrev.03/J2DBench/results-intel-osx.txt Summary: OGL-base-intel-osx: Number of tests: 10 Overall average: 3958.228739879219 Best spread: 0.4% variance Worst spread: 8.09% variance (Basis for results comparison) OGL-fix2-intel-osx: Number of tests: 10 Overall average: 10098.091503211792 Best spread: 0.35% variance Worst spread: 17.97% variance Comparison to basis: Best result: 477.95% of basis Worst result: 105.42% of basis Number of wins: 10 Number of ties: 0 Number of losses: 0 On 21.04.2014 18:52, Andrew Brygin wrote: Hello Sergey, the fast path skips j2dglPixelStorei(GLPACKSKIPROWS, dsty). Could you please clarify why? I think that initial value of dsty (dstInfo.bounds.y1) can be non-zero, and this operation seem to be required... Thanks, Andrew On 4/21/2014 6:17 PM, Sergey Bylokhov wrote: Hello. Please review the fix for jdk 9. This issue initially was found in FX[1], and there is description of this problem. In the fix the flip operation is done using memcpy after the whole image was moved from gpu to cpu.
[1] https://javafx-jira.kenai.com/browse/RT-30035 Bug: https://bugs.openjdk.java.net/browse/JDK-8041129 Webrev can be found at: http://cr.openjdk.java.net/~serb/8041129/webrev.01 Benchmarks: ========================================================== Windows 7 x64, lenovo T410, nvidia NVS 3100M http://cr.openjdk.java.net/~serb/8041129/J2DBench/results base ogl vs base d3d vs fixed ogl Summary: OGL-base-nvidia-windows: Number of tests: 10 Overall average: 2239.9261323744704 Best spread: 1.72% variance Worst spread: 88.61% variance (Basis for results comparison) OGL-fix-nvidia-windows: Number of tests: 10 Overall average: 166667.93024226945 Best spread: 1.23% variance Worst spread: 66.19% variance Comparison to basis: Best result: 13719.74% of basis Worst result: 97.17% of basis Number of wins: 8 Number of ties: 1 Number of losses: 1 D3D-base-nvidia-windows: Number of tests: 10 Overall average: 29755.21747098 Best spread: 0.34% variance Worst spread: 61.12% variance Comparison to basis: Best result: 12068.41% of basis Worst result: 8.05% of basis Number of wins: 6 Number of ties: 0 Number of losses: 4 ========================================================== OSX 10.8.5, macbook pro retina, nvidia GeForce GT 650M 1024 MB http://cr.openjdk.java.net/~serb/8041129/J2DBench-osx/results-nvidia-osx.txt
Summary: OGL-base-nvidia-osx: Number of tests: 10 Overall average: 710.7070782394075 Best spread: 0.73% variance Worst spread: 5.72% variance (Basis for results comparison) OGL-fix-nvidia-osx: Number of tests: 10 Overall average: 11032.674771293528 Best spread: 0.62% variance Worst spread: 8.14% variance Comparison to basis: Best result: 4659.95% of basis Worst result: 169.66% of basis Number of wins: 10 Number of ties: 0 Number of losses: 0 ========================================================== OSX 10.8.5, macbook pro retina, Intel HD Graphics 4000 http://cr.openjdk.java.net/~serb/8041129/J2DBench-osx/results-intel-osx.txt Summary: OGL-base-intel-osx: Number of tests: 10 Overall average: 3993.5366388495613 Best spread: 0.65% variance Worst spread: 20.91% variance (Basis for results comparison) OGL-fix-intel-osx: Number of tests: 10 Overall average: 10197.361705976433 Best spread: 0.72% variance Worst spread: 38.4% variance Comparison to basis: Best result: 491.0% of basis Worst result: 108.61% of basis Number of wins: 10 Number of ties: 0 Number of losses: 0 Thanks to Anton for the initial version of the fix.
-- Best regards, Sergey.
- Previous message: [OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow
- Next message: [OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]