[OpenJDK 2D-Dev] [9] Review Request: 8041129 [OGL] surface->sw blit is extremely slow
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Wed Apr 23 20:46:53 UTC 2014
Hello.
Please review an updated version of the fix.
Bugs which were found in the previous version:
- Destination vertical offset was
ignored(j2d_glPixelStorei(GL_PACK_SKIP_ROWS, 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 j2d_glPixelStorei(GL_PACK_SKIP_ROWS, 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.
More information about the 2d-dev
mailing list