Przeglądaj źródła

support for dx 10 (dx 9 still give shader errors)

ncannasse 8 lat temu
rodzic
commit
935ba5a76c
1 zmienionych plików z 6 dodań i 1 usunięć
  1. 6 1
      h3d/impl/DirectXDriver.hx

+ 6 - 1
h3d/impl/DirectXDriver.hx

@@ -91,6 +91,7 @@ class DirectXDriver extends h3d.impl.Driver {
 	var outputWidth : Int;
 	var outputWidth : Int;
 	var outputHeight : Int;
 	var outputHeight : Int;
 	var hasScissor = false;
 	var hasScissor = false;
+	var shaderVersion : String;
 
 
 	var window : dx.Window;
 	var window : dx.Window;
 	var curTexture : h3d.mat.Texture;
 	var curTexture : h3d.mat.Texture;
@@ -110,6 +111,10 @@ class DirectXDriver extends h3d.impl.Driver {
 		#end
 		#end
 		driver = Driver.create(window, backBufferFormat, options);
 		driver = Driver.create(window, backBufferFormat, options);
 		if( driver == null ) throw "Failed to initialize DirectX driver";
 		if( driver == null ) throw "Failed to initialize DirectX driver";
+		
+		var version = Driver.getSupportedVersion();
+		shaderVersion = if( version < 10 ) "3_0" else if( version < 11 ) "4_0" else "5_0";
+
 		Driver.iaSetPrimitiveTopology(TriangleList);
 		Driver.iaSetPrimitiveTopology(TriangleList);
 		defaultDepthInst = new h3d.mat.DepthBuffer(-1, -1);
 		defaultDepthInst = new h3d.mat.DepthBuffer(-1, -1);
 		for( i in 0...VIEWPORTS_ELTS )
 		for( i in 0...VIEWPORTS_ELTS )
@@ -452,7 +457,7 @@ class DirectXDriver extends h3d.impl.Driver {
 	function compileShader( shader : hxsl.RuntimeShader.RuntimeShaderData, compileOnly = false ) {
 	function compileShader( shader : hxsl.RuntimeShader.RuntimeShaderData, compileOnly = false ) {
 		var h = new hxsl.HlslOut();
 		var h = new hxsl.HlslOut();
 		var source = h.run(shader.data);
 		var source = h.run(shader.data);
-		var bytes = try dx.Driver.compileShader(source, "", "main", shader.vertex?"vs_5_0":"ps_5_0", OptimizationLevel3) catch( err : String ) {
+		var bytes = try dx.Driver.compileShader(source, "", "main", (shader.vertex?"vs_":"ps_")+shaderVersion, OptimizationLevel3) catch( err : String ) {
 			err = ~/^\(([0-9]+),([0-9]+)-([0-9]+)\)/gm.map(err, function(r) {
 			err = ~/^\(([0-9]+),([0-9]+)-([0-9]+)\)/gm.map(err, function(r) {
 				var line = Std.parseInt(r.matched(1));
 				var line = Std.parseInt(r.matched(1));
 				var char = Std.parseInt(r.matched(2));
 				var char = Std.parseInt(r.matched(2));