1
0
mirror of https://github.com/fumiama/gozel.git synced 2026-06-05 00:10:24 +08:00
Files
gozel/ze/init.go
2026-03-25 00:25:24 +08:00

46 lines
1.3 KiB
Go

package ze
import (
"unsafe"
"github.com/fumiama/gozel"
)
// DriverHandle is a handle to a Level Zero driver instance.
type DriverHandle gozel.ZeDriverHandle
func initDrivers(flags gozel.ZeInitDriverTypeFlags) ([]DriverHandle, error) {
var count uint32
desc := &gozel.ZeInitDriverTypeDesc{
Stype: gozel.ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC,
Flags: flags,
}
_, err := gozel.ZeInitDrivers(&count, nil, desc)
if count == 0 {
return nil, nil
}
if err != nil {
return nil, err
}
handles := make([]DriverHandle, count)
_, err = gozel.ZeInitDrivers(&count, (*gozel.ZeDriverHandle)(unsafe.Pointer(&handles[0])), desc)
if err != nil {
return nil, err
}
return handles, nil
}
// InitGPUDrivers calls zeInitDrivers with ZE_INIT_DRIVER_TYPE_FLAG_GPU from ze_loader.dll.
// On success pCount contains the number of drivers and phDrivers (if non-nil)
// is filled with driver handles.
func InitGPUDrivers() ([]DriverHandle, error) {
return initDrivers(gozel.ZE_INIT_DRIVER_TYPE_FLAG_GPU)
}
// InitNPUDrivers calls zeInitDrivers with ZE_INIT_DRIVER_TYPE_FLAG_NPU from ze_loader.dll.
// On success pCount contains the number of drivers and phDrivers (if non-nil)
// is filled with driver handles.
func InitNPUDrivers() ([]DriverHandle, error) {
return initDrivers(gozel.ZE_INIT_DRIVER_TYPE_FLAG_NPU)
}