in renderdoc/driver/d3d11/d3d11_context.cpp [713:1027]
bool WrappedID3D11DeviceContext::ProcessChunk(ReadSerialiser &ser, D3D11Chunk chunk)
{
SERIALISE_ELEMENT(m_CurContextId).Named("Context"_lit).TypedAs("ID3D11DeviceContext *"_lit).Unimportant();
SERIALISE_CHECK_READ_ERRORS();
m_AddedAction = false;
bool ret = false;
switch(chunk)
{
case D3D11Chunk::IASetInputLayout: ret = Serialise_IASetInputLayout(ser, 0x0); break;
case D3D11Chunk::IASetVertexBuffers:
ret = Serialise_IASetVertexBuffers(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::IASetIndexBuffer:
ret = Serialise_IASetIndexBuffer(ser, 0, DXGI_FORMAT_UNKNOWN, 0);
break;
case D3D11Chunk::IASetPrimitiveTopology:
ret = Serialise_IASetPrimitiveTopology(ser, D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED);
break;
case D3D11Chunk::VSSetConstantBuffers:
ret = Serialise_VSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::VSSetShaderResources:
ret = Serialise_VSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::VSSetSamplers: ret = Serialise_VSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::VSSetShader: ret = Serialise_VSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::HSSetConstantBuffers:
ret = Serialise_HSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::HSSetShaderResources:
ret = Serialise_HSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::HSSetSamplers: ret = Serialise_HSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::HSSetShader: ret = Serialise_HSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::DSSetConstantBuffers:
ret = Serialise_DSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::DSSetShaderResources:
ret = Serialise_DSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::DSSetSamplers: ret = Serialise_DSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::DSSetShader: ret = Serialise_DSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::GSSetConstantBuffers:
ret = Serialise_GSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::GSSetShaderResources:
ret = Serialise_GSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::GSSetSamplers: ret = Serialise_GSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::GSSetShader: ret = Serialise_GSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::SOSetTargets: ret = Serialise_SOSetTargets(ser, 0, 0x0, 0x0); break;
case D3D11Chunk::PSSetConstantBuffers:
ret = Serialise_PSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::PSSetShaderResources:
ret = Serialise_PSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::PSSetSamplers: ret = Serialise_PSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::PSSetShader: ret = Serialise_PSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::CSSetConstantBuffers:
ret = Serialise_CSSetConstantBuffers(ser, 0, 0, 0x0);
break;
case D3D11Chunk::CSSetShaderResources:
ret = Serialise_CSSetShaderResources(ser, 0, 0, 0x0);
break;
case D3D11Chunk::CSSetUnorderedAccessViews:
ret = Serialise_CSSetUnorderedAccessViews(ser, 0, 0, 0x0, 0x0);
break;
case D3D11Chunk::CSSetSamplers: ret = Serialise_CSSetSamplers(ser, 0, 0, 0x0); break;
case D3D11Chunk::CSSetShader: ret = Serialise_CSSetShader(ser, 0x0, 0x0, 0); break;
case D3D11Chunk::RSSetViewports: ret = Serialise_RSSetViewports(ser, 0, 0x0); break;
case D3D11Chunk::RSSetScissorRects: ret = Serialise_RSSetScissorRects(ser, 0, 0x0); break;
case D3D11Chunk::RSSetState: ret = Serialise_RSSetState(ser, 0x0); break;
case D3D11Chunk::OMSetRenderTargets:
ret = Serialise_OMSetRenderTargets(ser, 0, 0x0, 0x0);
break;
case D3D11Chunk::OMSetRenderTargetsAndUnorderedAccessViews:
ret = Serialise_OMSetRenderTargetsAndUnorderedAccessViews(ser, 0, 0x0, 0x0, 0, 0, 0x0, 0x0);
break;
case D3D11Chunk::OMSetBlendState:
ret = Serialise_OMSetBlendState(ser, 0x0, (FLOAT *)0x0, 0);
break;
case D3D11Chunk::OMSetDepthStencilState:
ret = Serialise_OMSetDepthStencilState(ser, 0x0, 0);
break;
case D3D11Chunk::DrawIndexedInstanced:
ret = Serialise_DrawIndexedInstanced(ser, 0, 0, 0, 0, 0);
break;
case D3D11Chunk::DrawInstanced: ret = Serialise_DrawInstanced(ser, 0, 0, 0, 0); break;
case D3D11Chunk::DrawIndexed: ret = Serialise_DrawIndexed(ser, 0, 0, 0); break;
case D3D11Chunk::Draw: ret = Serialise_Draw(ser, 0, 0); break;
case D3D11Chunk::DrawAuto: ret = Serialise_DrawAuto(ser); break;
case D3D11Chunk::DrawIndexedInstancedIndirect:
ret = Serialise_DrawIndexedInstancedIndirect(ser, 0x0, 0);
break;
case D3D11Chunk::DrawInstancedIndirect:
ret = Serialise_DrawInstancedIndirect(ser, 0x0, 0);
break;
case D3D11Chunk::Map: ret = Serialise_Map(ser, 0, 0, (D3D11_MAP)0, 0, 0); break;
case D3D11Chunk::Unmap: ret = Serialise_Unmap(ser, 0, 0); break;
case D3D11Chunk::CopySubresourceRegion:
ret = Serialise_CopySubresourceRegion(ser, 0x0, 0, 0, 0, 0, 0x0, 0, 0x0);
break;
case D3D11Chunk::CopyResource: ret = Serialise_CopyResource(ser, 0x0, 0x0); break;
case D3D11Chunk::UpdateSubresource:
ret = Serialise_UpdateSubresource(ser, 0x0, 0, 0x0, 0x0, 0, 0);
break;
case D3D11Chunk::CopyStructureCount:
ret = Serialise_CopyStructureCount(ser, 0x0, 0, 0x0);
break;
case D3D11Chunk::ResolveSubresource:
ret = Serialise_ResolveSubresource(ser, 0x0, 0, 0x0, 0, DXGI_FORMAT_UNKNOWN);
break;
case D3D11Chunk::GenerateMips: ret = Serialise_GenerateMips(ser, 0x0); break;
case D3D11Chunk::ClearDepthStencilView:
ret = Serialise_ClearDepthStencilView(ser, 0x0, 0, 0.0f, 0);
break;
case D3D11Chunk::ClearRenderTargetView:
ret = Serialise_ClearRenderTargetView(ser, 0x0, (FLOAT *)0x0);
break;
case D3D11Chunk::ClearUnorderedAccessViewUint:
ret = Serialise_ClearUnorderedAccessViewUint(ser, 0x0, (UINT *)0x0);
break;
case D3D11Chunk::ClearUnorderedAccessViewFloat:
ret = Serialise_ClearUnorderedAccessViewFloat(ser, 0x0, (FLOAT *)0x0);
break;
case D3D11Chunk::ClearState: ret = Serialise_ClearState(ser); break;
case D3D11Chunk::ExecuteCommandList: ret = Serialise_ExecuteCommandList(ser, 0x0, 0); break;
case D3D11Chunk::Dispatch: ret = Serialise_Dispatch(ser, 0, 0, 0); break;
case D3D11Chunk::DispatchIndirect: ret = Serialise_DispatchIndirect(ser, 0x0, 0); break;
case D3D11Chunk::FinishCommandList: ret = Serialise_FinishCommandList(ser, 0, 0x0); break;
case D3D11Chunk::Flush: ret = Serialise_Flush(ser); break;
case D3D11Chunk::SetPredication: ret = Serialise_SetPredication(ser, 0x0, 0x0); break;
case D3D11Chunk::SetResourceMinLOD: ret = Serialise_SetResourceMinLOD(ser, 0x0, 0); break;
case D3D11Chunk::Begin: ret = Serialise_Begin(ser, 0x0); break;
case D3D11Chunk::End: ret = Serialise_End(ser, 0x0); break;
case D3D11Chunk::CopySubresourceRegion1:
ret = Serialise_CopySubresourceRegion1(ser, 0x0, 0, 0, 0, 0, 0x0, 0, 0x0, 0);
break;
case D3D11Chunk::UpdateSubresource1:
ret = Serialise_UpdateSubresource1(ser, 0x0, 0, 0x0, 0x0, 0, 0, 0);
break;
case D3D11Chunk::ClearView: ret = Serialise_ClearView(ser, 0x0, 0x0, 0x0, 0); break;
case D3D11Chunk::VSSetConstantBuffers1:
ret = Serialise_VSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::HSSetConstantBuffers1:
ret = Serialise_HSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::DSSetConstantBuffers1:
ret = Serialise_DSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::GSSetConstantBuffers1:
ret = Serialise_GSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::PSSetConstantBuffers1:
ret = Serialise_PSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::CSSetConstantBuffers1:
ret = Serialise_CSSetConstantBuffers1(ser, 0, 0, 0x0, 0x0, 0x0);
break;
case D3D11Chunk::PushMarker: ret = Serialise_PushMarker(ser, 0, L""); break;
case D3D11Chunk::SetMarker: ret = Serialise_SetMarker(ser, 0, L""); break;
case D3D11Chunk::PopMarker: ret = Serialise_PopMarker(ser); break;
case D3D11Chunk::DiscardResource: ret = Serialise_DiscardResource(ser, NULL); break;
case D3D11Chunk::DiscardView: ret = Serialise_DiscardView(ser, NULL); break;
case D3D11Chunk::DiscardView1: ret = Serialise_DiscardView1(ser, NULL, NULL, 0); break;
case D3D11Chunk::PostExecuteCommandList:
ret = Serialise_PostExecuteCommandList(ser, NULL, FALSE);
break;
case D3D11Chunk::PostFinishCommandListSet:
ret = Serialise_PostFinishCommandListSet(ser, NULL);
break;
case D3D11Chunk::SwapDeviceContextState:
ret = Serialise_SwapDeviceContextState(ser, NULL, NULL);
break;
case D3D11Chunk::SwapchainPresent: ret = Serialise_Present(ser, 0, 0); break;
// in order to get a warning if we miss a case, we explicitly handle the device creation chunks
// here. If we actually encounter one it's an error (we shouldn't see these inside the captured
// frame itself)
case D3D11Chunk::DeviceInitialisation:
case D3D11Chunk::SetResourceName:
case D3D11Chunk::CreateSwapBuffer:
case D3D11Chunk::CreateTexture1D:
case D3D11Chunk::CreateTexture2D:
case D3D11Chunk::CreateTexture2D1:
case D3D11Chunk::CreateTexture3D:
case D3D11Chunk::CreateTexture3D1:
case D3D11Chunk::CreateBuffer:
case D3D11Chunk::CreateVertexShader:
case D3D11Chunk::CreateHullShader:
case D3D11Chunk::CreateDomainShader:
case D3D11Chunk::CreateGeometryShader:
case D3D11Chunk::CreateGeometryShaderWithStreamOutput:
case D3D11Chunk::CreatePixelShader:
case D3D11Chunk::CreateComputeShader:
case D3D11Chunk::GetClassInstance:
case D3D11Chunk::CreateClassInstance:
case D3D11Chunk::CreateClassLinkage:
case D3D11Chunk::CreateShaderResourceView:
case D3D11Chunk::CreateShaderResourceView1:
case D3D11Chunk::CreateRenderTargetView:
case D3D11Chunk::CreateRenderTargetView1:
case D3D11Chunk::CreateDepthStencilView:
case D3D11Chunk::CreateUnorderedAccessView:
case D3D11Chunk::CreateUnorderedAccessView1:
case D3D11Chunk::CreateInputLayout:
case D3D11Chunk::CreateBlendState:
case D3D11Chunk::CreateBlendState1:
case D3D11Chunk::CreateDepthStencilState:
case D3D11Chunk::CreateRasterizerState:
case D3D11Chunk::CreateRasterizerState1:
case D3D11Chunk::CreateRasterizerState2:
case D3D11Chunk::CreateSamplerState:
case D3D11Chunk::CreateQuery:
case D3D11Chunk::CreateQuery1:
case D3D11Chunk::CreatePredicate:
case D3D11Chunk::CreateCounter:
case D3D11Chunk::CreateDeferredContext:
case D3D11Chunk::SetExceptionMode:
case D3D11Chunk::ExternalDXGIResource:
case D3D11Chunk::OpenSharedResource:
case D3D11Chunk::OpenSharedResource1:
case D3D11Chunk::OpenSharedResourceByName:
case D3D11Chunk::SetShaderDebugPath:
case D3D11Chunk::SetShaderExtUAV:
RDCERR("Unexpected chunk while processing frame: %s", ToStr(chunk).c_str());
return false;
// no explicit default so that we have compiler warnings if a chunk isn't explicitly handled.
case D3D11Chunk::Max: break;
}
{
SystemChunk system = (SystemChunk)chunk;
if(system == SystemChunk::CaptureEnd)
{
if(IsLoading(m_State) && m_LastChunk != D3D11Chunk::SwapchainPresent)
{
AddEvent();
ActionDescription action;
action.customName = "End of Capture";
action.flags |= ActionFlags::Present;
action.copyDestination = m_pDevice->GetBackbufferResourceID();
AddAction(action);
}
ret = true;
}
else if(!ret)
{
RDCERR("Unrecognised Chunk type %d", chunk);
return false;
}
}
if(IsLoading(m_State) && m_CurEventID > 0)
{
if(chunk == D3D11Chunk::SetMarker)
{
// no push/pop necessary
}
else if(chunk == D3D11Chunk::PushMarker)
{
// push down the action stack to the latest action
m_ActionStack.push_back(&m_ActionStack.back()->children.back());
}
else if(chunk == D3D11Chunk::PopMarker)
{
// refuse to pop off further than the root action (mismatched begin/end events e.g.)
if(m_ActionStack.size() > 1)
m_ActionStack.pop_back();
}
if(!m_AddedAction)
AddEvent();
}
m_AddedAction = false;
return ret;
}