From edc0d1d46f4400cce5519806d5d37318667dcc09 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 13 Jan 2021 15:54:10 +0000 Subject: [PATCH] Ignore stream-out parameters if no stream-out is enabled on D3D12 --- renderdoc/driver/d3d12/d3d12_device_wrap2.cpp | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp index bac44e518..773acb8d4 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp @@ -132,22 +132,25 @@ bool WrappedID3D12Device::Serialise_CreatePipelineState(SerialiserType &ser, memcpy((void *)wrapped->graphics->StreamOutput.pSODeclaration, Descriptor.StreamOutput.pSODeclaration, sizeof(D3D12_SO_DECLARATION_ENTRY) * wrapped->graphics->StreamOutput.NumEntries); - } - else - { - wrapped->graphics->StreamOutput.pSODeclaration = NULL; - } - if(wrapped->graphics->StreamOutput.NumStrides) - { - wrapped->graphics->StreamOutput.pBufferStrides = - new UINT[wrapped->graphics->StreamOutput.NumStrides]; - memcpy((void *)wrapped->graphics->StreamOutput.pBufferStrides, - Descriptor.StreamOutput.pBufferStrides, - sizeof(UINT) * wrapped->graphics->StreamOutput.NumStrides); + if(wrapped->graphics->StreamOutput.NumStrides) + { + wrapped->graphics->StreamOutput.pBufferStrides = + new UINT[wrapped->graphics->StreamOutput.NumStrides]; + memcpy((void *)wrapped->graphics->StreamOutput.pBufferStrides, + Descriptor.StreamOutput.pBufferStrides, + sizeof(UINT) * wrapped->graphics->StreamOutput.NumStrides); + } + else + { + wrapped->graphics->StreamOutput.pBufferStrides = NULL; + } } else { + wrapped->graphics->StreamOutput.NumEntries = 0; + wrapped->graphics->StreamOutput.NumStrides = 0; + wrapped->graphics->StreamOutput.pSODeclaration = NULL; wrapped->graphics->StreamOutput.pBufferStrides = NULL; } @@ -305,22 +308,26 @@ HRESULT WrappedID3D12Device::CreatePipelineState(const D3D12_PIPELINE_STATE_STRE memcpy((void *)wrapped->graphics->StreamOutput.pSODeclaration, expandedDesc.StreamOutput.pSODeclaration, sizeof(D3D12_SO_DECLARATION_ENTRY) * wrapped->graphics->StreamOutput.NumEntries); - } - else - { - wrapped->graphics->StreamOutput.pSODeclaration = NULL; - } - if(wrapped->graphics->StreamOutput.NumStrides) - { - wrapped->graphics->StreamOutput.pBufferStrides = - new UINT[wrapped->graphics->StreamOutput.NumStrides]; - memcpy((void *)wrapped->graphics->StreamOutput.pBufferStrides, - expandedDesc.StreamOutput.pBufferStrides, - sizeof(UINT) * wrapped->graphics->StreamOutput.NumStrides); + if(wrapped->graphics->StreamOutput.NumStrides) + { + wrapped->graphics->StreamOutput.pBufferStrides = + new UINT[wrapped->graphics->StreamOutput.NumStrides]; + memcpy((void *)wrapped->graphics->StreamOutput.pBufferStrides, + expandedDesc.StreamOutput.pBufferStrides, + sizeof(UINT) * wrapped->graphics->StreamOutput.NumStrides); + } + else + { + wrapped->graphics->StreamOutput.NumStrides = 0; + wrapped->graphics->StreamOutput.pBufferStrides = NULL; + } } else { + wrapped->graphics->StreamOutput.NumStrides = 0; + wrapped->graphics->StreamOutput.NumEntries = 0; + wrapped->graphics->StreamOutput.pSODeclaration = NULL; wrapped->graphics->StreamOutput.pBufferStrides = NULL; }