Pārlūkot izejas kodu

directx shader compilation fixes

ncannasse 7 gadi atpakaļ
vecāks
revīzija
d78444edf6
2 mainītis faili ar 10 papildinājumiem un 2 dzēšanām
  1. 2 1
      h3d/impl/DirectXDriver.hx
  2. 8 1
      hxsl/HlslOut.hx

+ 2 - 1
h3d/impl/DirectXDriver.hx

@@ -703,7 +703,8 @@ class DirectXDriver extends h3d.impl.Driver {
 			for( v in shader.vertex.data.vars )
 				if( v.kind == Input ) {
 					var e = new LayoutElement();
-					e.semanticName = @:privateAccess v.name.toUtf8();
+					var name = hxsl.HlslOut.semanticName(v.name);
+					e.semanticName = @:privateAccess name.toUtf8();
 					e.inputSlot = layout.length;
 					e.format = switch( v.type ) {
 					case TFloat: R32_FLOAT;

+ 8 - 1
hxsl/HlslOut.hx

@@ -24,6 +24,7 @@ class HlslOut {
 		m.set(LReflect, "reflect");
 		m.set(Fract, "frac");
 		m.set(Mix, "lerp");
+		m.set(Inversesqrt, "rsqrt");
 		for( g in m )
 			KWDS.set(g, true);
 		m;
@@ -500,7 +501,7 @@ class HlslOut {
 			if( v.kind == Output )
 				add(" : " + (isVertex ? SV_POSITION : SV_TARGET + (index++)));
 			else
-				add(" : " + v.name);
+				add(" : " + semanticName(v.name));
 			add(";\n");
 			varAccess.set(v.id, prefix);
 		}
@@ -648,4 +649,10 @@ class HlslOut {
 		return decls.join("\n");
 	}
 
+	public static function semanticName( name : String ) {
+		if( name.length == 0 || (name.charCodeAt(name.length - 1) >= '0'.code && name.charCodeAt(name.length - 1) <= '9'.code) )
+			name += "_";
+		return name;
+	}
+
 }