Re: readback + tilesort
Johann Won <[email protected]>
| Newsgroups | gmane.comp.graphics.chromium.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, Putting readback + tilesort aside, I'm testing binaryswap + tilesort configuration. With the patch, the problem mentioned earlier has been (partially) resolved. However this time, similar symtpom is found with bswap + tilesort. The same portion is drawn on each of the tiles ( I applied the patch ). Attached .conf is a modified version of psubmit_bswap, which uses two tiles. Please test with it, and give me a comment. Thanks in advance, - johann. Quoting Brian Paul <[email protected]>: > Joong Ho (Johann) Won wrote: > > Hi, > > > > I'm testing a combination of readback and tilesort SPUs, of which the > > ultimate purpose is to let sort-last parallel apps be able to render on > a > > DMX mural display. I wrote a simple test script for the first step, > which is > > a very simple modification of simplemural.conf. > > Simplemural.conf uses a tilesort SPU to render an app in two seperate > > (possibly remote) windows. > > My intension is just to add a readback SPU on top of the tilesort SPU. > At > > this stage, it has nothing to do with DMX. > > > > What should be rendered must be the same as that of the original > > simplemural.conf, but it is not. > > SAME part of the application window is rendered on both of the > crserver > > windows, i.e. the left half. > > > > Configuration for readback is the simplest, as will be shown below. > > Mike Houston's guess is that there may be a bug in arguments for > DrawPixels. > > Even worse is that when the 'extract_depth' option is turned on, > nothing is > > drawn at all. > > > > Below is my modified simplemural.conf script. Only a few lines related > with > > readbackSPU are added and without these, everything works fine. > > > > Thanks in advance for any comment. > > I found the problem. On the server side, the initial current raster > position needs to be translated by the origin of the server's tile. > Normally, the first call to glRasterPos/glWindowPos would set it > correctly, but the tilesort SPU's state tracker was filtering out that > state change. > > Try applying this patch to crserverlib/server_context.c > > -Brian > >
psubmit_bswap.conf
(application/octet-stream, 3.1 KB)
# Copyright (c) 2001, Stanford University
# All rights reserved
#
# See the file LICENSE.txt for information on redistributing this software.
# Demonstrate parallel submission with sort-last rendering.
import sys
sys.path.append( "../server" )
from mothership import *
NODES = 'tcpip://localhost,tcpip://localhost'
Demo = 'psubmit'
Demo = os.path.join(crbindir, Demo)
# Can render/readback windows be dynamically resized?
resizable = '1'
WIDTH=400
HEIGHT=400
# Set up the server node
servernode1 = CRNetworkNode( )
# Note: set only_swap_once here and pass -swap flag to all clients
servernode1.Conf( 'only_swap_once', 1 )
renderspu = SPU( 'render' )
renderspu.Conf( 'window_geometry', [500, 500, WIDTH/2, HEIGHT] )
servernode1.AddTile( 0,0, WIDTH/2, HEIGHT)
#servernode1.AddTile( 0,0, WIDTH, HEIGHT)
servernode1.Conf('optimize_bucket', 1)
servernode1.AddSPU( renderspu )
servernode2 = CRNetworkNode( )
# Note: set only_swap_once here and pass -swap flag to all clients
servernode2.Conf( 'only_swap_once', 1 )
renderspu = SPU( 'render' )
renderspu.Conf( 'window_geometry', [500+WIDTH/2+10, 500, WIDTH/2, HEIGHT] )
servernode2.AddTile( WIDTH/2, 0, WIDTH/2, HEIGHT)
#servernode2.AddTile( 0, 0, WIDTH, HEIGHT)
servernode2.Conf('optimize_bucket', 1)
servernode2.AddSPU( renderspu )
# Set up first app/client node
appnode1 = CRApplicationNode( )
# Set this node as the one to actually call SwapBuffers
appnode1.SetApplication( '%s -rank 0 -size 2 -clear -swap' % Demo )
appnode1.StartDir( crbindir )
spu = SPU('binaryswap')
spu.Conf('window_geometry', [0, 0, 400, 400])
spu.Conf('type', 'depth')
#spu.Conf('type', 'alpha')
spu.Conf('resizable', resizable)
spu.Conf('peers', NODES)
# only specifying visual to work-around ATI FireGL problem
spu.Conf('default_visual', 'rgb, double, depth, stencil')
spu.Conf('node_number', '0')
spu.Conf('title', 'binary-swap SPU node 0')
appnode1.AddSPU( spu )
spu = SPU('tilesort')
spu.Conf('bucket_mode', 'Uniform Grid')
spu.Conf('draw_bbox',0)
spu.Conf('bbox_scale', 1.0)
spu.Conf('dlist_state_tracking', 0)
spu.Conf('fake_window_dims', [ WIDTH, HEIGHT ] )
spu.AddServer( servernode1, 'tcpip', port=7010 )
spu.AddServer( servernode2, 'tcpip', port=7020 )
appnode1.AddSPU( spu )
# Set up second app/client node
appnode2 = CRApplicationNode( )
appnode2.SetApplication( '%s -rank 1 -size 2 -clear -swap' % Demo )
appnode2.StartDir( crbindir )
spu = SPU('binaryswap')
spu.Conf('window_geometry', [420, 0, 400, 400])
spu.Conf('type', 'depth')
spu.Conf('resizable', resizable)
spu.Conf('peers', NODES)
# only specifying visual to work-around ATI FireGL problem
spu.Conf('default_visual', 'rgb, double, depth, stencil')
spu.Conf('node_number', '1')
spu.Conf('title', 'binary-swap SPU node 1')
appnode2.AddSPU( spu )
spu = SPU('tilesort')
spu.Conf('bucket_mode', 'Uniform Grid')
spu.Conf('draw_bbox',0)
spu.Conf('bbox_scale', 1.0)
spu.Conf('dlist_state_tracking', 0)
spu.Conf('fake_window_dims', [ WIDTH, HEIGHT ] )
spu.AddServer( servernode1, 'tcpip', port=7010 )
spu.AddServer( servernode2, 'tcpip', port=7020 )
appnode2.AddSPU( spu )
cr = CR()
cr.MTU( 1024*1024 )
cr.AddNode( servernode1 )
cr.AddNode( servernode2 )
cr.AddNode( appnode1 )
cr.AddNode( appnode2 )
cr.Go()