United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6757527 D3D: serious rendering issues on Nvidia boards with driver version 178.13 on Vista
JDK-6757527 : D3D: serious rendering issues on Nvidia boards with driver version 178.13 on Vista

Details
Type:
Bug
Submit Date:
2008-10-08
Status:
Resolved
Updated Date:
2010-12-08
Project Name:
JDK
Resolved Date:
2008-11-07
Component:
client-libs
OS:
windows_vista,windows
Sub-Component:
2d
CPU:
x86
Priority:
P2
Resolution:
Fixed
Affected Versions:
6u10,7
Fixed Versions:
6u11 (b03)

Related Reports
Backport:
Duplicate:
Duplicate:
Relates:

Sub Tasks

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
                                     
2008-10-31
WORK AROUND

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

Working with Nvidia on identifying the cause.
                                     
2008-10-08
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.
                                     
2008-10-30



Hardware and Software, Engineered to Work Together