コード例 #1
0
ファイル: StateUpdater.cs プロジェクト: yunnypuff/Ryujinx
        public ResultCode UpdateMemoryPools(Span <MemoryPoolState> memoryPools)
        {
            PoolMapper mapper = new PoolMapper(_processHandle, _behaviourContext.IsMemoryPoolForceMappingEnabled());

            if (memoryPools.Length * Unsafe.SizeOf <MemoryPoolInParameter>() != _inputHeader.MemoryPoolsSize)
            {
                return(ResultCode.InvalidUpdateInfo);
            }

            foreach (ref MemoryPoolState memoryPool in memoryPools)
            {
                MemoryPoolInParameter parameter = SpanIOHelper.Read <MemoryPoolInParameter>(ref _input);

                ref MemoryPoolOutStatus outStatus = ref SpanIOHelper.GetWriteRef <MemoryPoolOutStatus>(ref _output)[0];

                PoolMapper.UpdateResult updateResult = mapper.Update(ref memoryPool, ref parameter, ref outStatus);

                if (updateResult != PoolMapper.UpdateResult.Success &&
                    updateResult != PoolMapper.UpdateResult.MapError &&
                    updateResult != PoolMapper.UpdateResult.UnmapError)
                {
                    if (updateResult != PoolMapper.UpdateResult.InvalidParameter)
                    {
                        throw new InvalidOperationException($"{updateResult}");
                    }

                    return(ResultCode.InvalidUpdateInfo);
                }
            }
コード例 #2
0
ファイル: StateUpdater.cs プロジェクト: yunnypuff/Ryujinx
        public StateUpdater(ReadOnlyMemory <byte> input, Memory <byte> output, uint processHandle, BehaviourContext behaviourContext)
        {
            _input            = input;
            _inputOrigin      = _input;
            _output           = output;
            _outputOrigin     = _output;
            _processHandle    = processHandle;
            _behaviourContext = behaviourContext;

            _inputHeader = SpanIOHelper.Read <UpdateDataHeader>(ref _input);

            _outputHeader = SpanMemoryManager <UpdateDataHeader> .Cast(_output.Slice(0, Unsafe.SizeOf <UpdateDataHeader>()));

            OutputHeader.Initialize(_behaviourContext.UserRevision);
            _output = _output.Slice(Unsafe.SizeOf <UpdateDataHeader>());
        }
コード例 #3
0
ファイル: StateUpdater.cs プロジェクト: yunnypuff/Ryujinx
        public ResultCode UpdateBehaviourContext()
        {
            BehaviourParameter parameter = SpanIOHelper.Read <BehaviourParameter>(ref _input);

            if (!BehaviourContext.CheckValidRevision(parameter.UserRevision) || parameter.UserRevision != _behaviourContext.UserRevision)
            {
                return(ResultCode.InvalidUpdateInfo);
            }

            _behaviourContext.ClearError();
            _behaviourContext.UpdateFlags(parameter.Flags);

            if (_inputHeader.BehaviourSize != Unsafe.SizeOf <BehaviourParameter>())
            {
                return(ResultCode.InvalidUpdateInfo);
            }

            return(ResultCode.Success);
        }
コード例 #4
0
 /// <summary>
 /// Get a memory instance to a <see cref="EffectResultState"/> at the given <paramref name="index"/>.
 /// </summary>
 /// <param name="index">The index to use.</param>
 /// <returns>A memory instance to a <see cref="EffectResultState"/> at the given <paramref name="index"/>.</returns>
 /// <remarks>The returned <see cref="Memory{EffectResultState}"/> should only be used in the context of processing on the <see cref="Dsp.AudioProcessor"/>.</remarks>
 public Memory <EffectResultState> GetDspStateMemory(int index)
 {
     return(SpanIOHelper.GetMemory(_resultStatesDsp.AsMemory(), index, (uint)_resultStatesDsp.Length));
 }
コード例 #5
0
 /// <summary>
 /// Get a <see cref="Memory{VoiceUpdateState}"/> at the given <paramref name="id"/>.
 /// </summary>
 /// <param name="id">The index to use.</param>
 /// <returns>A <see cref="Memory{VoiceUpdateState}"/> at the given <paramref name="id"/>.</returns>
 /// <remarks>The returned <see cref="Memory{VoiceUpdateState}"/> should only be used in the context of processing on the <see cref="Dsp.AudioProcessor"/>.</remarks>
 public Memory <VoiceUpdateState> GetUpdateStateForDsp(int id)
 {
     return(SpanIOHelper.GetMemory(_voiceUpdateStatesDsp, id, _voiceCount));
 }