From 37310c70edbee74554b3490c6ac1844594d9064f Mon Sep 17 00:00:00 2001
From: "Gregory J. Ward" <gregoryjward@gmail.com>
Date: Tue, 10 Dec 2024 03:16:13 +0000
Subject: [PATCH] perf: Optimized initialization order for early shadow testing

---
 src/rt/m_wgmdf.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/rt/m_wgmdf.c b/src/rt/m_wgmdf.c
index 6c1cd08a..14e66d6f 100644
--- a/src/rt/m_wgmdf.c
+++ b/src/rt/m_wgmdf.c
@@ -1,5 +1,5 @@
 #ifndef lint
-static const char RCSid[] = "$Id: m_wgmdf.c,v 2.1 2024/12/09 00:44:29 greg Exp $";
+static const char RCSid[] = "$Id: m_wgmdf.c,v 2.2 2024/12/10 03:16:13 greg Exp $";
 #endif
 /*
  *  Shading function for programmable Ward-Geisler-Moroder-Duer material.
@@ -510,10 +510,14 @@ m_wgmdf(OBJREC *m, RAY *r)
 	}
 	if ((m->oargs.nsargs < 13) | (m->oargs.nfargs < 9))
 		objerror(m, USER, "bad number of arguments");
+
+	if (r->crtype & SHADOW && !strcmp(m->oargs.sarg[5], "0"))
+		return(1);		/* first shadow test */
 	clr_comps(&wd);
 	wd.rp = r;
 	wd.mtp = m;
 	wd.mf = getfunc(m, 12, 0xEEE, 1);
+	set_dcomp(&wd, 0);		/* calls main modifier */
 	setfunc(m, r);			/* get local u vector */
 	errno = 0;
 	for (i = 0; i < 3; i++)
@@ -523,11 +527,10 @@ m_wgmdf(OBJREC *m, RAY *r)
 	else if (wd.mf->fxp != &unitxf)
 		multv3(wd.ulocal, wd.ulocal, wd.mf->fxp->xfm);
 
-	set_dcomp(&wd, 0);		/* call this first */
-	set_dcomp(&wd, 1);		/* call this second */
 	set_scomp(&wd, 1);		/* sets SP_TPURE */
 	if (r->crtype & SHADOW && !(wd.specfl & SP_TPURE))
-		return(1);		/* early shadow test */
+		return(1);		/* second shadow test */
+	set_dcomp(&wd, 1);
 	set_scomp(&wd, 0);
 	wd.specfl |= SP_FLAT*(r->ro != NULL && isflat(r->ro->otype));
 					/* apply Fresnel adjustments? */