Bläddra i källkod

added full shader debug in case of error

ncannasse 7 år sedan
förälder
incheckning
85fe1dcd6d
2 ändrade filer med 11 tillägg och 7 borttagningar
  1. 6 2
      hxsl/Cache.hx
  2. 5 5
      hxsl/Splitter.hx

+ 6 - 2
hxsl/Cache.hx

@@ -201,7 +201,11 @@ class Cache {
 		#end
 
 		var linker = new hxsl.Linker();
-		var s = linker.link([for( s in shaderDatas ) s.inst.shader]);
+		var s = try linker.link([for( s in shaderDatas ) s.inst.shader]) catch( e : Error ) {
+			var shaders = [for( s in shaderDatas ) Printer.shaderToString(s.inst.shader)];
+			e.msg += "\n\nin\n\n" + shaders.join("\n-----\n");
+			throw e;
+		}
 
 		#if debug
 		Printer.check(s,[for( s in shaderDatas ) s.inst.shader]);
@@ -227,7 +231,7 @@ class Cache {
 			}
 
 		var prev = s;
-		var s = new hxsl.Splitter().split(s);
+		var s = try new hxsl.Splitter().split(s) catch( e : Error ) { e.msg += "\n\nin\n\n"+Printer.shaderToString(s); throw e; };
 
 		#if debug
 		Printer.check(s.vertex,[prev]);

+ 5 - 5
hxsl/Splitter.hx

@@ -125,9 +125,9 @@ class Splitter {
 
 		// final check
 		for( v in vvars )
-			checkVar(v, true, vvars);
+			checkVar(v, true, vvars, vfun.expr.p);
 		for( v in fvars )
-			checkVar(v, false, vvars);
+			checkVar(v, false, vvars, ffun.expr.p);
 
 		// support for double mapping v -> v1 -> v2
 		for( v in varMap.keys() ) {
@@ -180,14 +180,14 @@ class Splitter {
 		}
 	}
 
-	function checkVar( v : VarProps, vertex : Bool, vvars : Map<Int,VarProps> ) {
+	function checkVar( v : VarProps, vertex : Bool, vvars : Map<Int,VarProps>, p ) {
 		switch( v.v.kind ) {
 		case Local if( v.requireInit ):
-			throw "Variable " + v.v.name + " is written without being initialized";
+			throw new Error("Variable " + v.v.name + " is used without being initialized", p);
 		case Var:
 			if( !vertex ) {
 				var i = vvars.get(v.v.id);
-				if( i == null || i.write == 0 ) throw "Varying " + v.v.name + " is not written by vertex shader";
+				if( i == null || i.write == 0 ) throw new Error("Varying " + v.v.name + " is not written by vertex shader",p);
 			}
 		default:
 		}