Пример #1
0
        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;
        }
Пример #2
0
        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));
                }
            }
        }