aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.GAL/Multithreading/Commands/Buffer/BufferSetDataCommand.cs
blob: dcb8c2f21e52f838dafc9a2429b5d3bb1a2fe74f (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 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);
        }
    }
}