public ReadOnlySpan <T> Read <T>(int size) where T : unmanaged { ReadOnlySpan <byte> data = _memory.GetSpan(Position, size); Position += (uint)size; return(MemoryMarshal.Cast <byte, T>(data)); }
private NvInternalResult Submit(Span <byte> arguments) { SubmitArguments submitHeader = GetSpanAndSkip <SubmitArguments>(ref arguments, 1)[0]; Span <CommandBuffer> commandBuffers = GetSpanAndSkip <CommandBuffer>(ref arguments, submitHeader.CmdBufsCount); Span <Reloc> relocs = GetSpanAndSkip <Reloc>(ref arguments, submitHeader.RelocsCount); Span <uint> relocShifts = GetSpanAndSkip <uint>(ref arguments, submitHeader.RelocsCount); Span <SyncptIncr> syncptIncrs = GetSpanAndSkip <SyncptIncr>(ref arguments, submitHeader.SyncptIncrsCount); Span <SyncptIncr> waitChecks = GetSpanAndSkip <SyncptIncr>(ref arguments, submitHeader.SyncptIncrsCount); // ? Span <Fence> fences = GetSpanAndSkip <Fence>(ref arguments, submitHeader.FencesCount); lock (_device) { for (int i = 0; i < syncptIncrs.Length; i++) { SyncptIncr syncptIncr = syncptIncrs[i]; uint id = syncptIncr.Id; fences[i].Id = id; fences[i].Thresh = Context.Device.System.HostSyncpoint.IncrementSyncpointMax(id, syncptIncr.Incrs); } foreach (CommandBuffer commandBuffer in commandBuffers) { NvMapHandle map = NvMapDeviceFile.GetMapFromHandle(Owner, commandBuffer.Mem); var data = _memory.GetSpan(map.Address + commandBuffer.Offset, commandBuffer.WordsCount * 4); _device.Host1x.Submit(MemoryMarshal.Cast <byte, int>(data)); } } fences[0].Thresh = Context.Device.System.HostSyncpoint.IncrementSyncpointMax(fences[0].Id, 1); Span <int> tmpCmdBuff = stackalloc int[1]; tmpCmdBuff[0] = (4 << 28) | (int)fences[0].Id; _device.Host1x.Submit(tmpCmdBuff); return(NvInternalResult.Success); }
private static List <AddrInfoSerialized> DeserializeAddrInfos(IVirtualMemoryManager memory, ulong address, ulong size) { List <AddrInfoSerialized> result = new List <AddrInfoSerialized>(); ReadOnlySpan <byte> data = memory.GetSpan(address, (int)size); while (!data.IsEmpty) { AddrInfoSerialized info = AddrInfoSerialized.Read(data, out data); if (info == null) { break; } result.Add(info); } return(result); }
/// <inheritdoc/> protected override ReadOnlySpan <byte> GetSpan(ulong va, int size) { return(_cpuMemory.GetSpan(va, size)); }