mirror of
https://github.com/fumiama/gozel.git
synced 2026-06-05 00:10:24 +08:00
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package ze
|
|
|
|
import (
|
|
"runtime"
|
|
"unsafe"
|
|
|
|
"github.com/fumiama/gozel/gozel"
|
|
)
|
|
|
|
// EventPoolHandle (ze_event_pool_handle_t) Handle of driver's event pool object
|
|
type EventPoolHandle gozel.ZeEventPoolHandle
|
|
|
|
// EventPoolCreate Creates a pool of events on the context.
|
|
func (h ContextHandle) EventPoolCreate(
|
|
evcount uint32, devices ...DeviceHandle,
|
|
) (eph EventPoolHandle, err error) {
|
|
_, err = gozel.ZeEventPoolCreate(gozel.ZeContextHandle(h), &gozel.ZeEventPoolDesc{
|
|
Stype: gozel.ZE_STRUCTURE_TYPE_EVENT_POOL_DESC,
|
|
Flags: gozel.ZE_EVENT_POOL_FLAG_HOST_VISIBLE,
|
|
Count: evcount,
|
|
}, uint32(len(devices)), (*gozel.ZeDeviceHandle)(unsafe.SliceData(devices)),
|
|
(*gozel.ZeEventPoolHandle)(&eph),
|
|
)
|
|
runtime.KeepAlive(devices)
|
|
return
|
|
}
|
|
|
|
// Destroy Deletes an event pool object.
|
|
func (h EventPoolHandle) Destroy() error {
|
|
_, err := gozel.ZeEventPoolDestroy(gozel.ZeEventPoolHandle(h))
|
|
return err
|
|
}
|
|
|
|
// EventHandle (ze_event_handle_t) Handle of driver's event object
|
|
type EventHandle gozel.ZeEventHandle
|
|
|
|
// EventCreate Creates an event from the pool.
|
|
func (h EventPoolHandle) EventCreate(
|
|
index uint32, signal, wait gozel.ZeEventScopeFlags,
|
|
) (eh EventHandle, err error) {
|
|
_, err = gozel.ZeEventCreate(gozel.ZeEventPoolHandle(h), &gozel.ZeEventDesc{
|
|
Stype: gozel.ZE_STRUCTURE_TYPE_EVENT_DESC,
|
|
Index: index,
|
|
Signal: signal,
|
|
Wait: wait,
|
|
}, (*gozel.ZeEventHandle)(&eh))
|
|
return
|
|
}
|
|
|
|
// HostSynchronize The current host thread waits on an event to be signaled.
|
|
func (h EventHandle) HostSynchronize(timeout uint64) error {
|
|
_, err := gozel.ZeEventHostSynchronize(gozel.ZeEventHandle(h), timeout)
|
|
return err
|
|
}
|
|
|
|
// Destroy Deletes an event object.
|
|
func (h EventHandle) Destroy() error {
|
|
_, err := gozel.ZeEventDestroy(gozel.ZeEventHandle(h))
|
|
return err
|
|
}
|