X11R6.8 server status

Keith Packard keithp at keithp.com
Sun Aug 15 19:30:49 PDT 2004


Jim asked me to report on the X server status as of this evening.

Eric Anholt and I have spent the last several days fixing bugs and testing 
various X server configurations.  We've also had help from numerous users 
over IRC through the whole process; it's been fun, and we've made huge 
progress.

Composite:

	Appears to mostly work.  There are a few minor known issues:

	 +	The openbox window manager rendering is broken in titlebars
		when xcompmgr is running.
	
	 +	Some users have reported segfaults in the X server
		when running xcompmgr.  One report is from a user with the
		nVidia binary driver.  It would be nice to get Andy to give
		this a whirl if possible and get more info.

	 +	Several users have reported rendering mistakes when running
		with xcompmgr with client-side compositing.  xcompmgr now
		has a '-a' flag to do server-side compositing, which is
		very useful for isolating errors in xcompmgr from errors in
		the X server.

	We need testing with the binary nVidia and ATI drivers with more
	users, especially with the Composite extension built but disabled.

	I would like to avoid making significant additional changes to this
	code if possible; I'll be away next week on vacation and only back
	on the 23rd and 24th, which seems far too late to consider doing
	anything other than catstrophic bug fixes and release notes.

	So, when people find problems, let's get them pointed at bug 999 
	and just release note them.  If we discover that we can't even
	compile Composite and get both the nVidia and ATI binary drivers
	working, we'll probably want to disable it by default.  I'm hoping
	this won't be the case, but I don't have the hardware to test
	either of these drivers myself.

	If we do find a catastrophic problem, I will take a look at it on 
	the 23rd and make a call as to whether it can be safely fixed or
	not.  Experience over the last two days has shown that we can get
	a huge amount of testing done in real-time through the IRC network,
	so bug fixes could be considered even at that late date, but they
	would have to be *very* small and *very* important...

R200 DRI:

	Eric and I spent about 6 hours analysing lockups when running 
	multiple DRI applications with the R200 driver.  We've learned what
	the driver bug is, and Eric should be busy figuring out a fix.
	The fix will reduce performance; estimates with ipers are < 5%, but
	that (of course) will be very application dependent.

	The R200 driver leaves the hardware unlocked while queueing rendering
	requests, before each drawing request it checks the hardware state
	and updates that to reflect what the drawing request requires.
	(r200EmitState):

		EmitState
		Draw
		...
		EmitState
		Draw 
		...
		EmitState
		Draw

	Here's a picture of the buffer:

		STATE	1
		DRAW	1
		STATE	2
		DRAW	2
		STATE 	3
		DRAW 	3
		
	Once the buffer fills, it is passed to the hardware:

		LOCK_HARDWARE
		WriteBuffer
		UNLOCK_HARDWARE

	The problem is that when LOCK_HARDWARE happens, the driver might 
	learn that it had lost the hardware since the last UNLOCK_HARDWARE
	call.  In this case, the hardware state is indeterminate, and needs
	to be reset.  However, the state which is needed is STATE 1, not
	the state when LOCK_HARDWARE was called, and in fact, it needs to 
	*prepend* said state before the buffer is sent out.

	The current kludge is to mark the hardware state as "lost"
	whenever the UNLOCK_HARDWARE is called.  That way, the first
	EmitState after that will send *all* of the state to the hardware,
	with subsequent EmitStates will just send the changes.

	This is obviously sub-optimal; alternate schemes are brewing, but
	probably shouldn't be attempted in this release.

	However, this is only *half* of the bug.  The remaining half is 
	that the emitted state (and possible vertex buffer pointers as 
	well) and drawing command must be written atomically; no other
	client should intervene and trash the hardware state.

	One fix would be to flush the buffer if "too little" space existed
	to send the EmitState and Draw operations in a single buffer; that
	would require careful book-keeping to make sure enough space was
	available.  We tested this approach by just using "really big" as
	the necessary space, but the amount is quite variable, so that
	isn't really a great plan.  The alternative is to leave the 
	hardware locked after flushing the buffer and wait until the
	completed command is sent before (flushing the secondary buffer) 
	and unlocking the hardware.  Eric seemed to think this was 
	practical.

-keith


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
Url : http://freedesktop.org/pipermail/release-wranglers/attachments/20040815/cdf363b0/attachment.pgp


More information about the release-wranglers mailing list