From 66a9e00f3e165b76dc365f513512311dd144c975 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 21 Apr 2020 16:27:48 +0100 Subject: [PATCH] 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. --- renderdoc/driver/d3d12/d3d12_serialise.cpp | 9 ++++++++- util/test/demos/d3d12/d3d12_parameter_zoo.cpp | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) 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