Cannot display on app node with image reassembly template
Eric Sandall <[email protected]>
| Newsgroups | gmane.comp.graphics.chromium.user |
|---|---|
| Message-ID | <Pine.LNX.4.64.0605241051440.31686@cerberus> |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I used configtool.py to setup an Image Reassembly template (modified to use ssh instead of rsh). When I run my config (vrcim-cluster.conf) a render window appears on all of the render nodes (slave1 through slave4) with part of the blue screen (trying to run `atlantis`) displayed. The app node (vr-master) has a "GLUT Atlantis Demo" window open, but does not seem to display the Atlantis window that I see when running `python crdemo.conf atlantis` (which works). The render windows on the slaves is static (solid blue, no whales). Any ideas? I've attached my options.mk that I used to compile chromium 1.8 and my vrcim-cluster.conf. In case it matters (perhaps I'm using the wrong template ;)) I am trying to use the slaves to do the 'work' of rendering, but have it display on the master (which can also do the work, but is not currently setup to do that with this configuration, AFAIK). Thanks, - -sandalle - -- Eric Sandall | Source Mage GNU/Linux Developer [email protected] | http://www.sourcemage.org/ http://eric.sandall.us/ | SysAdmin @ Inst. Shock Physics @ WSU http://counter.li.org/ #196285 | http://www.shock.wsu.edu/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQFEdJ6aHXt9dKjv3WERAq1GAJ4/Hwz8gNxPUsdkU12Brr0CxEICWwCcCMgR cS5Dd5z+PVCroaQd8PJODfM= =/1cq -----END PGP SIGNATURE-----
options.mk
(text/plain, 1.6 KB)
# Copyright (c) 2001, Stanford University
# All rights reserved.
#
# See the file LICENSE.txt for information on redistributing this software.
# This file lets one set various compile-time options.
# Set RELEASE to 1 to compile with optimizations and without debug info.
RELEASE=1
# Set THREADSAFE to 1 if you want thread safety for parallel applications.
THREADSAFE=1
# Set to 1 if you want to force building 32-bit objects on a 64-bit system.
FORCE_32BIT_ABI=0
# Set USE_DMX to 1 if you want to enable DMX support.
# You'll need the libdmx.a library and dmxext.h header in the usual X
# directories. If you don't, set DMX_INCDIR and DMX_LIBDIR here.
USE_DMX=0
#DMX_DIR=/wherever/DMX/is/installed
#DMX_INCDIR=${DMX_DIR}/dmx/xc/exports/include/
#DMX_LIBDIR=${DMX_DIR}/dmx/xc/exports/lib/
# Set USE_VNC to 1 if you want to enable VNC support.
# You'll need the libVncExt.so.2.0 library and vncstr.h & vnc.h headers in
# the usual X directories. This will build the replicateSPU.
# Note: you'll probably want to turn on threadsafety too (see above).
USE_VNC=0
# Set USE_OSMESA to 1 if you want to enable off screen rendering using Mesa.
USE_OSMESA=0
# Quadrics Elan3 interface support. There are two different implementations
# of Quadrics communication. TEAC_SUPPORT is probably what you want;
# TCSCOMM_SUPPORT is somewhat outdated at this point.
TEAC_SUPPORT=0
TCSCOMM_SUPPORT=0
# Set to 1 to enable Myrinet support
GM_SUPPORT=0
# Set to 1 to enable InfiniBand Support
IB_SUPPORT=0
# Set to 1 to enable SDP Support
SDP_SUPPORT=0
# Set to 1 to enable DOXYGEN generation
DOXYGEN=1
vrcim-cluster.conf
(text/plain, 10.1 KB)
TEMPLATE = "Image Reassembly"
import string, sys, getopt
sys.path.append( "../server" )
from mothership import *
import tilelayout
HIDDEN = 0
NUM_SERVERS = 4
TILE_ROWS = 4
TILE_COLS = 5
TILE_WIDTH = 256
TILE_HEIGHT = 256
LAYOUT = 0
SERVER_HOSTS = [u'slave1', u'slave2', u'slave3', u'slave4']
SERVER_PATTERN = (u'slave#', 1)
NUM_APP_NODES = 1
DYNAMIC_SIZE = 0
REASSEMBLY = 0
REASSEMBLE_HOST = "vr-master"
TILESORT_OPTIONS = [
("bucket_mode", "Test All Tiles"),
("scale_to_mural_size", 1),
("fake_window_dims", [TILE_COLS * TILE_WIDTH, TILE_ROWS * TILE_HEIGHT]),
("retile_on_resize", 1),
("scale_images", 1),
("sync_on_swap", 1),
("sync_on_finish", 1),
("split_begin_end", 1),
("use_dmx", 0),
("draw_bbox", 0),
("bbox_line_width", 5),
("bbox_scale", 1.0),
("auto_dlist_bbox", 0),
("lazy_send_dlists", 0),
("dlist_state_tracking", 0),
("emit_GATHER_POST_SWAPBUFFERS", 0),
("local_tile_spec", 0),
("stereo_mode", "None"),
("glasses_type", "RedBlue"),
("force_quad_buffering", 0),
("render_to_crut_window", 0),
("track_window_position", 0),
("display_string", "DEFAULT"),
]
READBACK_OPTIONS = [
("extract_depth", 0),
("extract_alpha", 0),
("local_visualization", 1),
("visualize_depth", 0),
("gather_url", ""),
("gather_mtu", 1048576),
("draw_offset", [0, 0]),
("read_size", [0, 0]),
("draw_bbox_outlines", 0),
("title", "Chromium Readback SPU"),
("window_geometry", [0, 0, 400, 400]),
("fullscreen", 1),
("resizable", 1),
("on_top", 0),
("borderless", 0),
("default_visual", "rgb, double, depth"),
("try_direct", 1),
("force_direct", 0),
("render_to_app_window", 0),
("render_to_crut_window", 0),
("show_cursor", 0),
("system_gl_path", ""),
("display_string", "DEFAULT"),
("gather_url", ""),
("gather_userbuf_size", 0),
("lut8", ""),
("swap_master_url", ""),
("is_swap_master", 0),
("num_swap_clients", 1),
("use_osmesa", 0),
("nv_swap_group", 0),
("ignore_papi", 0),
("ignore_window_moves", 0),
("pbuffer_size", [0, 0]),
("use_glxchoosevisual", 1),
]
REASSEMBLE_OPTIONS = [
("title", "Chromium Render SPU"),
("window_geometry", [0, 0, 256, 256]),
("fullscreen", 1),
("resizable", 1),
("on_top", 0),
("borderless", 0),
("default_visual", "rgb, double, depth"),
("try_direct", 1),
("force_direct", 0),
("render_to_app_window", 1),
("render_to_crut_window", 0),
("show_cursor", 0),
("system_gl_path", ""),
("display_string", "DEFAULT"),
("gather_url", ""),
("gather_userbuf_size", 0),
("lut8", ""),
("swap_master_url", ""),
("is_swap_master", 0),
("num_swap_clients", 1),
("use_osmesa", 0),
("nv_swap_group", 0),
("ignore_papi", 0),
("ignore_window_moves", 0),
("pbuffer_size", [0, 0]),
("use_glxchoosevisual", 1),
]
SERVER_OPTIONS = [
("optimize_bucket", 1),
("lighting2", 0),
("only_swap_once", 0),
("spu_dir", ""),
("debug_barriers", 0),
("shared_display_lists", 1),
("shared_texture_objects", 1),
("shared_programs", 1),
("shared_windows", 0),
("use_dmx", 0),
("vertprog_projection_param", ""),
("stereo_view", "Both"),
("view_matrix", [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
("right_view_matrix", [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
("projection_matrix", [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
("right_projection_matrix", [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
]
APP_OPTIONS = [
("application", "atlantis -s 100"),
("zeroth_arg", ""),
("start_dir", "/home/chromium/cr-1.8/bin/Linux"),
("client_dll", ""),
("spu_dir", ""),
("minimum_window_size", [0, 0]),
("match_window_title", ""),
("track_window_size", 1),
("track_window_position", 1),
("track_window_visibility", 1),
("show_cursor", 0),
("ignore_freeglut_menus", 1),
("force_pbuffers", 0),
]
MOTHERSHIP_OPTIONS = [
("MTU", 1048576),
("auto_start", 1),
("auto_start_apps", 1),
("autostart_branches", 1),
("autostart_max_nodes_per_thread", 1),
]
# end of options, the rest is boilerplate (do not remove this line!)
TILES = [[(0, 0, 256, 256), (1024, 0, 256, 256), (768, 256, 256, 256), (512, 512, 256, 256), (256, 768, 256, 256)], [(256, 0, 256, 256), (0, 256, 256, 256), (1024, 256, 256, 256), (768, 512, 256, 256), (512, 768, 256, 256)], [(512, 0, 256, 256), (256, 256, 256, 256), (0, 512, 256, 256), (1024, 512, 256, 256), (768, 768, 256, 256)], [(768, 0, 256, 256), (512, 256, 256, 256), (256, 512, 256, 256), (0, 768, 256, 256), (1024, 768, 256, 256)]]
def Usage():
print "Usage:"
print " %s [--help] [-c columns] [-r rows] [-w tileWidth]" % sys.argv[0]
print " [-h tileHeight] [-l layout] [-d dynamicResize] [-s servers] [program]"
print "Where layout is 0, 1 or 2"
print "Where dynamicSize is 0, 1 or 2"
sys.exit(0)
PROGRAM = ""
ZEROTH_ARG = ""
AUTO_START_SERVERS = 0
AUTO_START_APPS = 0
# Look for some special options
for (name, value) in APP_OPTIONS:
if name == "application":
PROGRAM = value
elif name == "zeroth_arg":
ZEROTH_ARG = value
for (name, value) in MOTHERSHIP_OPTIONS:
if name == "auto_start":
AUTO_START_SERVERS = value
elif name == "auto_start_apps":
AUTO_START_APPS = value
# Process command line args
try:
(opts, args) = getopt.getopt(sys.argv[1:], "c:r:w:h:l:s:d:", ["help"])
except getopt.GetoptError:
Usage()
for (name, value) in opts:
if name == "--help":
Usage()
elif name == "-c":
TILE_COLS = int(value)
elif name == "-r":
TILE_ROWS = int(value)
elif name == "-w":
TILE_WIDTH = int(value)
elif name == "-h":
TILE_HEIGHT = int(value)
elif name == "-s":
SERVER_HOSTS = str.split(value, ",")
elif name == "-l":
LAYOUT = int(value)
elif name == "-d":
DYNAMIC_SIZE = int(value)
if len(args) > 0:
PROGRAM = args[0]
print "--- Image Reassembly Template ---"
print "Mural size: %d cols x %d rows" % (TILE_COLS, TILE_ROWS)
print "Tile size: %d x %d" % (TILE_WIDTH, TILE_HEIGHT)
print "Total size: %d x %d" % (TILE_WIDTH * TILE_COLS, TILE_HEIGHT * TILE_ROWS)
print "Layout mode: %s" % ["Raster", "ZigZag", "Spiral"][LAYOUT]
print "Dynamic size: %s" % ["No", "Yes (variable rows/cols)", "Yes (variable tiel size)"][DYNAMIC_SIZE]
print "Servers: %s" % SERVER_HOSTS
print "Program: %s" % PROGRAM
print "---------------------------------"
def LayoutTiles(muralWidth, muralHeight):
if DYNAMIC_SIZE == 1:
# variable rows/cols, fixed tile size
tileWidth = TILE_WIDTH
tileHeight = TILE_HEIGHT
rows = 0
cols = 0
else:
# fixed rows/cols, variable tile size
assert DYNAMIC_SIZE == 2
tileWidth = 0
tileHeight = 0
rows = TILE_ROWS
cols = TILE_COLS
if LAYOUT == 0:
tiles = tilelayout.LayoutRaster(muralWidth, muralHeight,
NUM_SERVERS,
tileWidth, tileHeight,
rows, cols)
elif LAYOUT == 1:
tiles = tilelayout.LayoutZigZag(muralWidth, muralHeight,
NUM_SERVERS,
tileWidth, tileHeight,
rows, cols)
else:
tiles = tilelayout.LayoutSpiral(muralWidth, muralHeight,
NUM_SERVERS,
tileWidth, tileHeight,
rows, cols)
return tiles
localHostname = os.uname()[1]
cr = CR()
tilesortSPUs = []
clientNodes = []
if HIDDEN:
hiddenline_spu = SPU('hiddenline')
hiddenline_spu.Conf('line_width', 1)
for i in range(NUM_APP_NODES):
tilesortspu = SPU('tilesort')
for (name, value) in TILESORT_OPTIONS:
tilesortspu.Conf( name, value )
if DYNAMIC_SIZE:
tilesortspu.TileLayoutFunction(LayoutTiles)
tilesortspu.Conf('optimize_bucket', 0)
tilesortSPUs.append(tilesortspu)
clientnode = CRApplicationNode()
if HIDDEN:
clientnode.AddSPU(hiddenline_spu)
clientnode.AddSPU(tilesortspu)
for (name, value) in APP_OPTIONS:
clientnode.Conf(name, value)
# argument substitutions
if PROGRAM != "":
if i == 0 and ZEROTH_ARG != "":
app_string = string.replace( PROGRAM, '%0', ZEROTH_ARG)
else:
app_string = string.replace( PROGRAM, '%0', '' )
app_string = string.replace( app_string, '%I', str(i) )
app_string = string.replace( app_string, '%N', str(NUM_APP_NODES) )
clientnode.Conf( 'application', app_string )
if AUTO_START_APPS:
clientnode.AutoStart( ["/bin/sh", "-c",
"LD_LIBRARY_PATH=%s %s/crappfaker" % (crlibdir, crbindir) ] )
clientNodes.append(clientnode)
if REASSEMBLY:
reassembleNode = CRNetworkNode(REASSEMBLE_HOST)
reassembleSPU = SPU('render')
reassembleNode.AddSPU(reassembleSPU)
for (name, value) in REASSEMBLE_OPTIONS:
reassembleSPU.Conf( name, value )
if AUTO_START_SERVERS:
reassembleNode.AutoStart( ["/usr/bin/ssh", REASSEMBLE_HOST,
"/bin/sh -c 'DISPLAY=:0.0 CRMOTHERSHIP=%s LD_LIBRARY_PATH=%s crserver'" % (REASSEMBLE_HOST, crlibdir) ] )
# Loop over servers
for serverIndex in range(NUM_SERVERS):
serverTiles = TILES[serverIndex]
if len(serverTiles) == 0:
continue
# Create this server's readback/render SPU
if REASSEMBLY:
renderspu = SPU('readback')
else:
renderspu = SPU('render')
for (name, value) in READBACK_OPTIONS:
renderspu.Conf(name, value)
# Create network node
if serverIndex < len(SERVER_HOSTS):
host = SERVER_HOSTS[serverIndex]
else:
host = SERVER_HOSTS[-1] # use last server
servernode = CRNetworkNode(host)
# Add the tiles
for tile in serverTiles:
servernode.AddTile(tile[0], tile[1], tile[2], tile[3])
# Add SPU to node, node to mothership
servernode.AddSPU(renderspu)
if REASSEMBLY:
packspu = SPU('pack')
servernode.AddSPU(packspu)
packspu.AddServer( reassembleNode, protocol='tcpip' )
for (name, value) in SERVER_OPTIONS:
servernode.Conf(name, value)
cr.AddNode(servernode)
# connect app nodes to server
for i in range(NUM_APP_NODES):
tilesortSPUs[i].AddServer(servernode, protocol='tcpip', port=7001+serverIndex)
# auto-start
if AUTO_START_SERVERS:
servernode.AutoStart( ["/usr/bin/ssh", host,
"/bin/sh -c 'DISPLAY=:0.0 CRMOTHERSHIP=%s LD_LIBRARY_PATH=%s crserver'" % (localHostname, crlibdir) ] )
# Add nodes to mothership
for i in range(NUM_APP_NODES):
cr.AddNode(clientNodes[i])
if REASSEMBLY:
cr.AddNode(reassembleNode)
# Set mothership params
for (name, value) in MOTHERSHIP_OPTIONS:
cr.Conf(name, value)
cr.Go()