EVALUATION
It looks like part of the fix for 5066318 tripped over yet another ATI driver
bug (which is ironic because that fix was supposed to help workaround some
other ATI driver bugs). One part of that fix was to use the
WGL_ARB_make_current_read extension (and the wglMakeContextCurrentARB() method)
for making contexts current for a given src/dst pair. It appears that on
ATI drivers under certain circumstances, if srcHDC==dstHDC, this method will
cause a crash in ATI's drivers. Ugh. I don't fully understand why this crash
occurs sometimes but not others (e.g. I can run SwingSet2 or Java2Demo just fine
and never experience a crash, but testcases like the one attached here or
test/sun/java2d/OpenGL/GradientPaints.java crash reliably everytime).
Fortunately we can workaround the bug quite easily. We only need to use the
wglMakeContextCurrentARB() method when the two surfaces are different; when they
are the same surface, we can simply use the old wglMakeCurrent() method to
make the context current to the single destination surface. I've verified
that this "fix" works around the problem at hand, and now there are no more
crashes for either -Dsun.java2d.opengl.fbobject=true or fbobject=false.
|