Pārlūkot izejas kodu

DX12 shader allow creation of ShaderCache with RootSignature (#1168)

Yuxiao Mao 1 gadu atpakaļ
vecāks
revīzija
2e1d66e7ba
2 mainītis faili ar 6 papildinājumiem un 4 dzēšanām
  1. 5 3
      h3d/impl/DX12Driver.hx
  2. 1 1
      hxsl/CacheFileBuilder.hx

+ 5 - 3
h3d/impl/DX12Driver.hx

@@ -879,12 +879,13 @@ class DX12Driver extends h3d.impl.Driver {
 		return null;
 		return null;
 	}
 	}
 
 
-	function compileSource( sh : hxsl.RuntimeShader.RuntimeShaderData, profile, baseRegister ) {
+	function compileSource( sh : hxsl.RuntimeShader.RuntimeShaderData, profile, baseRegister, rootStr = "" ) {
 		var args = [];
 		var args = [];
 		var out = new hxsl.HlslOut();
 		var out = new hxsl.HlslOut();
 		out.baseRegister = baseRegister;
 		out.baseRegister = baseRegister;
 		if ( sh.code == null ) {
 		if ( sh.code == null ) {
 			sh.code = out.run(sh.data);
 			sh.code = out.run(sh.data);
+			sh.code = rootStr + sh.code;
 		}
 		}
 		var bytes = getBinaryPayload(sh.vertex, sh.code);
 		var bytes = getBinaryPayload(sh.vertex, sh.code);
 		if ( bytes == null ) {
 		if ( bytes == null ) {
@@ -1094,8 +1095,9 @@ class DX12Driver extends h3d.impl.Driver {
 		c.vertexRegisters = res.vertexRegisters;
 		c.vertexRegisters = res.vertexRegisters;
 		c.fragmentRegisters = res.fragmentRegisters;
 		c.fragmentRegisters = res.fragmentRegisters;
 
 
-		var vs = compileSource(shader.vertex, "vs_6_0", 0);
-		var ps = compileSource(shader.fragment, "ps_6_0", res.fragmentRegStart);
+		var rootStr = stringifyRootSignature(res.sign, "ROOT_SIGNATURE", res.params);
+		var vs = compileSource(shader.vertex, "vs_6_0", 0, rootStr);
+		var ps = compileSource(shader.fragment, "ps_6_0", res.fragmentRegStart, rootStr);
 
 
 		var signSize = 0;
 		var signSize = 0;
 		var signBytes = Driver.serializeRootSignature(res.sign, 1, signSize);
 		var signBytes = Driver.serializeRootSignature(res.sign, 1, signSize);

+ 1 - 1
hxsl/CacheFileBuilder.hx

@@ -211,7 +211,7 @@ class CacheFileBuilder {
 			var data = sys.io.File.getBytes(tmpOut);
 			var data = sys.io.File.getBytes(tmpOut);
 			sys.FileSystem.deleteFile(tmpSrc);
 			sys.FileSystem.deleteFile(tmpSrc);
 			sys.FileSystem.deleteFile(tmpOut);
 			sys.FileSystem.deleteFile(tmpOut);
-			return { code : null, bytes : data };
+			return { code : code, bytes : data };
 			#else
 			#else
 			throw "-lib hldx and -D dx12 are required to generate binaries for XBoxSeries";
 			throw "-lib hldx and -D dx12 are required to generate binaries for XBoxSeries";
 			#end
 			#end