David HoskinBump stack size.e95d82212 years agoHistory
102 lines · 1.4 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <thread.h>#include <draw.h>#include <memdraw.h>#include <geometry.h> #include "scene.h" int nnodes, node, nproc;int nsamples;int maxdepth; Scene *scene;Channel *c; voidthread(void *arg){	int id; 	id = (int)arg;	render(scene, id);	sendul(c, id);} voidusage(char *s){	fprint(2, "%s [-c scnid] [-d maxdepth] [-s samples] [-x xres] [-y yres]\n", s);	exits("usage");} voidthreadmain(int argc, char **argv){	char *NPROC, *s;	int xres, yres;	int scnid;	int i; 	NPROC= getenv("NPROC");	if(NPROC != nil){		nproc = atoi(NPROC);		if(nproc < 1)			nproc = 1;	}else		nproc = 1; 	nsamples = 4;	maxdepth = 16;	xres = 1024;	yres = 768;	scnid = 1; 	ARGBEGIN {	case 'c':		s = EARGF(usage(argv0));		scnid = atoi(s);		break;	case 'd':		s = EARGF(usage(argv0));		maxdepth = atoi(s);		if(maxdepth < 1)			maxdepth = 1;		break;	case 's':		s = EARGF(usage(argv0));		nsamples = atoi(s);		if(nsamples < 1)			nsamples = 1;		break;	case 'x':		s = EARGF(usage(argv0));		xres = atoi(s);		if(xres < 64)			xres = 64;		break;	case 'y':		s = EARGF(usage(argv0));		yres = atoi(s);		if(yres < 64)			yres = 64;		break;	default:		usage(argv0);	} ARGEND 	srand(time(0)); 	scene = newscene(scnid, xres, yres);	c = chancreate(sizeof(ulong), 1);	for(i = 0; i < nproc; ++i)		proccreate(thread, (void *)i, 16384*1024); 	for(i = 0; i < nproc; ++i)		recvul(c); 	writememimage(1, scene->img); 	exits("");}