JDK-6757527 : D3D: serious rendering issues on Nvidia boards with driver version 178.13 on Vista
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: 6u10,7
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows,windows_vista
  • CPU: x86
  • Submitted: 2008-10-08
  • Updated: 2010-12-08
  • Resolved: 2008-11-07
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 JDK 7
6u11 b03Fixed 7Fixed
Related Reports
Duplicate :  
Duplicate :  
Relates :  
Description
The latest Nvidia driver (178.13) causes significant rendering problems across
multiple adapters on Windows Vista.

Sample configuration:
[I] Description      : NVIDIA GeForce 7600 GT
[I] GDI Name, Driver : \\.\DISPLAY1, nvd3dum.dll
[I] Vendor Id        : 0x10de
[I] Device Id        : 0x02e0
[I] SubSys Id        : 0x22491682
[I] Driver Version   : 7.15.11.7813
[I] GUID             : {D7B71E3E-41A0-11CF-B76B-420202C2CA35}

Comments
SUGGESTED FIX http://sa.sfbay.sun.com/projects/java2d_data/6u11/6757527.1
31-10-2008

EVALUATION The condition that triggers the bug is this: we use a texture for rendering heap-based images into accelerated surfaces. This surface (at tile) is 256x256, so if the image is too large to fit it is tiled. The texture is created with DYNAMIC use flag. This means that we can use DISCARD when locking the contents of the surface, letting the runtime know that we don't care about previous contents of the surface. The current code only locks with the discard flag if the loaded bits fill whole image. This is probably due to misinterpretation of the documentation for DISCARD/DYNAMIC, which says that you could only use DISCARD if you're replacing every single texel in the texture, since the contents of the texture locked with DISCARD are not guaranteed to be the same from lock to another lock. What they meant to say is "every single texel that you care about", so if we only care about and access 10x10 part of 256x256 texture we could still use the DISCARD flag when locking. Anyway, I don't believe our current use is illegal - we don't *have* to use the DISCARD flag with DYNAMIC textures, it's just recommended. The Microsoft reference rasterizer works just fine, and so were nvidia drivers up to the latest update. The work around for this apparent driver bug is to always lock with the DISCARD flag - which is the better performing option anyway. We'll still pursue Nvidia to address this issue or explain what's wrong with our current usage, and why the reference rasterizer doesn't think so.
30-10-2008

WORK AROUND disable the Direct3D pipeline with -Dsun.java2d.d3d=false .
08-10-2008

EVALUATION Working with Nvidia on identifying the cause.
08-10-2008