mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 02:19:27 +02:00
+ basic info program
git-svn-id: trunk@14878 -
This commit is contained in:
parent
be71dc16b4
commit
c459100773
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -4528,6 +4528,7 @@ packages/openal/src/openal.pas svneol=native#text/plain
|
||||
packages/opencl/Makefile svneol=native#text/plain
|
||||
packages/opencl/Makefile.fpc svneol=native#text/plain
|
||||
packages/opencl/examples/basicsample.pas svneol=native#text/pascal
|
||||
packages/opencl/examples/clinfo.pp svneol=native#text/pascal
|
||||
packages/opencl/fpmake.pp svneol=native#text/pascal
|
||||
packages/opencl/src/cl.pp svneol=native#text/pascal
|
||||
packages/opencl/src/cl_gl.pp svneol=native#text/pascal
|
||||
|
83
packages/opencl/examples/clinfo.pp
Normal file
83
packages/opencl/examples/clinfo.pp
Normal file
@ -0,0 +1,83 @@
|
||||
{$mode objfpc}
|
||||
uses
|
||||
cl;
|
||||
|
||||
const
|
||||
device_str_info : array[1..5] of record id : dword; name : pchar end =
|
||||
((id: CL_DEVICE_NAME; name : 'CL_DEVICE_NAME'),
|
||||
(id: CL_DEVICE_VENDOR; name : 'CL_DEVICE_VENDOR'),
|
||||
(id: CL_DEVICE_VERSION; name : 'CL_DEVICE_VERSION'),
|
||||
(id: CL_DEVICE_PROFILE; name : 'CL_DEVICE_PROFILE'),
|
||||
(id: CL_DEVICE_EXTENSIONS; name : 'CL_DEVICE_EXTENSIONS'));
|
||||
|
||||
|
||||
|
||||
var
|
||||
err : Integer; // error code returned from api calls
|
||||
platformids : pcl_platform_id;
|
||||
platforms : cl_uint;
|
||||
devices : cl_uint;
|
||||
deviceids : pcl_device_id;
|
||||
i,j,k : Integer;
|
||||
buf : array[0..99999] of char;
|
||||
bufwritten : LongWord;
|
||||
|
||||
|
||||
begin
|
||||
err:=clGetPlatformIDs(0,nil,@platforms);
|
||||
if (err <> CL_SUCCESS) then
|
||||
begin
|
||||
writeln('Error: Cannot get number of platforms!');
|
||||
Halt(1);
|
||||
end;
|
||||
getmem(platformids,platforms*sizeof(cl_platform_id));
|
||||
err:=clGetPlatformIDs(platforms,platformids,nil);
|
||||
if (err <> CL_SUCCESS) then
|
||||
begin
|
||||
writeln('Error: Cannot get platforms!');
|
||||
Halt(1);
|
||||
end;
|
||||
writeln(platforms,' platform(s) found');
|
||||
for i:=0 to platforms-1 do
|
||||
begin
|
||||
writeln('Platform info ',i);
|
||||
err:=clGetPlatformInfo(platformids[i],CL_PLATFORM_PROFILE,sizeof(buf),@buf,bufwritten);
|
||||
writeln('PROFILE: ',buf);
|
||||
err:=clGetPlatformInfo(platformids[i],CL_PLATFORM_VERSION,sizeof(buf),@buf,bufwritten);
|
||||
writeln('VERSION: ',buf);
|
||||
err:=clGetPlatformInfo(platformids[i],CL_PLATFORM_NAME,sizeof(buf),@buf,bufwritten);
|
||||
writeln('NAME: ',buf);
|
||||
err:=clGetPlatformInfo(platformids[i],CL_PLATFORM_VENDOR,sizeof(buf),@buf,bufwritten);
|
||||
writeln('VENDOR: ',buf);
|
||||
err:=clGetPlatformInfo(platformids[i],CL_PLATFORM_EXTENSIONS,sizeof(buf),@buf,bufwritten);
|
||||
writeln('EXTENSIONS: ',buf);
|
||||
|
||||
err:=clGetDeviceIDs(platformids[i],CL_DEVICE_TYPE_ALL,0,nil,@devices);
|
||||
if (err <> CL_SUCCESS) then
|
||||
begin
|
||||
writeln('Error: Cannot get number of devices!');
|
||||
Halt(1);
|
||||
end;
|
||||
writeln(devices,' device(s) found');
|
||||
getmem(deviceids,devices*sizeof(cl_device_id));
|
||||
err:=clGetDeviceIDs(platformids[i],CL_DEVICE_TYPE_ALL,devices,deviceids,nil);
|
||||
for j:=0 to devices-1 do
|
||||
begin
|
||||
writeln('Device info ',j);
|
||||
for k:=low(device_str_info) to high(device_str_info) do
|
||||
begin
|
||||
err:=clGetDeviceInfo(deviceids[j],device_str_info[k].id,sizeof(buf),@buf,bufwritten);
|
||||
writeln(device_str_info[k].name,': ',buf);
|
||||
end;
|
||||
err:=clGetDeviceInfo(deviceids[j],CL_DEVICE_MAX_COMPUTE_UNITS,sizeof(buf),@buf,bufwritten);
|
||||
writeln('CL_DEVICE_MAX_COMPUTE_UNITS: ',pdword(@buf)^);
|
||||
err:=clGetDeviceInfo(deviceids[j],CL_DEVICE_IMAGE3D_MAX_WIDTH,sizeof(buf),@buf,bufwritten);
|
||||
writeln('CL_DEVICE_IMAGE3D_MAX_WIDTH: ',pdword(@buf)^);
|
||||
err:=clGetDeviceInfo(deviceids[j],CL_DEVICE_IMAGE3D_MAX_HEIGHT,sizeof(buf),@buf,bufwritten);
|
||||
writeln('CL_DEVICE_IMAGE3D_MAX_HEIGHT: ',pdword(@buf)^);
|
||||
err:=clGetDeviceInfo(deviceids[j],CL_DEVICE_GLOBAL_MEM_SIZE,sizeof(buf),@buf,bufwritten);
|
||||
writeln('CL_DEVICE_GLOBAL_MEM_SIZE: ',pdword(@buf)^);
|
||||
end;
|
||||
end;
|
||||
freemem(platformids);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user