protected void BeginChunk(BinaryReader br) { flags = (ChunkFlags)br.ReadUInt32(); Debug.Assert(flags != 0); chunkID = (uint)(flags & ChunkFlags.ChunkIndexMask); chunkType = (D3D11Chunk)chunkID; chunkFlags = SDChunkFlags.NoFlags; if ((flags & ChunkFlags.ChunkCallstack) != 0) { uint numFrames = br.ReadUInt32(); if (numFrames < 4096) { chunkFlags |= SDChunkFlags.HasCallstack; callstack = new ulong[numFrames]; br.Read(callstack, 0, callstack.Length); } else { Console.WriteLine($"Read invalid number of callstack frames:{numFrames}"); br.BaseStream.Position += numFrames * sizeof(ulong); } } if ((flags & ChunkFlags.ChunkThreadID) != 0) { threadID = br.ReadUInt64(); } else { threadID = 0; } if ((flags & ChunkFlags.ChunkDuration) != 0) { durationMicro = br.ReadInt64(); } else { durationMicro = -1; } if ((flags & ChunkFlags.ChunkTimestamp) != 0) { timestampMicro = br.ReadUInt64(); } else { timestampMicro = 0; } if ((flags & ChunkFlags.Chunk64BitSize) != 0) { length = br.ReadUInt64(); } else { length = br.ReadUInt32(); } headerLength = br.BaseStream.Position - offset; }
private IChunk CreateChunkByMeta(ChunkMeta chunkMeta) { SystemChunk systemChunk = (SystemChunk)chunkMeta.chunkID; D3D11Chunk d3D11Chunk = (D3D11Chunk)chunkMeta.chunkID; if (chunkMeta.chunkID < (uint)SystemChunk.FirstDriverChunk) { switch (systemChunk) { case SystemChunk.DriverInit: return(new Chunk_DriverInit(this)); case SystemChunk.InitialContents: return(new Chunk_InitialContents(this)); default: return(new ChunkBase(this)); } } else { switch (d3D11Chunk) { case D3D11Chunk.CreateTexture2D: return(new Chunk_CreateTexture2D(this)); case D3D11Chunk.CreateTexture2D1: return(new Chunk_CreateTexture2D1(this)); case D3D11Chunk.SetResourceName: return(new Chunk_SetResourceName(this)); case D3D11Chunk.CreateSwapBuffer: return(new Chunk_CreateSwapBuffer(this)); case D3D11Chunk.CreateRenderTargetView: return(new Chunk_CreateRenderTargetView(this)); case D3D11Chunk.CreateShaderResourceView: return(new Chunk_CreateShaderResourceView(this)); case D3D11Chunk.CreateDepthStencilView: return(new Chunk_CreateDepthStencilView(this)); case D3D11Chunk.UpdateSubresource: return(new Chunk_UpdateSubresource(this)); case D3D11Chunk.UpdateSubresource1: return(new Chunk_UpdateSubresource1(this)); case D3D11Chunk.CreateBuffer: return(new Chunk_CreateBuffer(this)); case D3D11Chunk.IASetVertexBuffers: return(new Chunk_IASetVertexBuffers(this)); case D3D11Chunk.IASetIndexBuffer: return(new Chunk_IASetIndexBuffer(this)); default: return(new ChunkBase(this)); } } }