Quellcode durchsuchen

[DX12] Clean CreateSRV code

TothBenoit vor 1 Jahr
Ursprung
Commit
fc4d89820e
1 geänderte Dateien mit 31 neuen und 19 gelöschten Zeilen
  1. 31 19
      h3d/impl/DX12Driver.hx

+ 31 - 19
h3d/impl/DX12Driver.hx

@@ -1710,18 +1710,22 @@ class DX12Driver extends h3d.impl.Driver {
 	var srvTail : Int = 0;
 	var srvTail : Int = 0;
 	var srvThreadLaunched : Bool = false;
 	var srvThreadLaunched : Bool = false;
 
 
+	inline function computeSRVBufferDistance() : Int {
+		return (srvHead + (~(srvTail - 1 ) & 0xFF)) & 0xFF;
+	}
+
 	function runThread() {
 	function runThread() {
 		while(true) {
 		while(true) {
 			// Check if ring buffer is empty
 			// Check if ring buffer is empty
-			var dist = (srvHead + (~(srvTail - 1 ) & 0xFF)) & 0xFF;
-			if ( dist != 1) {
-				var args = srvRingBuf[(srvTail + 1) & 0xFF];
+			if ( computeSRVBufferDistance() != 1 ) {
+				var index = (srvTail + 1) & 0xFF;
+				var args = srvRingBuf[index];
 				Driver.createShaderResourceView(args.res, args.resourceDesc, args.srvAddr);
 				Driver.createShaderResourceView(args.res, args.resourceDesc, args.srvAddr);
 				Driver.createSampler(args.samplerDesc, args.samplerAddr);
 				Driver.createSampler(args.samplerDesc, args.samplerAddr);
-				srvTail = (srvTail + 1) & 0xFF;
+				srvTail = index;
 			}
 			}
 			else
 			else
-				Sys.sleep(0.000001);
+				Sys.sleep(0);
 		}
 		}
 	}
 	}
 
 
@@ -1735,29 +1739,31 @@ class DX12Driver extends h3d.impl.Driver {
 		}
 		}
 
 
 		// Check if ring buffer is full
 		// Check if ring buffer is full
-		while ( ((srvHead + (~(srvTail - 1) & 0xFF)) & 0xFF) == 0 ){};
+		while ( computeSRVBufferDistance() == 0 ) {};
 
 
 		var srvArgs = srvRingBuf[srvHead];
 		var srvArgs = srvRingBuf[srvHead];
 
 
 		if( t.flags.has(Cube) ) {
 		if( t.flags.has(Cube) ) {
 			var desc = unsafeCastTo(srvArgs.resourceDesc, TexCubeSRV);
 			var desc = unsafeCastTo(srvArgs.resourceDesc, TexCubeSRV);
-			desc.dimension = TEXTURECUBE;
-			desc.mipLevels = -1;
 			desc.format = t.t.format;
 			desc.format = t.t.format;
-			desc.mostDetailedMip = t.startingMip;
+			desc.dimension = TEXTURECUBE;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
+			desc.mostDetailedMip = t.startingMip;
+			desc.mipLevels = -1;
+			desc.resourceMinLODClamp = 0;
 		} else if( t.flags.has(IsArray) ) {
 		} else if( t.flags.has(IsArray) ) {
 			var desc = unsafeCastTo(srvArgs.resourceDesc, Tex2DArraySRV);
 			var desc = unsafeCastTo(srvArgs.resourceDesc, Tex2DArraySRV);
+			desc.format = t.t.format;
 			desc.dimension = TEXTURE2DARRAY;
 			desc.dimension = TEXTURE2DARRAY;
+			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
+			desc.mostDetailedMip = t.startingMip;
 			desc.mipLevels = -1;
 			desc.mipLevels = -1;
-			desc.format = t.t.format;
+			desc.firstArraySlice = 0;
 			desc.arraySize = t.layerCount;
 			desc.arraySize = t.layerCount;
-			desc.mostDetailedMip = t.startingMip;
-			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
+			desc.planeSlice = 0;
+			desc.resourceMinLODClamp = 0;
 		} else if ( t.isDepth() ) {
 		} else if ( t.isDepth() ) {
 			var desc = srvArgs.resourceDesc;
 			var desc = srvArgs.resourceDesc;
-			desc.dimension = TEXTURE2D;
-			desc.mipLevels = -1;
 			switch (t.format) {
 			switch (t.format) {
 				case Depth16:
 				case Depth16:
 					desc.format = R16_UNORM;
 					desc.format = R16_UNORM;
@@ -1768,15 +1774,21 @@ class DX12Driver extends h3d.impl.Driver {
 				default:
 				default:
 					throw "Unsupported depth format "+ t.format;
 					throw "Unsupported depth format "+ t.format;
 			}
 			}
-			desc.mostDetailedMip = t.startingMip;
+			desc.dimension = TEXTURE2D;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
+			desc.mostDetailedMip = t.startingMip;
+			desc.mipLevels = -1;
+			desc.planeSlice = 0;
+			desc.resourceMinLODClamp = 0;
 		} else {
 		} else {
 			var desc = srvArgs.resourceDesc;
 			var desc = srvArgs.resourceDesc;
-			desc.dimension = TEXTURE2D;
-			desc.mipLevels = -1;
 			desc.format = t.t.format;
 			desc.format = t.t.format;
-			desc.mostDetailedMip = t.startingMip;
+			desc.dimension = TEXTURE2D;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
 			desc.shader4ComponentMapping = ShaderComponentMapping.DEFAULT;
+			desc.mostDetailedMip = t.startingMip;
+			desc.mipLevels = -1;
+			desc.planeSlice = 0;
+			desc.resourceMinLODClamp = 0;
 		}
 		}
 
 
 		var desc = srvArgs.samplerDesc;
 		var desc = srvArgs.samplerDesc;
@@ -2334,7 +2346,7 @@ class DX12Driver extends h3d.impl.Driver {
 	}
 	}
 
 
 	function flushSRV() {
 	function flushSRV() {
-		while ( (srvHead + (~(srvTail - 1 ) & 0xFF)) & 0xFF != 1 ) {};
+		while ( computeSRVBufferDistance() != 1 ) {};
 	}
 	}
 
 
 	function flushFrame( onResize : Bool = false ) {
 	function flushFrame( onResize : Bool = false ) {