aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Buffer/BufferSetDataCommand.cs
blob: 592699e474a4f35af5a87c91af53e7ce02534977 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using Ryujinx.Graphics.GAL.Multithreading.Model;
using System;

namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Buffer
{
    struct BufferSetDataCommand : IGALCommand, IGALCommand<BufferSetDataCommand>
    {
        public readonly CommandType CommandType => CommandType.BufferSetData;
        private BufferHandle _buffer;
        private int _offset;
        private SpanRef<byte> _data;

        public void Set(BufferHandle buffer, int offset, SpanRef<byte> data)
        {
            _buffer = buffer;
            _offset = offset;
            _data = data;
        }

        public static void Run(ref BufferSetDataCommand command, ThreadedRenderer threaded, IRenderer renderer)
        {
            ReadOnlySpan<byte> data = command._data.Get(threaded);
            renderer.SetBufferData(threaded.Buffers.MapBuffer(command._buffer), command._offset, data);
            command._data.Dispose(threaded);
        }
    }
}