Don't serialise D3D12_STREAM_OUTPUT_DESC.pBufferStrides if NumEntries==0

* This is true even if NumStrides is a high number, it's entirely ignored.
This commit is contained in:
baldurk
2020-04-21 17:09:33 +01:00
parent c6f43e81bf
commit 66a9e00f3e
2 changed files with 16 additions and 3 deletions
+8 -1
View File
@@ -514,7 +514,14 @@ void DoSerialise(SerialiserType &ser, D3D12_STREAM_OUTPUT_DESC &el)
{
SERIALISE_MEMBER_ARRAY(pSODeclaration, NumEntries);
SERIALISE_MEMBER(NumEntries);
SERIALISE_MEMBER_ARRAY(pBufferStrides, NumStrides);
if(el.NumEntries > 0)
{
SERIALISE_MEMBER_ARRAY(pBufferStrides, NumStrides);
}
else
{
SERIALISE_MEMBER_ARRAY_EMPTY(pBufferStrides);
}
SERIALISE_MEMBER(NumStrides);
SERIALISE_MEMBER(RasterizedStream);
}
@@ -55,10 +55,16 @@ float4 main() : SV_Target0
ID3D12RootSignaturePtr sig = MakeSig({});
ID3D12PipelineStatePtr pso = MakePSO().RootSig(sig).InputLayout().VS(vsblob).PS(psblob);
ResourceBarrier(vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
D3D12PSOCreator psoCreator = MakePSO().RootSig(sig).InputLayout().VS(vsblob).PS(psblob);
psoCreator.GraphicsDesc.StreamOutput.NumEntries = 0;
psoCreator.GraphicsDesc.StreamOutput.pSODeclaration = (D3D12_SO_DECLARATION_ENTRY *)0x3456;
psoCreator.GraphicsDesc.StreamOutput.NumStrides = 0xcccccccc;
psoCreator.GraphicsDesc.StreamOutput.pBufferStrides = (UINT *)0x1234;
ID3D12PipelineStatePtr pso = psoCreator;
ID3D12Device4Ptr dev4 = dev;
// if D3D12.4 (??) is available, use different interfaces