소스 검색

added -D heaps-compact-mem support

Nicolas Cannasse 3 년 전
부모
커밋
ba0f95206b
1개의 변경된 파일23개의 추가작업 그리고 2개의 파일을 삭제
  1. 23 2
      hxsl/SharedShader.hx

+ 23 - 2
hxsl/SharedShader.hx

@@ -51,6 +51,9 @@ class SharedShader {
 		if( src == "" )
 			return;
 		data = new hxsl.Serializer().unserialize(src);
+		for( v in data.vars )
+			initVarId(v);
+		data = compactMem(data);
 		initialize();
 	}
 
@@ -81,7 +84,9 @@ class SharedShader {
 		eval.eliminateConditionals = true;
 		#end
 		eval.unrollLoops = UNROLL_LOOPS;
-		var i = new ShaderInstance(eval.eval(data));
+		var edata = eval.eval(data);
+		edata = compactMem(edata);
+		var i = new ShaderInstance(edata);
 		#if debug
 		Printer.check(i.shader, [data]);
 		#end
@@ -118,8 +123,17 @@ class SharedShader {
 		}
 	}
 
-	function browseVar( v : TVar, ?path : String ) {
+	function initVarId( v : TVar ) {
 		v.id = Tools.allocVarId();
+		switch( v.type ) {
+		case TStruct(vl):
+			for( v in vl )
+				initVarId(v);
+		default:
+		}
+	}
+
+	function browseVar( v : TVar, ?path : String ) {
 		if( path == null )
 			path = v.getName();
 		else
@@ -147,4 +161,11 @@ class SharedShader {
 		}
 	}
 
+	public static function compactMem<T>( mem : T ) {
+		#if (hl && heaps_compact_mem)
+		mem = hl.Api.compact(mem, null, 0, null);
+		#end
+		return mem;
+	}
+
 }