84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
|
package cl
|
||
|
|
||
|
// #ifdef __APPLE__
|
||
|
// #include "OpenCL/opencl.h"
|
||
|
// #else
|
||
|
// #include "cl.h"
|
||
|
// #endif
|
||
|
import "C"
|
||
|
|
||
|
import "unsafe"
|
||
|
|
||
|
const maxPlatforms = 32
|
||
|
|
||
|
type Platform struct {
|
||
|
id C.cl_platform_id
|
||
|
}
|
||
|
|
||
|
// Obtain the list of platforms available.
|
||
|
func GetPlatforms() ([]*Platform, error) {
|
||
|
var platformIds [maxPlatforms]C.cl_platform_id
|
||
|
var nPlatforms C.cl_uint
|
||
|
if err := C.clGetPlatformIDs(C.cl_uint(maxPlatforms), &platformIds[0], &nPlatforms); err != C.CL_SUCCESS {
|
||
|
return nil, toError(err)
|
||
|
}
|
||
|
platforms := make([]*Platform, nPlatforms)
|
||
|
for i := 0; i < int(nPlatforms); i++ {
|
||
|
platforms[i] = &Platform{id: platformIds[i]}
|
||
|
}
|
||
|
return platforms, nil
|
||
|
}
|
||
|
|
||
|
func (p *Platform) GetDevices(deviceType DeviceType) ([]*Device, error) {
|
||
|
return GetDevices(p, deviceType)
|
||
|
}
|
||
|
|
||
|
func (p *Platform) getInfoString(param C.cl_platform_info) (string, error) {
|
||
|
var strC [2048]byte
|
||
|
var strN C.size_t
|
||
|
if err := C.clGetPlatformInfo(p.id, param, 2048, unsafe.Pointer(&strC[0]), &strN); err != C.CL_SUCCESS {
|
||
|
return "", toError(err)
|
||
|
}
|
||
|
return string(strC[:(strN - 1)]), nil
|
||
|
}
|
||
|
|
||
|
func (p *Platform) Name() string {
|
||
|
if str, err := p.getInfoString(C.CL_PLATFORM_NAME); err != nil {
|
||
|
panic("Platform.Name() should never fail")
|
||
|
} else {
|
||
|
return str
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *Platform) Vendor() string {
|
||
|
if str, err := p.getInfoString(C.CL_PLATFORM_VENDOR); err != nil {
|
||
|
panic("Platform.Vendor() should never fail")
|
||
|
} else {
|
||
|
return str
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *Platform) Profile() string {
|
||
|
if str, err := p.getInfoString(C.CL_PLATFORM_PROFILE); err != nil {
|
||
|
panic("Platform.Profile() should never fail")
|
||
|
} else {
|
||
|
return str
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *Platform) Version() string {
|
||
|
if str, err := p.getInfoString(C.CL_PLATFORM_VERSION); err != nil {
|
||
|
panic("Platform.Version() should never fail")
|
||
|
} else {
|
||
|
return str
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p *Platform) Extensions() string {
|
||
|
if str, err := p.getInfoString(C.CL_PLATFORM_EXTENSIONS); err != nil {
|
||
|
panic("Platform.Extensions() should never fail")
|
||
|
} else {
|
||
|
return str
|
||
|
}
|
||
|
}
|