JDK-6695820 : D3D: performance degradation for AA primitives on older hardware
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: 6u10
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2008-04-29
  • Updated: 2010-10-14
  • Resolved: 2008-05-13
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6
6u10 b24Fixed
Related Reports
Relates :  
Relates :  
Description
The fix for 6690659 introduced some performance optimizations for
rendering antialised and/or transformed primitives.

On some older hardware this optimization actually results in performance
degradation.

Comments
SUGGESTED FIX http://sa.sfbay.sun.com/projects/java2d_data/6u10/6695820.1
02-05-2008

EVALUATION Another data point: with the fix for 6690659 we have put in a better mechanism for flushing for the Direct3D pipeline. The mechanism is the same we used for the old pre-6u10 pipeline: create a RT surface and lock/unlock it on sync request. This resulted in better flushing behavior: the J2DBench benchmark shows much smaller score variations (< 1%) while the old mechanism sometimes went into double digits. The new flushing mechamism degrades the benchmark scores by around 2-3% though.
30-04-2008

EVALUATION The pixel shader which does antialiasing proves to be too much for older pre-PS3.0 level hardware. Even though it is compiled to target PS2.0a pixel shader profile it seems that it runs completely in software on older boards like FX5600 or Nvidia Quadro NV280. NV280, drawLine: AA graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=ident,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 958.0026809 (var=0.34%) (100.0%) new: 365.6308515 (var=0.4%) (38.17%) -- graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=rot15,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 883.5955056 (var=0.26%) (100.0%) new: 404.6854082 (var=0.47%) (45.8%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=ident,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 599.5514147 (var=6.41%) (100.0%) new: 46.89521345 (var=109.44%) (7.82%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=rot15,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 833.9368005 (var=1.26%) (100.0%) new: 69.48881789 (var=75.58%) (8.33%) NV280, drawLine NO AA: the only improvement is 2x for TX: graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=ident,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 90419.85205 (var=2.11%) (100.0%) new: 87247.61840 (var=3.16%) (96.49%) -- graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 17255.51455 (var=0.6%) (100.0%) new: 40464.60200 (var=0.13%) (234.5%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=ident,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 76994.82098 (var=1.69%) (100.0%) new: 74372.50664 (var=0.13%) (96.59%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 63822.01875 (var=1.15%) (100.0%) new: 61676.05633 (var=0.2%) (96.64%) FX5600, drawLine: AA - losing across the board: graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=ident,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 588.2263134 (var=0.88%) (100.0%) new: 475.1216122 (var=0.77%) (80.77%) -- graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=rot15,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 564.7548690 (var=1.29%) (100.0%) new: 523.8857972 (var=1.24%) (92.76%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=ident,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 415.3290529 (var=0.62%) (100.0%) new: 65.86402266 (var=25.73%) (15.86%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=rot15,graphics.render.opts.antialias=true,graphics.render.opts.paint=single: old: 557.3379579 (var=0.65%) (100.0%) new: 81.57756123 (var=109.07%) (14.64%) FX5600, drawLine: NO AA: 2x improvement for TX: graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=ident,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 42154.74207 (var=17.04%) (100.0%) new: 43618.63665 (var=3.87%) (103.47%) -- graphics.render.tests.drawLine,graphics.opts.sizes=20,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 9276.336499 (var=0.07%) (100.0%) new: 19064.87641 (var=0.27%) (205.52%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=ident,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 305632.56148 (var=0.4%) (100.0%) new: 303968.88913 (var=0.54%) (99.46%) -- graphics.render.tests.drawLine,graphics.opts.sizes=250,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 118543.53123 (var=0.47%) (100.0%) new: 241079.35076 (var=0.47%) (203.37%) Similar story with drawRect, fillRect: very bad with AA, some improvement (up to 8x) for NO AA with TX: FX5600: graphics.render.tests.fillRect,graphics.opts.sizes=20,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 33762.81271 (var=0.54%) (100.0%) new: 288962.08509 (var=0.33%) (855.86%) -- graphics.render.tests.fillRect,graphics.opts.sizes=250,graphics.opts.transform=rot15,graphics.render.opts.antialias=false,graphics.render.opts.paint=single: old: 636079.10480 (var=1.94%) (100.0%) new: 1271898.62160 (var=0.87%) (199.96%) So it looks like as a short term solution we should only enable the AA shader for PS3.0 level of hardware.
29-04-2008