Hi, as I reported earlier there seems to be a race condition in the Radeon driver when state is emitted while the card is processing vertices. Now I narrowed it down to tex[0], tex[1] and tcl states that appear to require 3D to be idle. Can someone with Radeon specs confirm this? Other state changes may not lock up the card but cause incorrect rendering. I havn't seen such behaviour, though. Again, what do the specs say?
A refined patch for the user space driver is attached. A proper fix in the kernel would have to check the packet id in radeon_emit_packets (shared/drm/kernel/radeon_state.c) once we know exactly which packets are affected. Regards, Felix __\|/__ ___ ___ ___ __Tschüß_______\_6 6_/___/__ \___/__ \___/___\___You can do anything,___ _____Felix_______\Ä/\ \_____\ \_____\ \______U___just not everything____ [EMAIL PROTECTED] >o<__/ \___/ \___/ at the same time!
Index: radeon_ioctl.c =================================================================== RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/radeon/radeon_ioctl.c,v retrieving revision 1.37 diff -u -r1.37 radeon_ioctl.c --- radeon_ioctl.c 30 Nov 2002 14:24:06 -0000 1.37 +++ radeon_ioctl.c 8 Dec 2002 13:21:06 -0000 @@ -87,6 +87,14 @@ foreach_s( state, tmp, list ) { if (state->check( rmesa->glCtx )) { + if (state == &rmesa->hw.tex[0] || state == &rmesa->hw.tex[1] || + state == &rmesa->hw.tcl) { + drmRadeonCmdHeader *cmd; + cmd = (drmRadeonCmdHeader *)radeonAllocCmdBuf( rmesa, sizeof(*cmd), + __FUNCTION__ ); + cmd->wait.cmd_type = RADEON_CMD_WAIT; + cmd->wait.flags = RADEON_WAIT_3D; + } dest = radeonAllocCmdBuf( rmesa, state->cmd_size * 4, __FUNCTION__); memcpy( dest, state->cmd, state->cmd_size * 4); move_to_head( &(rmesa->hw.clean), state );