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 }