/ src / Ryujinx.Graphics.Host1x / Host1xClass.cs
Host1xClass.cs
 1  using Ryujinx.Graphics.Device;
 2  using System.Collections.Generic;
 3  using System.Threading;
 4  
 5  namespace Ryujinx.Graphics.Host1x
 6  {
 7      public class Host1xClass : IDeviceState
 8      {
 9          private readonly ISynchronizationManager _syncMgr;
10          private readonly DeviceState<Host1xClassRegisters> _state;
11  
12          public Host1xClass(ISynchronizationManager syncMgr)
13          {
14              _syncMgr = syncMgr;
15              _state = new DeviceState<Host1xClassRegisters>(new Dictionary<string, RwCallback>
16              {
17                  { nameof(Host1xClassRegisters.WaitSyncpt32), new RwCallback(WaitSyncpt32, null) },
18              });
19          }
20  
21          public int Read(int offset) => _state.Read(offset);
22          public void Write(int offset, int data) => _state.Write(offset, data);
23  
24          private void WaitSyncpt32(int data)
25          {
26              uint syncpointId = (uint)(data & 0xFF);
27              uint threshold = _state.State.LoadSyncptPayload32;
28  
29              _syncMgr.WaitOnSyncpoint(syncpointId, threshold, Timeout.InfiniteTimeSpan);
30          }
31      }
32  }