Ver código fonte

Fix some issues on DX12: increase RootParameterConstants size, fix root signature size computation, fix instance buffer dispose.

clementlandrin 2 anos atrás
pai
commit
dd9c4b1b68
1 arquivos alterados com 10 adições e 3 exclusões
  1. 10 3
      h3d/impl/DX12Driver.hx

+ 10 - 3
h3d/impl/DX12Driver.hx

@@ -817,7 +817,7 @@ class DX12Driver extends h3d.impl.Driver {
 
 
 	function compileShader( shader : hxsl.RuntimeShader ) : CompiledShader {
 	function compileShader( shader : hxsl.RuntimeShader ) : CompiledShader {
 
 
-		var params = hl.CArray.alloc(RootParameterConstants,8);
+		var params = hl.CArray.alloc(RootParameterConstants,16);
 		var paramsCount = 0, regCount = 0;
 		var paramsCount = 0, regCount = 0;
 		var texDescs = [];
 		var texDescs = [];
 		var vertexParamsCBV = false;
 		var vertexParamsCBV = false;
@@ -904,9 +904,15 @@ class DX12Driver extends h3d.impl.Driver {
 			return regs;
 			return regs;
 		}
 		}
 
 
+		// Costs in units:
+		// Descriptor Tables cost 1 each
+		// Root CBVs cost 2 each
+		// Root SRVs cost 2 each
+		// Root UAVs cost 2 each
+		// Root Constants cost 1 per 32-bit value
 		function calcSize( sh : hxsl.RuntimeShader.RuntimeShaderData ) {
 		function calcSize( sh : hxsl.RuntimeShader.RuntimeShaderData ) {
 			var s = (sh.globalsSize + sh.paramsSize) << 2;
 			var s = (sh.globalsSize + sh.paramsSize) << 2;
-			if( sh.texturesCount > 0 ) s += 2;
+			s += sh.texturesCount << 1;
 			return s;
 			return s;
 		}
 		}
 
 
@@ -1089,7 +1095,8 @@ class DX12Driver extends h3d.impl.Driver {
 	}
 	}
 
 
 	override function disposeInstanceBuffer(b:InstanceBuffer) {
 	override function disposeInstanceBuffer(b:InstanceBuffer) {
-		disposeResource(b.data);
+		frame.toRelease.push((b.data:GpuResource));
+		// disposeResource(b.data);
 		b.data = null;
 		b.data = null;
 	}
 	}