From: Brian P. <bri...@tu...> - 2006-08-08 14:55:24
|
James Supancic wrote: > >Why do you say that? Line 87 of tilesortspu_swap.c is a call to > >crPackSwapBuffers(). > > Opps, I was mis-reading my debuger ouptut. > > I am also a bit confused about this. tilesortspu_SwapBuffer calls this > function: > void PACK_APIENTRY crPackSwapBuffers( GLint window, GLint flags ) > { > GET_PACKER_CONTEXT(pc); > unsigned char *data_ptr; > (void) pc; > GET_BUFFERED_POINTER( pc, 16 ); > WRITE_DATA( 0, GLint, 16 ); > WRITE_DATA( 4, GLenum, CR_SWAPBUFFERS_EXTEND_OPCODE ); > WRITE_DATA( 8, GLint, window ); > WRITE_DATA( 12, GLint, flags ); > WRITE_OPCODE( pc, CR_EXTEND_OPCODE ); > } > > to put the SwapBuffers command into the buffer, and it eventually > invokes tilesortspuSendServerBufferThread once per server to send the > buffers? Right. > In the tilesortspuSendServerBufferThread function it looks as if each > server has its own buffer, but crPackSwapBuffers looks like it is just > writting to one buffer? Am I missing something? Does crPackSwapBuffers > get called more than once? Is it somehow packing multiple buffers? Is > there a global buffer that is somehow combined with server specific > buffers at time of send? In the case of the loop over tilesortspuSendServerBuffer(), we're sending the contents of the same buffer to all servers. There's a number of different packing buffers in the Tilesort SPU. Some hold geometry commands and are sent to one or more servers. Some buffers contain state-change commands and are sent to individual servers. The code is pretty complicated since it's evolved a lot over the years. It would be nice to overhaul it someday. -Brian |