Răsfoiți Sursa

fixed compilation with hxsl changes

Nicolas Cannasse 1 an în urmă
părinte
comite
66ff21d3c6
4 a modificat fișierele cu 37 adăugiri și 16 ștergeri
  1. 12 6
      h3d/impl/DX12Driver.hx
  2. 11 4
      h3d/impl/DirectXDriver.hx
  3. 11 3
      h3d/impl/GlDriver.hx
  4. 3 3
      hxsl/NXGlslOut.hx

+ 12 - 6
h3d/impl/DX12Driver.hx

@@ -97,8 +97,8 @@ class ShaderRegisters {
 	public var textures : Int;
 	public var samplers : Int;
 	public var texturesCount : Int;
-	public var textures2DCount : Int;
 	public var bufferTypes : Array<hxsl.Ast.BufferKind>;
+	public var texturesTypes : Array<hxsl.Ast.Type>;
 	public function new() {
 	}
 }
@@ -1048,11 +1048,14 @@ class DX12Driver extends h3d.impl.Driver {
 			if( sh.texturesCount > 0 ) {
 				regs.texturesCount = sh.texturesCount;
 				regs.textures = paramsCount;
+				regs.texturesTypes = [];
 
 				var p = sh.textures;
 				while( p != null ) {
 					switch( p.type ) {
-					case TArray( TSampler2D , SConst(n) ): regs.textures2DCount = n;
+					case TArray( t = TSampler(_) | TRWTexture(_) , SConst(n) ):
+						for( i in 0...n )
+							regs.texturesTypes.push(t);
 					default:
 					}
 					p = p.next;
@@ -1597,13 +1600,16 @@ class DX12Driver extends h3d.impl.Driver {
 				var sampler = frame.samplerViews.alloc(regs.texturesCount);
 				for( i in 0...regs.texturesCount ) {
 					var t = buf.tex[i];
-
+					var pt = regs.texturesTypes[i];
 					if( t == null || t.isDisposed() ) {
-						if( i < regs.textures2DCount ) {
+						switch( pt ) {
+						case TSampler(TCube, false):
+							t = h3d.mat.Texture.defaultCubeTexture();
+						case TSampler(_, false):
 							var color = h3d.mat.Defaults.loadingTextureColor;
 							t = h3d.mat.Texture.fromColor(color, (color >>> 24) / 255);
-						} else {
-							t = h3d.mat.Texture.defaultCubeTexture();
+						default:
+							throw "Missing texture";
 						}
 					}
 					if( t != null && t.t == null && t.realloc != null ) {

+ 11 - 4
h3d/impl/DirectXDriver.hx

@@ -11,12 +11,12 @@ private class ShaderContext {
 	public var globalsSize : Int;
 	public var paramsSize : Int;
 	public var texturesCount : Int;
-	public var textures2DCount : Int;
 	public var bufferCount : Int;
 	public var paramsContent : hl.Bytes;
 	public var globals : dx.Resource;
 	public var params : dx.Resource;
 	public var samplersMap : Array<Int>;
+	public var texturesTypes : Array<hxsl.Ast.Type>;
 	#if debug
 	public var debugSource : String;
 	#end
@@ -869,11 +869,14 @@ class DirectXDriver extends h3d.impl.Driver {
 		ctx.paramsContent = new hl.Bytes(shader.paramsSize * 16);
 		ctx.paramsContent.fill(0, shader.paramsSize * 16, 0xDD);
 		ctx.texturesCount = shader.texturesCount;
+		ctx.texturesTypes = [];
 
 		var p = shader.textures;
 		while( p != null ) {
 			switch( p.type ) {
-			case TArray( TSampler2D , SConst(n) ): ctx.textures2DCount = n;
+			case TArray( t = TSampler(_) | TRWTexture(_) , SConst(n) ):
+				for( i in 0...n )
+					ctx.texturesTypes.push(t);
 			default:
 			}
 			p = p.next;
@@ -1289,12 +1292,16 @@ class DirectXDriver extends h3d.impl.Driver {
 			var sstart = -1, smax = -1;
 			for( i in 0...shader.texturesCount ) {
 				var t = buffers.tex[i];
+				var tt = shader.texturesTypes[i];
 				if( t == null || t.isDisposed() ) {
-					if( i < shader.textures2DCount ) {
+					switch( tt ) {
+					case TSampler(T2D,_):
 						var color = h3d.mat.Defaults.loadingTextureColor;
 						t = h3d.mat.Texture.fromColor(color, (color >>> 24) / 255);
-					} else {
+					case TSampler(TCube,_):
 						t = h3d.mat.Texture.defaultCubeTexture();
+					default:
+						throw "Missing texture";
 					}
 				}
 				if( t != null && t.t == null && t.realloc != null ) {

+ 11 - 3
h3d/impl/GlDriver.hx

@@ -344,17 +344,22 @@ class GlDriver extends Driver {
 				name = switch( tt ) {
 				case TSampler(dim,arr):
 					mode = switch( [dim, arr] ) {
-					case [T1D, false]: GL.TEXTURE_1D;
 					case [T2D, false]: GL.TEXTURE_2D;
 					case [T3D, false]: GL.TEXTURE_3D;
 					case [TCube, false]: GL.TEXTURE_CUBE_MAP;
-					case [T1D, true]: GL.TEXTURE_1D_ARRAY;
 					case [T2D, true]: GL.TEXTURE_2D_ARRAY;
+					#if hl
+					case [T1D, false]: GL.TEXTURE_1D;
+					case [T1D, true]: GL.TEXTURE_1D_ARRAY;
 					case [TCube, true]: GL.TEXTURE_CUBE_MAP_ARRAY;
+					#end
 					default: throw "Texture not supported "+tt;
 					}
 					"Textures" + (dim == T2D ? "" : dim.getName().substr(1))+(arr ? "Array" : "");
 				case TRWTexture(dim, arr, chans):
+					#if js
+					throw "Texture not supported "+tt;
+					#else
 					mode = switch( [dim, arr] ) {
 					case [T1D, false]: GL.IMAGE_1D;
 					case [T2D, false]: GL.IMAGE_2D;
@@ -366,6 +371,7 @@ class GlDriver extends Driver {
 					default: throw "Texture not supported "+tt;
 					};
 					"TexturesRW" + (dim == T2D ? "" : dim.getName().substr(1))+chans+(arr ? "Array" : "");
+					#end
 				default: throw "Unsupported texture type "+tt;
 				}
 				index = 0;
@@ -627,6 +633,7 @@ class GlDriver extends Driver {
 
 				if( pt.u == null ) continue;
 
+				#if !js
 				switch( pt.t ) {
 				case TRWTexture(dim,arr,chans):
 					var tdim : hxsl.Ast.TexDimension = t.flags.has(Cube) ? TCube : T2D;
@@ -655,6 +662,7 @@ class GlDriver extends Driver {
 					continue;
 				default:
 				}
+				#end
 
 				var idx = s.kind == Fragment ? curShader.vertex.textures.length + i : i;
 				if( boundTextures[idx] != t.t ) {
@@ -962,7 +970,7 @@ class GlDriver extends Driver {
 	function getBindType( t : h3d.mat.Texture ) {
 		var isArray = t.flags.has(IsArray);
 		if( t.flags.has(Cube) )
-			return isArray ? GL.TEXTURE_CUBE_MAP_ARRAY : GL.TEXTURE_CUBE_MAP;
+			return #if hl isArray ? GL.TEXTURE_CUBE_MAP_ARRAY : #end GL.TEXTURE_CUBE_MAP;
 		return isArray ? GL.TEXTURE_2D_ARRAY : GL.TEXTURE_2D;
 	}
 

+ 3 - 3
hxsl/NXGlslOut.hx

@@ -33,12 +33,12 @@ class NXGlslOut extends hxsl.GlslOut {
 				hasGlobals = true;
 			case Param:
 				switch( v.type ) {
-				case TArray(t, _) if( t.isSampler() ):
+				case TArray(t, _) if( t.isTexture() ):
 					super.initVar(v);
 				default:
 					hasParams = true;
 				}
-			case Output: 
+			case Output:
 				if( !isVertex ) add('layout(location=${outIndex++}) ');
 				super.initVar(v);
 			default:
@@ -55,7 +55,7 @@ class NXGlslOut extends hxsl.GlslOut {
 			if( v.kind == Param ){
 				switch( v.type ) {
 				case TBuffer(_):
-				case TArray(t, _) if( t.isSampler() ):
+				case TArray(t, _) if( t.isTexture() ):
 				default:
 					add("\t");
 					super.initVar(v);