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