diff --git a/renderdoc/driver/d3d12/d3d12_serialise.cpp b/renderdoc/driver/d3d12/d3d12_serialise.cpp index 51ba44905..5b077cec0 100644 --- a/renderdoc/driver/d3d12/d3d12_serialise.cpp +++ b/renderdoc/driver/d3d12/d3d12_serialise.cpp @@ -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); } diff --git a/util/test/demos/d3d12/d3d12_parameter_zoo.cpp b/util/test/demos/d3d12/d3d12_parameter_zoo.cpp index f528f5a37..024745bea 100644 --- a/util/test/demos/d3d12/d3d12_parameter_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_parameter_zoo.cpp @@ -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