Bug 98

Summary: Just 1st frame rendering on ATI Radeon
Product: [JogAmp] Jogl Reporter: Sven Gothel <sgothel>
Component: coreAssignee: Sven Gothel <sgothel>
Status: VERIFIED FIXED    
Severity: normal    
Priority: P3    
Version: 1   
Hardware: All   
OS: windows   
Type: DEFECT SCM Refs:
Workaround: ---
Attachments: Thread dump of gears

Description Sven Gothel 2010-03-24 07:46:46 CET


---- Reported by bombadil 2004-07-22 11:29:17 ----

Xith applications on my Ati Radeon 9600pro just render the first frame with the 
JOGL binding, then the render loop "hangs". It applies to the Xith demos on 
http://xith.org/demo/com.xith3d.test.php
With my own Xith application not even the first frame is being rendered.

Specifing the -DATI_WORKAROUND=fase parameter makes the Xith apps to work on my 
Radeon 9600pro. However on an Ati Radeon 9800 XL I've seen the same "hang" 
effect with the JOGL version prior to the Ati-Workaround version, both for Xith 
and direct JOGL applications.

Win2000, Ati Radeon 9600pro, Catalyst 4.7 (6.14.10.6458)
Jogl v1.1 beta 04 (2004-07-16)

Hitting Ctrl-Break during the Xith "hang" prints this:
>>>
Hit SPACE to toggle projection policy, or ESC to exit
Using ATI workaround of dispatching display() on event thread
Init GL is net.java.games.jogl.impl.windows.WindowsGLImpl
OpenGL Renderer = RADEON 9600 x86/MMX/3DNow!/SSE
OpenGL Version = 1.5.4454 Win2000 Release
OpenGL Vendor = ATI Technologies Inc.
Full thread dump Java HotSpot(TM) Client VM (1.4.2_05-b04 mixed mode):

"AWT-EventQueue-0" prio=7 tid=0x182e40b8 nid=0x340 in Object.wait() [28bbf000..
28bbfd88]
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Unknown Source)
	at java.awt.EventQueue.getNextEvent(Unknown Source)
	- locked <0x104fd0d8> (a java.awt.EventQueue)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

"Java2D Disposer" daemon prio=10 tid=0x182d7598 nid=0x1e0 in Object.wait() 
[28b7f000..28b7fd88]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x105b1a50> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	- locked <0x105b1a50> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	at sun.java2d.Disposer.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

"AWT-Windows" daemon prio=7 tid=0x182c9b08 nid=0x554 runnable [2867f000..
2867fd88]
	at sun.awt.windows.WToolkit.eventLoop(Native Method)
	at sun.awt.windows.WToolkit.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

"AWT-Shutdown" prio=5 tid=0x009a03d0 nid=0x4e4 in Object.wait() [2863f000..
2863fd88]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x10512d20> (a java.lang.Object)
	at java.lang.Object.wait(Unknown Source)
	at sun.awt.AWTAutoShutdown.run(Unknown Source)
	- locked <0x10512d20> (a java.lang.Object)
	at java.lang.Thread.run(Unknown Source)

"Signal Dispatcher" daemon prio=10 tid=0x00952b60 nid=0x540 waiting on condition 
[0..0]

"Finalizer" daemon prio=9 tid=0x00950110 nid=0x4ac in Object.wait() [1816f000..
1816fd88]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x104f6c18> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	- locked <0x104f6c18> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(Unknown Source)
	at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" daemon prio=10 tid=0x0094ed38 nid=0x1e8 in Object.wait() 
[1812f000..1812fd88]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x104f6c80> (a java.lang.ref.Reference$Lock)
	at java.lang.Object.wait(Unknown Source)
	at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
	- locked <0x104f6c80> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=0x00235858 nid=0x1c0 waiting on condition [6f000..6fc3c]
	at java.lang.Thread.sleep(Native Method)
	at com.xith3d.test.Xith3DMorphPyramid2CubeTest.
runTest(Xith3DMorphPyramid2CubeTest.java:226)
	at com.xith3d.test.Xith3DMorphPyramid2CubeTest.
init(Xith3DMorphPyramid2CubeTest.java:211)
	at com.xith3d.test.Xith3DMorphPyramid2CubeTest.
main(Xith3DMorphPyramid2CubeTest.java:264)

"VM Thread" prio=5 tid=0x0094dc18 nid=0x4d4 runnable 

"VM Periodic Task Thread" prio=10 tid=0x009555a8 nid=0x4c8 waiting on condition 
"Suspend Checker Thread" prio=10 tid=0x00952210 nid=0x548 runnable 
<<<



---- Additional Comments From kbr 2004-07-22 16:06:09 ----

There isn't an obvious deadlock in the stack trace below, although it isn't
clear how long or why the main thread is sleeping. Can you add some printing
code to see whether the main loop is running properly? Can you also add some
printing code to the underlying GLEventListener.display() routine in Xith3D (or
some similar routine called during every render pass) to see whether the code is
being executed?



---- Additional Comments From caoimhin 2004-07-23 11:55:46 ----

Created an attachment
Thread dump of gears




---- Additional Comments From kbr 2004-08-03 10:51:05 ----

This was a race condition between JOGL's automatic discovery that the
ATI_WORKAROUND was needed and the creation of the first GLCanvas and
associated Animator. The need for disabling the setRenderingThread
optimization was computed too late, incorrectly locking out other
threads (in particular, the AWT event queue thread) from performing
rendering of the component.

Fixed by users gkw and kbr.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:46 EDT  ---

This bug was previously known as _bug_ 98 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=98
Imported an attachment (id=24)

The original submitter of attachment 24 [details] is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.