瀏覽代碼

Removed non initialized error with batch shader since it can happens when per instance params will get DCE

TothBenoit 1 年之前
父節點
當前提交
a67d49af67
共有 2 個文件被更改,包括 7 次插入3 次删除
  1. 1 1
      hxsl/Cache.hx
  2. 6 2
      hxsl/Splitter.hx

+ 1 - 1
hxsl/Cache.hx

@@ -302,7 +302,7 @@ class Cache {
 
 		var prev = s;
 		var splitter = new hxsl.Splitter();
-		var sl = try splitter.split(s) catch( e : Error ) { e.msg += "\n\nin\n\n"+Printer.shaderToString(s); throw e; };
+		var sl = try splitter.split(s, mode == Batch ) catch( e : Error ) { e.msg += "\n\nin\n\n"+Printer.shaderToString(s); throw e; };
 
 		// params tracking
 		var paramVars = new Map();

+ 6 - 2
hxsl/Splitter.hx

@@ -22,10 +22,13 @@ class Splitter {
 	var varNames : Map<String,TVar>;
 	var varMap : Map<TVar,TVar>;
 
+	var isBatchShader : Bool;
+
 	public function new() {
 	}
 
-	public function split( s : ShaderData ) : Array<ShaderData> {
+	public function split( s : ShaderData, isBatchShader : Bool  ) : Array<ShaderData> {
+		this.isBatchShader = isBatchShader;
 		var vfun = null, vvars = new Map(), avvars = [];
 		var ffun = null, fvars = new Map(), afvars = [];
 		var isCompute = false;
@@ -214,7 +217,8 @@ class Splitter {
 	function checkVar( v : VarProps, vertex : Bool, vvars : Map<Int,VarProps>, p ) {
 		switch( v.v.kind ) {
 		case Local if( v.requireInit ):
-			throw new Error("Variable " + v.v.name + " is used without being initialized", p);
+			if ( v.origin.parent.name != "global" && !isBatchShader )
+				throw new Error("Variable " + v.v.name + " is used without being initialized", p);
 		case Var:
 			if( !vertex ) {
 				var i = vvars.get(v.origin.id);