Пример #1
0
        public NvHostEvent(NvHostSyncpt syncpointManager, uint eventId, Horizon system)
        {
            Fence.Id = 0;

            State = NvHostEventState.Available;

            Event = new KEvent(system);

            _eventId = eventId;

            _syncpointManager = syncpointManager;
        }
Пример #2
0
        private void Signal()
        {
            NvHostEventState oldState = State;

            State = NvHostEventState.Signaling;

            if (oldState == NvHostEventState.Waiting)
            {
                Event.WritableEvent.Signal();
            }

            State = NvHostEventState.Signaled;
        }
Пример #3
0
        public NvHostEvent(NvHostSyncpt syncpointManager, uint eventId, Horizon system)
        {
            Fence.Id = 0;

            State = NvHostEventState.Available;

            Event = new KEvent(system.KernelContext);

            _eventId = eventId;

            _syncpointManager = syncpointManager;

            ResetFailingState();
        }
Пример #4
0
        public NvHostEvent(NvHostSyncpt syncpointManager, uint eventId, Horizon system)
        {
            Fence.Id = 0;

            State = NvHostEventState.Available;

            Event = new KEvent(system.KernelContext);

            if (KernelStatic.GetCurrentProcess().HandleTable.GenerateHandle(Event.ReadableEvent, out EventHandle) != KernelResult.Success)
            {
                throw new InvalidOperationException("Out of handles!");
            }

            _eventId = eventId;

            _syncpointManager = syncpointManager;

            ResetFailingState();
        }
Пример #5
0
        private NvInternalResult EventSignal(ref uint userEventId)
        {
            uint eventId = userEventId & ushort.MaxValue;

            if (eventId >= EventsCount)
            {
                return(NvInternalResult.InvalidInput);
            }

            lock (_events)
            {
                NvHostEvent hostEvent = _events[eventId];

                if (hostEvent == null)
                {
                    return(NvInternalResult.InvalidInput);
                }

                lock (hostEvent.Lock)
                {
                    NvHostEventState oldState = hostEvent.State;

                    if (oldState == NvHostEventState.Waiting)
                    {
                        hostEvent.State = NvHostEventState.Cancelling;

                        hostEvent.Cancel(_device.Gpu);
                    }

                    hostEvent.State = NvHostEventState.Cancelled;

                    _device.System.HostSyncpoint.UpdateMin(hostEvent.Fence.Id);

                    return(NvInternalResult.Success);
                }
            }
        }
Пример #6
0
 public void Reset()
 {
     Fence.Id    = NvFence.InvalidSyncPointId;
     Fence.Value = 0;
     State       = NvHostEventState.Availaible;
 }