├── Example1
├── DELPHI_LOG.log
├── Example1.cfg
├── Example1.cl
├── Example1.dof
├── Example1.dpr
├── Example1.dproj
├── Example1.dproj.local
├── Example1.exe
└── Example1.identcache
├── Example2
├── DELPHI_LOG.log
├── Example2.bmp
├── Example2.cfg
├── Example2.cl
├── Example2.dof
├── Example2.dpr
├── Example2.dproj
├── Example2.dproj.local
├── Example2.exe
└── Example2.identcache
├── Example3
├── DELPHI_LOG.log
├── Example3.bmp
├── Example3.cfg
├── Example3.dof
├── Example3.dpr
├── Example3.dproj
├── Example3.dproj.local
├── Example3.exe
├── Example3.identcache
├── Lena.bmp
├── filter01.cl
├── filter02.cl
├── filter03.cl
├── filter04.cl
├── filter05.cl
├── filter06.cl
├── filter07.cl
├── filter08.cl
└── filter09.cl
├── Example4
├── DELPHI_LOG.log
├── Example4.bmp
├── Example4.cfg
├── Example4.cl
├── Example4.dof
├── Example4.dpr
├── Example4.dproj
├── Example4.dproj.local
├── Example4.exe
├── Example4.identcache
└── Lena.bmp
├── Example5
├── DELPHI_LOG.log
├── Example5.cfg
├── Example5.dof
├── Example5.dpr
├── Example5.exe
├── Example5.res
├── MainUnit.dcu
├── MainUnit.ddp
├── MainUnit.dfm
├── MainUnit.pas
└── simpleGL.cl
├── Libs
├── OpenCL
│ ├── CL.pas
│ ├── CL_d3d11.pas
│ ├── CL_dx9_media_sharing.pas
│ ├── CL_gl_ext.pas
│ ├── DelphiCL.inc
│ ├── DelphiCL.pas
│ ├── OpenCL.inc
│ ├── SimpleImageLoader.pas
│ ├── cl_d3d10.pas
│ ├── cl_d3d9.pas
│ ├── cl_ext.pas
│ ├── cl_gl.pas
│ ├── cl_platform.pas
│ ├── clext.pas
│ └── oclUtils.pas
└── dglOpenGL.pas
└── OpenCL_Info
├── Main.dfm
├── Main.pas
├── OpenCL_Info.dpr
├── OpenCL_Info.dproj
├── OpenCL_Info.dproj.local
├── OpenCL_Info.exe
├── OpenCL_Info.identcache
└── OpenCL_Info.res
/Example1/DELPHI_LOG.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example1/DELPHI_LOG.log
--------------------------------------------------------------------------------
/Example1/Example1.cfg:
--------------------------------------------------------------------------------
1 | -$A8
2 | -$B-
3 | -$C+
4 | -$D+
5 | -$E-
6 | -$F-
7 | -$G+
8 | -$H+
9 | -$I+
10 | -$J-
11 | -$K-
12 | -$L+
13 | -$M-
14 | -$N+
15 | -$O+
16 | -$P+
17 | -$Q-
18 | -$R-
19 | -$S-
20 | -$T-
21 | -$U-
22 | -$V+
23 | -$W-
24 | -$X+
25 | -$YD
26 | -$Z1
27 | -cg
28 | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29 | -H+
30 | -W+
31 | -M
32 | -$M16384,1048576
33 | -K$00400000
34 | -LE"c:\program files\borland\delphi6\Projects\Bpl"
35 | -LN"c:\program files\borland\delphi6\Projects\Bpl"
36 |
--------------------------------------------------------------------------------
/Example1/Example1.cl:
--------------------------------------------------------------------------------
1 | __kernel void somekernel(__global int *src,__global int *dst)
2 | {
3 | int id = get_global_id(0);
4 | dst[id] = (int)pown((float)src[id],4);
5 | }
6 |
--------------------------------------------------------------------------------
/Example1/Example1.dof:
--------------------------------------------------------------------------------
1 | [FileVersion]
2 | Version=6.0
3 | [Compiler]
4 | A=8
5 | B=0
6 | C=1
7 | D=1
8 | E=0
9 | F=0
10 | G=1
11 | H=1
12 | I=1
13 | J=0
14 | K=0
15 | L=1
16 | M=0
17 | N=1
18 | O=1
19 | P=1
20 | Q=0
21 | R=0
22 | S=0
23 | T=0
24 | U=0
25 | V=1
26 | W=0
27 | X=1
28 | Y=1
29 | Z=1
30 | ShowHints=1
31 | ShowWarnings=1
32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33 | [Linker]
34 | MapFile=0
35 | OutputObjs=0
36 | ConsoleApp=1
37 | DebugInfo=0
38 | RemoteSymbols=0
39 | MinStackSize=16384
40 | MaxStackSize=1048576
41 | ImageBase=4194304
42 | ExeDescription=
43 | [Directories]
44 | OutputDir=
45 | UnitOutputDir=
46 | PackageDLLOutputDir=
47 | PackageDCPOutputDir=
48 | SearchPath=
49 | Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
50 | Conditionals=
51 | DebugSourceDirs=
52 | UsePackages=0
53 | [Parameters]
54 | RunParams=
55 | HostApplication=
56 | Launcher=
57 | UseLauncher=0
58 | DebugCWD=
59 | [Language]
60 | ActiveLang=
61 | ProjectLang=
62 | RootDir=C:\Program Files\Borland\Delphi6\Bin\
63 | [Version Info]
64 | IncludeVerInfo=0
65 | AutoIncBuild=0
66 | MajorVer=1
67 | MinorVer=0
68 | Release=0
69 | Build=0
70 | Debug=0
71 | PreRelease=0
72 | Special=0
73 | Private=0
74 | DLL=0
75 | Locale=1058
76 | CodePage=1251
77 | [Version Info Keys]
78 | CompanyName=
79 | FileDescription=
80 | FileVersion=1.0.0.0
81 | InternalName=
82 | LegalCopyright=
83 | LegalTrademarks=
84 | OriginalFilename=
85 | ProductName=
86 | ProductVersion=1.0.0.0
87 | Comments=
88 |
--------------------------------------------------------------------------------
/Example1/Example1.dpr:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : Example1.dpr *)
8 | (* last modify : 10.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | program Example1;
25 |
26 | {$APPTYPE CONSOLE}
27 | {$INCLUDE ..\Libs\OpenCL\OpenCL.inc}
28 |
29 | uses
30 | CL_platform in '..\Libs\OpenCL\CL_platform.pas',
31 | CL in '..\Libs\OpenCL\CL.pas',
32 | CL_GL in '..\Libs\OpenCL\CL_GL.pas',
33 | DelphiCL in '..\Libs\OpenCL\DelphiCL.pas',
34 | dglOpenGL in '..\Libs\dglOpenGL.pas',
35 | SysUtils;
36 |
37 | const
38 | COUNT = 100;
39 | SIZE = COUNT*SizeOf(TCL_int);
40 |
41 | var
42 | Platforms: TDCLPlatforms;
43 | CommandQueue: TDCLCommandQueue;
44 | SimpleProgram: TDCLProgram;
45 | Kernel : TDCLKernel;
46 | Input,Output: Array [0..COUNT-1]of TCL_int;
47 | InputBuffer,OutputBuffer: TDCLBuffer;
48 | i: Integer;
49 | begin
50 | InitOpenCL();
51 | Platforms := TDCLPlatforms.Create();
52 | with Platforms.Platforms[0]^.DeviceWithMaxClockFrequency^ do
53 | begin
54 | CommandQueue := CreateCommandQueue();
55 | for i:=0 to COUNT-1 do Input[i]:= i;
56 | InputBuffer := CreateBuffer(SIZE,@Input,[mfReadOnly,mfUseHostPtr]);//If dynamical array @Input[0]
57 | OutputBuffer := CreateBuffer(SIZE,nil,[mfWriteOnly]);
58 | SimpleProgram := CreateProgram(ExtractFilePath(ParamStr(0))+'Example1.cl');
59 | SimpleProgram.SaveToFile('example1.bin');
60 | Kernel := SimpleProgram.CreateKernel('somekernel');
61 | Kernel.SetArg(0,InputBuffer);
62 | Kernel.SetArg(1,OutputBuffer);
63 | CommandQueue.Execute(Kernel,COUNT);
64 | Writeln('Execution time: ',CommandQueue.ExecuteTime,' ns.');
65 | CommandQueue.ReadBuffer(OutputBuffer,SIZE,@Output);//If dynamical array @Output[0]
66 | FreeAndNil(Kernel);
67 | FreeAndNil(SimpleProgram);
68 | FreeAndNil(OutputBuffer);
69 | FreeAndNil(InputBuffer);
70 | FreeAndNil(CommandQueue);
71 | end;
72 | FreeAndNil(Platforms);
73 |
74 | for i:=0 to COUNT-1 do Writeln(Output[i],' ');
75 |
76 | Writeln('press any key...');
77 | Readln;
78 | end.
79 |
--------------------------------------------------------------------------------
/Example1/Example1.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {B404A580-7D7D-4756-B0D1-4048C6417186}
4 | Example1.dpr
5 | Debug
6 | DCC32
7 | 12.0
8 |
9 |
10 | true
11 |
12 |
13 | true
14 | Base
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | 00400000
24 | vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
25 | Example1.exe
26 | WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)
27 | x86
28 | 1
29 | true
30 | false
31 | false
32 | false
33 | false
34 |
35 |
36 | false
37 | RELEASE;$(DCC_Define)
38 | 0
39 | false
40 |
41 |
42 | DEBUG;$(DCC_Define)
43 |
44 |
45 |
46 | MainSource
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Base
55 |
56 |
57 | Cfg_2
58 | Base
59 |
60 |
61 | Cfg_1
62 | Base
63 |
64 |
65 |
66 |
67 | Delphi.Personality.12
68 | VCLApplication
69 |
70 |
71 |
72 | Example1.dpr
73 |
74 |
75 | False
76 | True
77 | False
78 |
79 |
80 | J:\OpenCL_samples\svn\svn\Example1\
81 |
82 |
83 | False
84 | False
85 | 1
86 | 0
87 | 0
88 | 0
89 | False
90 | False
91 | False
92 | False
93 | False
94 | 1058
95 | 1251
96 |
97 |
98 |
99 |
100 | 1.0.0.0
101 |
102 |
103 |
104 |
105 |
106 | 1.0.0.0
107 |
108 |
109 |
110 |
111 | 12
112 |
113 |
114 |
--------------------------------------------------------------------------------
/Example1/Example1.dproj.local:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Example1/Example1.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example1/Example1.exe
--------------------------------------------------------------------------------
/Example1/Example1.identcache:
--------------------------------------------------------------------------------
1 | @D:\Developer\DelphiWorkSpace\delphi-opencl\Example1\Example1.dpr =D:\Developer\DelphiWorkSpace\delphi-opencl\Libs\dglOpenGL.pas @D:\Developer\DelphiWorkSpace\delphi-opencl\Libs\OpenCL\CL_GL.pas FD:\Developer\DelphiWorkSpace\delphi-opencl\Libs\OpenCL\CL_platform.pas CD:\Developer\DelphiWorkSpace\delphi-opencl\Libs\OpenCL\DelphiCL.pas =D:\Developer\DelphiWorkSpace\delphi-opencl\Libs\OpenCL\CL.pas
--------------------------------------------------------------------------------
/Example2/DELPHI_LOG.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example2/DELPHI_LOG.log
--------------------------------------------------------------------------------
/Example2/Example2.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example2/Example2.bmp
--------------------------------------------------------------------------------
/Example2/Example2.cfg:
--------------------------------------------------------------------------------
1 | -$A8
2 | -$B-
3 | -$C+
4 | -$D+
5 | -$E-
6 | -$F-
7 | -$G+
8 | -$H+
9 | -$I+
10 | -$J-
11 | -$K-
12 | -$L+
13 | -$M-
14 | -$N+
15 | -$O+
16 | -$P+
17 | -$Q-
18 | -$R-
19 | -$S-
20 | -$T-
21 | -$U-
22 | -$V+
23 | -$W-
24 | -$X+
25 | -$YD
26 | -$Z1
27 | -cg
28 | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29 | -H+
30 | -W+
31 | -M
32 | -$M16384,1048576
33 | -K$00400000
34 | -LE"c:\program files\borland\delphi6\Projects\Bpl"
35 | -LN"c:\program files\borland\delphi6\Projects\Bpl"
36 |
--------------------------------------------------------------------------------
/Example2/Example2.cl:
--------------------------------------------------------------------------------
1 | float mapX(float x)
2 | {
3 | return x*3.25 - 2;
4 | }
5 |
6 | float mapY(float y)
7 | {
8 | return y*2.5 - 1.25;
9 | }
10 |
11 | int index(int x, int y, int width)
12 | {
13 | return x*4+4*width*y;
14 | }
15 |
16 | char mynormalize(char v)
17 | {
18 | if (v>255) return 0;
19 | return v;
20 | }
21 |
22 | __kernel void render(__global char * output)
23 | {
24 |
25 | int x_dim = get_global_id(0);
26 | int y_dim = get_global_id(1);
27 | size_t width = get_global_size(0);
28 | size_t height = get_global_size(1);
29 | int idx = index(x_dim, y_dim, width);
30 |
31 | float x_0 = mapX((float) x_dim / width);
32 | float y_0 = mapY((float) y_dim / height);
33 |
34 | float x = 0.0;
35 | float y = 0.0;
36 |
37 | char iteration = 0;
38 |
39 | char max_iteration = 127;
40 | while( (x*x + y*y <= 4) && (iteration < max_iteration) )
41 | {
42 | float xtemp = x*x - y*y + x_0;
43 | y = 2*x*y + y_0;
44 | x = xtemp;
45 | iteration++;
46 | }
47 |
48 | if(iteration == max_iteration)
49 | {
50 | output[idx] = 0;
51 | output[idx + 1] = 0;
52 | output[idx + 2] = 0;
53 | }
54 | else
55 | {
56 | output[idx] = mynormalize(iteration*5*x*y/100);
57 | output[idx + 1] = mynormalize(iteration*x/10);
58 | output[idx + 2] = mynormalize(iteration*y/10);
59 | }
60 | output[idx + 3] = 255;
61 | }
--------------------------------------------------------------------------------
/Example2/Example2.dof:
--------------------------------------------------------------------------------
1 | [FileVersion]
2 | Version=6.0
3 | [Compiler]
4 | A=8
5 | B=0
6 | C=1
7 | D=1
8 | E=0
9 | F=0
10 | G=1
11 | H=1
12 | I=1
13 | J=0
14 | K=0
15 | L=1
16 | M=0
17 | N=1
18 | O=1
19 | P=1
20 | Q=0
21 | R=0
22 | S=0
23 | T=0
24 | U=0
25 | V=1
26 | W=0
27 | X=1
28 | Y=1
29 | Z=1
30 | ShowHints=1
31 | ShowWarnings=1
32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33 | [Linker]
34 | MapFile=0
35 | OutputObjs=0
36 | ConsoleApp=1
37 | DebugInfo=0
38 | RemoteSymbols=0
39 | MinStackSize=16384
40 | MaxStackSize=1048576
41 | ImageBase=4194304
42 | ExeDescription=
43 | [Directories]
44 | OutputDir=
45 | UnitOutputDir=
46 | PackageDLLOutputDir=
47 | PackageDCPOutputDir=
48 | SearchPath=
49 | Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
50 | Conditionals=
51 | DebugSourceDirs=
52 | UsePackages=0
53 | [Parameters]
54 | RunParams=
55 | HostApplication=
56 | Launcher=
57 | UseLauncher=0
58 | DebugCWD=
59 | [Language]
60 | ActiveLang=
61 | ProjectLang=
62 | RootDir=C:\Program Files\Borland\Delphi6\Bin\
63 | [Version Info]
64 | IncludeVerInfo=0
65 | AutoIncBuild=0
66 | MajorVer=1
67 | MinorVer=0
68 | Release=0
69 | Build=0
70 | Debug=0
71 | PreRelease=0
72 | Special=0
73 | Private=0
74 | DLL=0
75 | Locale=1058
76 | CodePage=1251
77 | [Version Info Keys]
78 | CompanyName=
79 | FileDescription=
80 | FileVersion=1.0.0.0
81 | InternalName=
82 | LegalCopyright=
83 | LegalTrademarks=
84 | OriginalFilename=
85 | ProductName=
86 | ProductVersion=1.0.0.0
87 | Comments=
88 |
--------------------------------------------------------------------------------
/Example2/Example2.dpr:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : Example2.dpr *)
8 | (* last modify : 10.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | program Example2;
25 |
26 | {$APPTYPE CONSOLE}
27 | {$INCLUDE ..\Libs\OpenCL\OpenCL.inc}
28 |
29 | uses
30 | CL_platform in '..\Libs\OpenCL\CL_platform.pas',
31 | CL in '..\Libs\OpenCL\CL.pas',
32 | CL_GL in '..\Libs\OpenCL\CL_GL.pas',
33 | DelphiCL in '..\Libs\OpenCL\DelphiCL.pas',
34 | dglOpenGL in '..\Libs\dglOpenGL.pas',
35 | SysUtils;
36 |
37 | const
38 | Width = 512;
39 | Height = 512;
40 |
41 | var
42 | host_image: Array [0..Width*Height*4]of Byte;
43 |
44 | {$IFNDEF DEFINE_REGION_NOT_IMPLEMENTED}{$REGION 'SaveToFile'}{$ENDIF}
45 | procedure SaveToFile(const FileName: String);
46 | type
47 | DWORD = LongWord;
48 |
49 | TBitmapFileHeader = packed record
50 | bfType: Word;
51 | bfSize: DWORD;
52 | bfReserved1: Word;
53 | bfReserved2: Word;
54 | bfOffBits: DWORD;
55 | end;
56 |
57 | TBitmapInfoHeader = packed record
58 | biSize: DWORD;
59 | biWidth: Longint;
60 | biHeight: Longint;
61 | biPlanes: Word;
62 | biBitCount: Word;
63 | biCompression: DWORD;
64 | biSizeImage: DWORD;
65 | biXPelsPerMeter: Longint;
66 | biYPelsPerMeter: Longint;
67 | biClrUsed: DWORD;
68 | biClrImportant: DWORD;
69 | end;
70 |
71 | const
72 | BI_RGB = 0;
73 | var
74 | F: File;
75 | BFH: TBitmapFileHeader;
76 | BIH: TBitmapInfoHeader;
77 | begin
78 | Assign(F,FileName);
79 | Rewrite(F,1);
80 | FillChar(BFH,SizeOf(BFH),0);
81 | FillChar(BIH,SizeOf(BIH),0);
82 | with BFH do
83 | begin
84 | bfType:=$4D42;
85 | bfSize:=SizeOf(BFH)+SizeOf(BIH)+Width*Height*4;
86 | bfOffBits:=SizeOf(BIH)+SizeOf(BFH);
87 | end;
88 | BlockWrite(F,BFH,SizeOf(BFH));
89 | with BIH do
90 | begin
91 | biSize:=SizeOf(BIH);
92 | biWidth:=Width;
93 | biHeight:=Height;
94 | biPlanes:=1;
95 | biBitCount:=32;
96 | biCompression:=BI_RGB;
97 | biSizeImage:=Width*Height*4;
98 | end;
99 | BlockWrite(F,BIH,SizeOf(BIH));
100 | BlockWrite(F,host_image,Width*Height*4*SizeOf(Byte));
101 | Close(F);
102 | end;
103 | {$IFNDEF DEFINE_REGION_NOT_IMPLEMENTED}{$ENDREGION}{$ENDIF}
104 |
105 | var
106 | Platforms: TDCLPlatforms;
107 | CommandQueue: TDCLCommandQueue;
108 | FractalProgram: TDCLProgram;
109 | Kernel : TDCLKernel;
110 | FractalBuffer: TDCLBuffer;
111 | begin
112 | InitOpenCL();
113 | Platforms := TDCLPlatforms.Create();
114 | with Platforms.Platforms[0]^.DeviceWithMaxClockFrequency^ do
115 | begin
116 | CommandQueue := CreateCommandQueue();
117 | FractalBuffer := CreateBuffer(Width*Height*4*SizeOf(Byte),nil,[mfWriteOnly]);
118 | FractalProgram := CreateProgram(ExtractFilePath(ParamStr(0))+'Example2.cl');
119 | Kernel := FractalProgram.CreateKernel('render');
120 | Kernel.SetArg(0,FractalBuffer);
121 | CommandQueue.Execute(Kernel,[TSize_t(Width),TSize_t(Height)]);
122 | CommandQueue.ReadBuffer(FractalBuffer,Width*Height*4*SizeOf(Byte),@host_image[0]);
123 | SaveToFile(ExtractFilePath(ParamStr(0))+'Example2.bmp');
124 | FreeAndNil(Kernel);
125 | FreeAndNil(FractalProgram);
126 | FreeAndNil(FractalBuffer);
127 | FreeAndNil(CommandQueue);
128 | end;
129 | FreeAndNil(Platforms);
130 | Writeln('press any key...');
131 | Readln;
132 | end.
133 |
--------------------------------------------------------------------------------
/Example2/Example2.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {3446EA75-884A-4B3D-80A0-2557E97284BF}
4 | Example2.dpr
5 | Release
6 | DCC32
7 | 12.0
8 |
9 |
10 | true
11 |
12 |
13 | true
14 | Base
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | 00400000
24 | vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
25 | Example2.exe
26 | WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias)
27 | x86
28 | 1
29 | true
30 | false
31 | false
32 | false
33 | false
34 |
35 |
36 | false
37 | RELEASE;$(DCC_Define)
38 | 0
39 | false
40 |
41 |
42 | DEBUG;$(DCC_Define)
43 |
44 |
45 |
46 | MainSource
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Base
55 |
56 |
57 | Cfg_2
58 | Base
59 |
60 |
61 | Cfg_1
62 | Base
63 |
64 |
65 |
66 |
67 | Delphi.Personality.12
68 | VCLApplication
69 |
70 |
71 |
72 | Example2.dpr
73 |
74 |
75 | False
76 | True
77 | False
78 |
79 |
80 | ..\..\svn\Example2\
81 |
82 |
83 | False
84 | False
85 | 1
86 | 0
87 | 0
88 | 0
89 | False
90 | False
91 | False
92 | False
93 | False
94 | 1058
95 | 1251
96 |
97 |
98 |
99 |
100 | 1.0.0.0
101 |
102 |
103 |
104 |
105 |
106 | 1.0.0.0
107 |
108 |
109 |
110 |
111 | 12
112 |
113 |
114 |
--------------------------------------------------------------------------------
/Example2/Example2.dproj.local:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Example2/Example2.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example2/Example2.exe
--------------------------------------------------------------------------------
/Example2/Example2.identcache:
--------------------------------------------------------------------------------
1 | ,J:\OpenCL_samples\svn\svn\Libs\dglOpenGL.pas 2J:\OpenCL_samples\svn\svn\Libs\OpenCL\DelphiCL.pas ,J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL.pas /J:\OpenCL_samples\svn\svn\Example2\Example2.dpr /J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_GL.pas 5J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_platform.pas
--------------------------------------------------------------------------------
/Example3/DELPHI_LOG.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example3/DELPHI_LOG.log
--------------------------------------------------------------------------------
/Example3/Example3.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example3/Example3.bmp
--------------------------------------------------------------------------------
/Example3/Example3.cfg:
--------------------------------------------------------------------------------
1 | -$A8
2 | -$B-
3 | -$C+
4 | -$D+
5 | -$E-
6 | -$F-
7 | -$G+
8 | -$H+
9 | -$I+
10 | -$J-
11 | -$K-
12 | -$L+
13 | -$M-
14 | -$N+
15 | -$O+
16 | -$P+
17 | -$Q-
18 | -$R-
19 | -$S-
20 | -$T-
21 | -$U-
22 | -$V+
23 | -$W-
24 | -$X+
25 | -$YD
26 | -$Z1
27 | -cg
28 | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29 | -H+
30 | -W+
31 | -M
32 | -$M16384,1048576
33 | -K$00400000
34 | -LE"c:\program files\borland\delphi6\Projects\Bpl"
35 | -LN"c:\program files\borland\delphi6\Projects\Bpl"
36 |
--------------------------------------------------------------------------------
/Example3/Example3.dof:
--------------------------------------------------------------------------------
1 | [FileVersion]
2 | Version=6.0
3 | [Compiler]
4 | A=8
5 | B=0
6 | C=1
7 | D=1
8 | E=0
9 | F=0
10 | G=1
11 | H=1
12 | I=1
13 | J=0
14 | K=0
15 | L=1
16 | M=0
17 | N=1
18 | O=1
19 | P=1
20 | Q=0
21 | R=0
22 | S=0
23 | T=0
24 | U=0
25 | V=1
26 | W=0
27 | X=1
28 | Y=1
29 | Z=1
30 | ShowHints=1
31 | ShowWarnings=1
32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33 | [Linker]
34 | MapFile=0
35 | OutputObjs=0
36 | ConsoleApp=1
37 | DebugInfo=0
38 | RemoteSymbols=0
39 | MinStackSize=16384
40 | MaxStackSize=1048576
41 | ImageBase=4194304
42 | ExeDescription=
43 | [Directories]
44 | OutputDir=
45 | UnitOutputDir=
46 | PackageDLLOutputDir=
47 | PackageDCPOutputDir=
48 | SearchPath=
49 | Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
50 | Conditionals=
51 | DebugSourceDirs=
52 | UsePackages=0
53 | [Parameters]
54 | RunParams=
55 | HostApplication=
56 | Launcher=
57 | UseLauncher=0
58 | DebugCWD=
59 | [Language]
60 | ActiveLang=
61 | ProjectLang=
62 | RootDir=C:\Program Files\Borland\Delphi6\Bin\
63 | [Version Info]
64 | IncludeVerInfo=0
65 | AutoIncBuild=0
66 | MajorVer=1
67 | MinorVer=0
68 | Release=0
69 | Build=0
70 | Debug=0
71 | PreRelease=0
72 | Special=0
73 | Private=0
74 | DLL=0
75 | Locale=1058
76 | CodePage=1251
77 | [Version Info Keys]
78 | CompanyName=
79 | FileDescription=
80 | FileVersion=1.0.0.0
81 | InternalName=
82 | LegalCopyright=
83 | LegalTrademarks=
84 | OriginalFilename=
85 | ProductName=
86 | ProductVersion=1.0.0.0
87 | Comments=
88 |
--------------------------------------------------------------------------------
/Example3/Example3.dpr:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : Example3.dpr *)
8 | (* last modify : 10.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | program Example3;
25 |
26 | {$APPTYPE CONSOLE}
27 | {$INCLUDE ..\Libs\OpenCL\OpenCL.inc}
28 |
29 | uses
30 | CL_platform in '..\Libs\OpenCL\CL_platform.pas',
31 | CL in '..\Libs\OpenCL\CL.pas',
32 | CL_GL in '..\Libs\OpenCL\CL_GL.pas',
33 | DelphiCL in '..\Libs\OpenCL\DelphiCL.pas',
34 | dglOpenGL in '..\Libs\dglOpenGL.pas',
35 | Graphics,
36 | SysUtils;
37 |
38 | var
39 | Width,
40 | Height : TCL_int;
41 |
42 | type
43 | PAByte = ^TAByte;
44 | TAByte = Array of Byte;
45 |
46 | var
47 | host_image_in,
48 | host_image_out: TAByte;
49 |
50 | {$IFNDEF DEFINE_REGION_NOT_IMPLEMENTED}{$REGION 'Load and Save'}{$ENDIF}
51 | procedure LoadFromFile(const FileName: String);
52 | type
53 | TRGBTriple = packed record
54 | rgbtBlue: Byte;
55 | rgbtGreen: Byte;
56 | rgbtRed: Byte;
57 | end;
58 | PRGBTripleArray = ^TRGBTripleArray;
59 | TRGBTripleArray = Array [0..0] of TRGBTriple;
60 | var
61 | bmp: Graphics.TBitmap;
62 | i,j,pos: integer;
63 | row: PRGBTripleArray;
64 | begin
65 | bmp:=Graphics.TBitmap.Create;
66 | bmp.LoadFromFile(FileName);
67 | bmp.PixelFormat := pf24bit;
68 | Width:=BMP.Width;
69 | Height:=BMP.Height;
70 |
71 | pos:=0;
72 | SetLength(host_image_in,Width*Height*4*SizeOf(Byte));
73 | SetLength(host_image_out,Width*Height*4*SizeOf(Byte));
74 | for i:=Height-1 downto 0 do
75 | begin
76 | row := bmp.ScanLine[i];
77 | for j:=0 to Width-1 do
78 | begin
79 | host_image_in[pos] := row[j].rgbtBlue;
80 | inc(pos);
81 | host_image_in[pos] := row[j].rgbtGreen;
82 | inc(pos);
83 | host_image_in[pos] := row[j].rgbtRed;
84 | inc(pos);
85 | host_image_in[pos] := 0;
86 | inc(pos);
87 | end;
88 | end;
89 | bmp.Free;
90 | end;
91 |
92 | procedure SaveToFile(const FileName: String);
93 | type
94 | DWORD = LongWord;
95 |
96 | TBitmapFileHeader = packed record
97 | bfType: Word;
98 | bfSize: DWORD;
99 | bfReserved1: Word;
100 | bfReserved2: Word;
101 | bfOffBits: DWORD;
102 | end;
103 |
104 | TBitmapInfoHeader = packed record
105 | biSize: DWORD;
106 | biWidth: Longint;
107 | biHeight: Longint;
108 | biPlanes: Word;
109 | biBitCount: Word;
110 | biCompression: DWORD;
111 | biSizeImage: DWORD;
112 | biXPelsPerMeter: Longint;
113 | biYPelsPerMeter: Longint;
114 | biClrUsed: DWORD;
115 | biClrImportant: DWORD;
116 | end;
117 | const
118 | BI_RGB = 0;
119 | var
120 | F: File;
121 | BFH: TBitmapFileHeader;
122 | BIH: TBitmapInfoHeader;
123 | begin
124 | Assign(F,FileName);
125 | Rewrite(F,1);
126 | FillChar(BFH,SizeOf(BFH),0);
127 | FillChar(BIH,SizeOf(BIH),0);
128 | with BFH do
129 | begin
130 | bfType:=$4D42;
131 | bfSize:=SizeOf(BFH)+SizeOf(BIH)+Width*Height*4;
132 | bfOffBits:=SizeOf(BIH)+SizeOf(BFH);
133 | end;
134 | BlockWrite(F,BFH,SizeOf(BFH));
135 | with BIH do
136 | begin
137 | biSize:=SizeOf(BIH);
138 | biWidth:=Width;
139 | biHeight:=Height;
140 | biPlanes:=1;
141 | biBitCount:=32;
142 | biCompression:=BI_RGB;
143 | biSizeImage:=Width*Height*4;
144 | end;
145 | BlockWrite(F,BIH,SizeOf(BIH));
146 | BlockWrite(F,host_image_out[0],Width*Height*4*SizeOf(Byte));
147 | Close(F);
148 | end;
149 | {$IFNDEF DEFINE_REGION_NOT_IMPLEMENTED}{$ENDREGION}{$ENDIF}
150 |
151 | var
152 | Platforms: TDCLPlatforms;
153 | CommandQueue: TDCLCommandQueue;
154 | MainProgram: TDCLProgram;
155 | Kernel : TDCLKernel;
156 | InputBuffer,OutputBuffer: TDCLBuffer;
157 | filtertype: Byte;
158 | SourceName: String;
159 | begin
160 | InitOpenCL();
161 | LoadFromFile(ExtractFilePath(ParamStr(0))+'Lena.bmp');
162 |
163 | Writeln('Select filter kenel:');
164 | Writeln(' 0 - filter01.cl - "Mask 3x3"');
165 | Writeln(' 1 - filter02.cl - "RGB->Gray"');
166 | Writeln(' 2 - filter03.cl - "RGB<->BGR"');
167 | Writeln(' 3 - filter04.cl - "if (c>value) then 255 else 0"');
168 | Writeln(' 4 - filter05.cl - "invert"');
169 | Writeln(' 5 - filter06.cl - "log"');
170 | Writeln(' 6 - filter07.cl - "rotation"');
171 | Writeln(' 7 - filter08.cl - "Kuwahara (5x5)"');
172 | Writeln(' 8 - filter09.cl - "Kuwahara (13x13)"');
173 |
174 | Readln(filtertype);
175 |
176 | case filtertype of
177 | 0: SourceName:='filter01.cl';
178 | 1: SourceName:='filter02.cl';
179 | 2: SourceName:='filter03.cl';
180 | 3: SourceName:='filter04.cl';
181 | 4: SourceName:='filter05.cl';
182 | 5: SourceName:='filter06.cl';
183 | 6: SourceName:='filter07.cl';
184 | 7: SourceName:='filter08.cl';
185 | 8: SourceName:='filter09.cl';
186 | else SourceName:='filter09.cl';
187 | end;
188 |
189 | Platforms := TDCLPlatforms.Create;
190 | with Platforms.Platforms[0]^.DeviceWithMaxClockFrequency^ do
191 | begin
192 | CommandQueue := CreateCommandQueue();
193 | InputBuffer := CreateBuffer(Width*Height*4*SizeOf(TCL_Char),nil,[mfReadOnly]);
194 | CommandQueue.WriteBuffer(InputBuffer,Width*Height*4*SizeOf(TCL_Char),@host_image_in[0]);
195 | OutputBuffer := CreateBuffer(Width*Height*4*SizeOf(TCL_Char),nil,[mfWriteOnly]);
196 | MainProgram := CreateProgram(ExtractFilePath(ParamStr(0))+SourceName);
197 | Kernel := MainProgram.CreateKernel('render');
198 | Kernel.SetArg(0,InputBuffer);
199 | Kernel.SetArg(1,OutputBuffer);
200 | Kernel.SetArg(2,SizeOf(@Width),@Width);
201 | Kernel.SetArg(3,SizeOf(@Height),@Height);
202 | CommandQueue.Execute(Kernel,Width*Height);
203 | CommandQueue.ReadBuffer(OutputBuffer,Width*Height*4*SizeOf(Byte),@host_image_out[0]);
204 | SaveToFile(ExtractFilePath(ParamStr(0))+'Example3.bmp');
205 | FreeAndNil(Kernel);
206 | FreeAndNil(MainProgram);
207 | FreeAndNil(OutputBuffer);
208 | FreeAndNil(InputBuffer);
209 | FreeAndNil(CommandQueue);
210 | end;
211 | FreeAndNil(Platforms);
212 | Writeln('press any key...');
213 | Readln;
214 | end.
215 |
--------------------------------------------------------------------------------
/Example3/Example3.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {487298FA-8AF3-4E37-B4FA-F4848BC429E5}
4 | Example3.dpr
5 | Debug
6 | DCC32
7 | 12.0
8 |
9 |
10 | true
11 |
12 |
13 | true
14 | Base
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | 00400000
24 | vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
25 | Example3.exe
26 | WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias)
27 | x86
28 | 1
29 | true
30 | false
31 | false
32 | false
33 | false
34 |
35 |
36 | false
37 | RELEASE;$(DCC_Define)
38 | 0
39 | false
40 |
41 |
42 | DEBUG;$(DCC_Define)
43 |
44 |
45 |
46 | MainSource
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | Base
55 |
56 |
57 | Cfg_2
58 | Base
59 |
60 |
61 | Cfg_1
62 | Base
63 |
64 |
65 |
66 |
67 | Delphi.Personality.12
68 | VCLApplication
69 |
70 |
71 |
72 | Example3.dpr
73 |
74 |
75 | False
76 | True
77 | False
78 |
79 |
80 | ..\..\svn\Example3\
81 |
82 |
83 | False
84 | False
85 | 1
86 | 0
87 | 0
88 | 0
89 | False
90 | False
91 | False
92 | False
93 | False
94 | 1058
95 | 1251
96 |
97 |
98 |
99 |
100 | 1.0.0.0
101 |
102 |
103 |
104 |
105 |
106 | 1.0.0.0
107 |
108 |
109 |
110 |
111 | 12
112 |
113 |
114 |
--------------------------------------------------------------------------------
/Example3/Example3.dproj.local:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Example3/Example3.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example3/Example3.exe
--------------------------------------------------------------------------------
/Example3/Example3.identcache:
--------------------------------------------------------------------------------
1 | ,J:\OpenCL_samples\svn\svn\Libs\dglOpenGL.pas 2J:\OpenCL_samples\svn\svn\Libs\OpenCL\DelphiCL.pas 5J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_platform.pas /J:\OpenCL_samples\svn\svn\Example3\Example3.dpr /J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_GL.pas ,J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL.pas
--------------------------------------------------------------------------------
/Example3/Lena.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example3/Lena.bmp
--------------------------------------------------------------------------------
/Example3/filter01.cl:
--------------------------------------------------------------------------------
1 | __kernel void render(__global char * input,__global char * output, int width, int height)
2 | {
3 |
4 | unsigned int i = get_global_id(0);
5 |
6 | unsigned int i_mul_4 = i*4;
7 |
8 | unsigned int x,y;
9 |
10 | y = i / width;
11 |
12 | x = i % width;
13 |
14 | if ((x0)&&(y>0)&&(y255)
34 | {
35 | output[i_mul_4] = 255;
36 | }
37 | else
38 | {
39 | output[i_mul_4] = temp;
40 | }
41 |
42 | temp =
43 | -input[i_mul_4-3]+ //x-1; y ;
44 | 8*input[i_mul_4+1]+ //x ; y ;
45 | -input[i_mul_4+5]+ //x+1; y ;
46 |
47 | -input[i_mul_4-3-4*width]+ //x-1; y-1;
48 | -input[i_mul_4-3+4*width]+ //x-1; y+1;
49 |
50 | -input[i_mul_4+5-4*width]+ //x+1; y-1;
51 | -input[i_mul_4+5+4*width]+ //x+1; y+1;
52 |
53 | -input[i_mul_4-4*width+1]+ //x ; y-1;
54 | -input[i_mul_4+4*width+1]; //x ; y+1;
55 |
56 | temp = temp;
57 | if (temp>255)
58 | {
59 | output[i_mul_4+1] = 255;
60 | }
61 | else
62 | {
63 | output[i_mul_4+1] = temp;
64 | }
65 |
66 | temp =
67 | -input[i_mul_4-2]+ //x-1; y ;
68 | 8*input[i_mul_4+2]+ //x ; y ;
69 | -input[i_mul_4+6]+ //x+1; y ;
70 |
71 | -input[i_mul_4-2-4*width]+ //x-1; y-1;
72 | -input[i_mul_4-2+4*width]+ //x-1; y+1;
73 |
74 | -input[i_mul_4+6-4*width]+ //x+1; y-1;
75 | -input[i_mul_4+6+4*width]+ //x+1; y+1;
76 |
77 | -input[i_mul_4-4*width+2]+ //x ; y-1;
78 | -input[i_mul_4+4*width+2]; //x ; y+1;
79 |
80 | temp = temp;
81 | if (temp>255)
82 | {
83 | output[i_mul_4+2] = 255;
84 | }
85 | else
86 | {
87 | output[i_mul_4+2] = temp;
88 | }
89 |
90 |
91 | }
92 | else
93 | {
94 | output[i_mul_4] =input[i_mul_4];//Blue
95 | output[i_mul_4+1]=input[i_mul_4+1];//Green
96 | output[i_mul_4+2]=input[i_mul_4+2];//Red
97 |
98 | }
99 |
100 | output[i_mul_4+3]=input[i_mul_4+3];//Alpha
101 |
102 |
103 | }
--------------------------------------------------------------------------------
/Example3/filter02.cl:
--------------------------------------------------------------------------------
1 | __kernel void render(__global char * input,__global char * output, int width, int height)
2 | {
3 |
4 | unsigned int i = get_global_id(0);
5 |
6 | unsigned int i_mul_4 = i*4;
7 |
8 | unsigned char temp;
9 | temp = 0.1*input[i_mul_4]+0.6*input[i_mul_4+1]+0.3*input[i_mul_4+2];
10 | output[i_mul_4] =temp;//Blue
11 | output[i_mul_4+1]=temp;//Green
12 | output[i_mul_4+2]=temp;//Red
13 |
14 |
15 | output[i_mul_4+3]=input[i_mul_4+3];//Alpha
16 |
17 |
18 | }
--------------------------------------------------------------------------------
/Example3/filter03.cl:
--------------------------------------------------------------------------------
1 | __kernel void render(__global char * input,__global char * output, int width, int height)
2 | {
3 |
4 | unsigned int i = get_global_id(0);
5 |
6 | unsigned int i_mul_4 = i*4;
7 |
8 |
9 | unsigned char temp;
10 |
11 | //swap rgb
12 | temp = input[i_mul_4];
13 | output[i_mul_4] = input[i_mul_4+2];//Blue
14 | output[i_mul_4] = input[i_mul_4+1];
15 | output[i_mul_4+2]= temp; //Red
16 |
17 |
18 | output[i_mul_4+3]=input[i_mul_4+3];//Alpha
19 |
20 |
21 | }
--------------------------------------------------------------------------------
/Example3/filter04.cl:
--------------------------------------------------------------------------------
1 | #define THRESHOLD_VALUE 100
2 |
3 | unsigned char threshold(unsigned char in)
4 | {
5 | if (in>THRESHOLD_VALUE) return 255;
6 | return 0;
7 | }
8 |
9 | __kernel void render(__global char * input,__global char * output, int width, int height)
10 | {
11 |
12 | unsigned int i = get_global_id(0);
13 |
14 | unsigned int i_mul_4 = i*4;
15 |
16 | output[i_mul_4] = threshold(input[i_mul_4]);
17 | output[i_mul_4+1] = threshold(input[i_mul_4+1]);
18 | output[i_mul_4+2] = threshold(input[i_mul_4+2]);
19 | output[i_mul_4+3]=input[i_mul_4+3];//Alpha
20 |
21 |
22 | }
--------------------------------------------------------------------------------
/Example3/filter05.cl:
--------------------------------------------------------------------------------
1 |
2 | unsigned char invert(unsigned char in)
3 | {
4 | return 255-in;
5 | }
6 |
7 | __kernel void render(__global char * input,__global char * output, int width, int height)
8 | {
9 |
10 | unsigned int i = get_global_id(0);
11 |
12 | unsigned int i_mul_4 = i*4;
13 |
14 | output[i_mul_4] = invert(input[i_mul_4]);
15 | output[i_mul_4+1] = invert(input[i_mul_4+1]);
16 | output[i_mul_4+2] = invert(input[i_mul_4+2]);
17 | output[i_mul_4+3] = input[i_mul_4+3];//Alpha
18 |
19 |
20 | }
--------------------------------------------------------------------------------
/Example3/filter06.cl:
--------------------------------------------------------------------------------
1 | #define LOG_VALUE 25 //some const value
2 |
3 | unsigned char logconv(unsigned char in)
4 | {
5 | return LOG_VALUE*log((float)in+1);
6 | }
7 |
8 | __kernel void render(__global char * input,__global char * output, int width, int height)
9 | {
10 |
11 | unsigned int i = get_global_id(0);
12 |
13 | unsigned int i_mul_4 = i*4;
14 |
15 | output[i_mul_4] = logconv(input[i_mul_4]);
16 | output[i_mul_4+1] = logconv(input[i_mul_4+1]);
17 | output[i_mul_4+2] = logconv(input[i_mul_4+2]);
18 | output[i_mul_4+3] = input[i_mul_4+3];//Alpha
19 |
20 |
21 | }
--------------------------------------------------------------------------------
/Example3/filter07.cl:
--------------------------------------------------------------------------------
1 |
2 | __kernel void render(__global char * input,__global char * output, int width, int height)
3 | {
4 |
5 | unsigned int i = get_global_id(0);
6 |
7 | unsigned int x,y;
8 |
9 | unsigned int i_mul_4 = i*4;
10 |
11 | y = i / width;
12 | x = i % width;
13 |
14 | unsigned int x2,y2;
15 |
16 | x2 = y;
17 | y2 = x;
18 |
19 |
20 | if ((x2=0)&&(y2>=0)*/)
21 | {
22 | unsigned int i_mul_4_new = ((y2*width+x2)*4);
23 |
24 |
25 | output[i_mul_4_new] =input[i_mul_4];//Blue
26 | output[i_mul_4_new+1]=input[i_mul_4+1];//Green
27 | output[i_mul_4_new+2]=input[i_mul_4+2];//Red
28 |
29 | output[i_mul_4_new+3]=input[i_mul_4+3];//Alpha
30 | }
31 |
32 |
33 | }
--------------------------------------------------------------------------------
/Example3/filter08.cl:
--------------------------------------------------------------------------------
1 |
2 | __kernel void render(__global char * input,__global char * output, int width, int height)
3 | {
4 |
5 | unsigned int i = get_global_id(0);
6 |
7 | unsigned int x,y;
8 |
9 | unsigned int i_mul_4 = i*4;
10 |
11 | x = i / width;
12 | y = i % width;
13 |
14 |
15 |
16 | unsigned char i_00[9];
17 | unsigned int summ,aver,disp,len,curr_disp, curr_aver;
18 |
19 | unsigned int i_mul_4_new = ((y*width+x)*4);
20 |
21 | if ((x<=(width-4))&&(y<=(height-4))&&(x>=3)&&(y>=3))
22 | {
23 |
24 | i_00[0] = input[(((y-2)*width+(x-2))*4)];
25 | i_00[1] = input[(((y-2)*width+(x-1))*4)];
26 | i_00[2] = input[(((y-2)*width+(x ))*4)];
27 | i_00[3] = input[(((y-1)*width+(x-2))*4)];
28 | i_00[4] = input[(((y-1)*width+(x-1))*4)];
29 | i_00[5] = input[(((y-1)*width+(x ))*4)];
30 | i_00[6] = input[(((y )*width+(x-2))*4)];
31 | i_00[7] = input[(((y )*width+(x-1))*4)];
32 | i_00[8] = input[(((y )*width+(x ))*4)];
33 |
34 | summ = 0;
35 | for(int i=0; i<=8; ++i) {
36 | summ+=i_00[i];
37 | }
38 | aver = summ/9;
39 |
40 | disp = 0;
41 | for(int i=0; i<=8; ++i) {
42 | len = i_00[i]-aver;
43 | disp += len*len;
44 | }
45 | disp = disp/9;
46 |
47 | i_00[0] = input[(((y-2)*width+(x ))*4)];
48 | i_00[1] = input[(((y-2)*width+(x+1))*4)];
49 | i_00[2] = input[(((y-2)*width+(x+2))*4)];
50 | i_00[3] = input[(((y-1)*width+(x ))*4)];
51 | i_00[4] = input[(((y-1)*width+(x+1))*4)];
52 | i_00[5] = input[(((y-1)*width+(x+2))*4)];
53 | i_00[6] = input[(((y )*width+(x ))*4)];
54 | i_00[7] = input[(((y )*width+(x+1))*4)];
55 | i_00[8] = input[(((y )*width+(x+2))*4)];
56 |
57 | summ = 0;
58 | for(int i=0; i<=8; ++i) {
59 | summ+=i_00[i];
60 | }
61 | curr_aver = summ/9;
62 |
63 | curr_disp = 0;
64 | for(int i=0; i<=8; ++i) {
65 | len = i_00[i]-curr_aver;
66 | curr_disp += len*len;
67 | }
68 | curr_disp = curr_disp/9;
69 |
70 | if (curr_disp=FILTER_SIZE)&&(y>=FILTER_SIZE))
24 | {
25 |
26 | c = 0;
27 | for(int i=0;i255) {
130 | output[i_mul_4_new] =255;
131 | output[i_mul_4_new+1]=255;
132 | output[i_mul_4_new+2]=255;
133 | } else {
134 | output[i_mul_4_new] =aver;
135 | output[i_mul_4_new+1]=aver;
136 | output[i_mul_4_new+2]=aver;
137 | }
138 |
139 | output[i_mul_4_new+3]=input[i_mul_4+3];
140 | } else {
141 |
142 | output[i_mul_4_new] = 0;
143 | output[i_mul_4_new+1]= 0;
144 | output[i_mul_4_new+2]= 0;
145 | output[i_mul_4_new+3]= 0;
146 | }
147 |
148 | }
--------------------------------------------------------------------------------
/Example4/DELPHI_LOG.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example4/DELPHI_LOG.log
--------------------------------------------------------------------------------
/Example4/Example4.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example4/Example4.bmp
--------------------------------------------------------------------------------
/Example4/Example4.cfg:
--------------------------------------------------------------------------------
1 | -$A8
2 | -$B-
3 | -$C+
4 | -$D+
5 | -$E-
6 | -$F-
7 | -$G+
8 | -$H+
9 | -$I+
10 | -$J-
11 | -$K-
12 | -$L+
13 | -$M-
14 | -$N+
15 | -$O+
16 | -$P+
17 | -$Q-
18 | -$R-
19 | -$S-
20 | -$T-
21 | -$U-
22 | -$V+
23 | -$W-
24 | -$X+
25 | -$YD
26 | -$Z1
27 | -cg
28 | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29 | -H+
30 | -W+
31 | -M
32 | -$M16384,1048576
33 | -K$00400000
34 | -LE"c:\program files\borland\delphi6\Projects\Bpl"
35 | -LN"c:\program files\borland\delphi6\Projects\Bpl"
36 |
--------------------------------------------------------------------------------
/Example4/Example4.cl:
--------------------------------------------------------------------------------
1 | __constant sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE |
2 | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
3 |
4 | __kernel void main(read_only image2d_t src_image,
5 | write_only image2d_t dst_image) {
6 |
7 | /* Compute value to be subtracted from each pixel */
8 | uint offset = get_global_id(1) * 0x4000 + get_global_id(0) * 0x1000;
9 | uint4 offset_vec = (uint4)(offset, 0, 0, 0);
10 |
11 | /* Read pixel value */
12 | int2 coord = (int2)(get_global_id(0), get_global_id(1));
13 | uint4 pixel = read_imageui(src_image, sampler, coord);
14 |
15 | /* Subtract offset from pixel */
16 | pixel -= offset_vec;
17 |
18 | /* Write new pixel value to output */
19 | write_imageui(dst_image, coord, pixel);
20 | }
--------------------------------------------------------------------------------
/Example4/Example4.dof:
--------------------------------------------------------------------------------
1 | [FileVersion]
2 | Version=6.0
3 | [Compiler]
4 | A=8
5 | B=0
6 | C=1
7 | D=1
8 | E=0
9 | F=0
10 | G=1
11 | H=1
12 | I=1
13 | J=0
14 | K=0
15 | L=1
16 | M=0
17 | N=1
18 | O=1
19 | P=1
20 | Q=0
21 | R=0
22 | S=0
23 | T=0
24 | U=0
25 | V=1
26 | W=0
27 | X=1
28 | Y=1
29 | Z=1
30 | ShowHints=1
31 | ShowWarnings=1
32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33 | [Linker]
34 | MapFile=0
35 | OutputObjs=0
36 | ConsoleApp=1
37 | DebugInfo=0
38 | RemoteSymbols=0
39 | MinStackSize=16384
40 | MaxStackSize=1048576
41 | ImageBase=4194304
42 | ExeDescription=
43 | [Directories]
44 | OutputDir=
45 | UnitOutputDir=
46 | PackageDLLOutputDir=
47 | PackageDCPOutputDir=
48 | SearchPath=
49 | Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
50 | Conditionals=
51 | DebugSourceDirs=
52 | UsePackages=0
53 | [Parameters]
54 | RunParams=
55 | HostApplication=
56 | Launcher=
57 | UseLauncher=0
58 | DebugCWD=
59 | [Language]
60 | ActiveLang=
61 | ProjectLang=
62 | RootDir=C:\Program Files\Borland\Delphi6\Bin\
63 | [Version Info]
64 | IncludeVerInfo=0
65 | AutoIncBuild=0
66 | MajorVer=1
67 | MinorVer=0
68 | Release=0
69 | Build=0
70 | Debug=0
71 | PreRelease=0
72 | Special=0
73 | Private=0
74 | DLL=0
75 | Locale=1058
76 | CodePage=1251
77 | [Version Info Keys]
78 | CompanyName=
79 | FileDescription=
80 | FileVersion=1.0.0.0
81 | InternalName=
82 | LegalCopyright=
83 | LegalTrademarks=
84 | OriginalFilename=
85 | ProductName=
86 | ProductVersion=1.0.0.0
87 | Comments=
88 |
--------------------------------------------------------------------------------
/Example4/Example4.dpr:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : Example4.dpr *)
8 | (* last modify : 10.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | program Example4;
25 |
26 | {$APPTYPE CONSOLE}
27 | {$INCLUDE ..\Libs\OpenCL\OpenCL.inc}
28 |
29 | uses
30 | CL_platform in '..\Libs\OpenCL\CL_platform.pas',
31 | CL in '..\Libs\OpenCL\CL.pas',
32 | CL_GL in '..\Libs\OpenCL\CL_GL.pas',
33 | DelphiCL in '..\Libs\OpenCL\DelphiCL.pas',
34 | dglOpenGL in '..\Libs\dglOpenGL.pas',
35 | SimpleImageLoader in '..\Libs\OpenCL\SimpleImageLoader.pas',
36 | Graphics,
37 | SysUtils;
38 |
39 | const
40 | InputFileName = 'Lena.bmp';
41 | OutputFileName = 'Example4.bmp';
42 |
43 | var
44 | Platforms: TDCLPlatforms;
45 | CommandQueue: TDCLCommandQueue;
46 | MainProgram: TDCLProgram;
47 | Kernel : TDCLKernel;
48 | InputImage,OutputImage: TDCLImage2D;
49 | ImageLoader: TImageLoader;
50 | begin
51 | InitOpenCL();
52 |
53 | Platforms := TDCLPlatforms.Create();
54 | with Platforms.Platforms[0]^.DeviceWithMaxClockFrequency^ do
55 | begin
56 | CommandQueue:= CreateCommandQueue();
57 | ImageLoader:= TImageLoader.Create(ExtractFilePath(ParamStr(0))+InputFileName);
58 | with ImageLoader do InputImage:= CreateImage2D(Format,Width,Height,0,ImageLoader.Pointer,[mfReadOnly, mfUseHostPtr]);
59 | with ImageLoader do OutputImage:= CreateImage2D(Format,Width,Height,0,nil,[mfReadWrite, mfAllocHostPtr]);
60 | MainProgram := CreateProgram(ExtractFilePath(ParamStr(0))+'Example4.cl');
61 | Kernel := MainProgram.CreateKernel('main');
62 | Kernel.SetArg(0,InputImage);
63 | Kernel.SetArg(1,OutputImage);
64 | CommandQueue.Execute(Kernel,[OutputImage.Width,OutputImage.Height]);
65 | ImageLoader.Resize(OutputImage.Width,OutputImage.Height);//Dispose and Get Memory
66 | CommandQueue.ReadImage2D(OutputImage,ImageLoader.Pointer);
67 | ImageLoader.SaveToFile(ExtractFilePath(ParamStr(0))+OutputFileName);
68 | FreeAndNil(ImageLoader);
69 | FreeAndNil(Kernel);
70 | FreeAndNil(MainProgram);
71 | FreeAndNil(InputImage);
72 | FreeAndNil(OutputImage);
73 | FreeAndNil(CommandQueue);
74 | end;
75 | FreeAndNil(Platforms);
76 |
77 | Writeln('press any key...');
78 | Readln;
79 | end.
80 |
--------------------------------------------------------------------------------
/Example4/Example4.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {CC1B28A1-4336-4FB6-A6CF-45E5ABC577F1}
4 | Example4.dpr
5 | Debug
6 | DCC32
7 | 12.0
8 |
9 |
10 | true
11 |
12 |
13 | true
14 | Base
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | 00400000
24 | vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
25 | Example4.exe
26 | WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias)
27 | x86
28 | 1
29 | true
30 | false
31 | false
32 | false
33 | false
34 |
35 |
36 | false
37 | RELEASE;$(DCC_Define)
38 | 0
39 | false
40 |
41 |
42 | DEBUG;$(DCC_Define)
43 |
44 |
45 |
46 | MainSource
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | Base
56 |
57 |
58 | Cfg_2
59 | Base
60 |
61 |
62 | Cfg_1
63 | Base
64 |
65 |
66 |
67 |
68 | Delphi.Personality.12
69 | VCLApplication
70 |
71 |
72 |
73 | Example4.dpr
74 |
75 |
76 | False
77 | True
78 | False
79 |
80 |
81 | ..\..\svn\Example4\
82 |
83 |
84 | False
85 | False
86 | 1
87 | 0
88 | 0
89 | 0
90 | False
91 | False
92 | False
93 | False
94 | False
95 | 1058
96 | 1251
97 |
98 |
99 |
100 |
101 | 1.0.0.0
102 |
103 |
104 |
105 |
106 |
107 | 1.0.0.0
108 |
109 |
110 |
111 |
112 | 12
113 |
114 |
115 |
--------------------------------------------------------------------------------
/Example4/Example4.dproj.local:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Example4/Example4.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example4/Example4.exe
--------------------------------------------------------------------------------
/Example4/Example4.identcache:
--------------------------------------------------------------------------------
1 | ,J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL.pas /J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_GL.pas 2J:\OpenCL_samples\svn\svn\Libs\OpenCL\DelphiCL.pas ,J:\OpenCL_samples\svn\svn\Libs\dglOpenGL.pas /J:\OpenCL_samples\svn\svn\Example4\Example4.dpr ;J:\OpenCL_samples\svn\svn\Libs\OpenCL\SimpleImageLoader.pas 5J:\OpenCL_samples\svn\svn\Libs\OpenCL\CL_platform.pas
--------------------------------------------------------------------------------
/Example4/Lena.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example4/Lena.bmp
--------------------------------------------------------------------------------
/Example5/DELPHI_LOG.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example5/DELPHI_LOG.log
--------------------------------------------------------------------------------
/Example5/Example5.cfg:
--------------------------------------------------------------------------------
1 | -$A8
2 | -$B-
3 | -$C+
4 | -$D+
5 | -$E-
6 | -$F-
7 | -$G+
8 | -$H+
9 | -$I+
10 | -$J-
11 | -$K-
12 | -$L+
13 | -$M-
14 | -$N+
15 | -$O+
16 | -$P+
17 | -$Q-
18 | -$R-
19 | -$S-
20 | -$T-
21 | -$U-
22 | -$V+
23 | -$W-
24 | -$X+
25 | -$YD
26 | -$Z1
27 | -cg
28 | -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29 | -H+
30 | -W+
31 | -M
32 | -$M16384,1048576
33 | -K$00400000
34 | -LE"c:\program files\borland\delphi6\Projects\Bpl"
35 | -LN"c:\program files\borland\delphi6\Projects\Bpl"
36 |
--------------------------------------------------------------------------------
/Example5/Example5.dof:
--------------------------------------------------------------------------------
1 | [FileVersion]
2 | Version=6.0
3 | [Compiler]
4 | A=8
5 | B=0
6 | C=1
7 | D=1
8 | E=0
9 | F=0
10 | G=1
11 | H=1
12 | I=1
13 | J=0
14 | K=0
15 | L=1
16 | M=0
17 | N=1
18 | O=1
19 | P=1
20 | Q=0
21 | R=0
22 | S=0
23 | T=0
24 | U=0
25 | V=1
26 | W=0
27 | X=1
28 | Y=1
29 | Z=1
30 | ShowHints=1
31 | ShowWarnings=1
32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33 | [Linker]
34 | MapFile=0
35 | OutputObjs=0
36 | ConsoleApp=1
37 | DebugInfo=0
38 | RemoteSymbols=0
39 | MinStackSize=16384
40 | MaxStackSize=1048576
41 | ImageBase=4194304
42 | ExeDescription=
43 | [Directories]
44 | OutputDir=
45 | UnitOutputDir=
46 | PackageDLLOutputDir=
47 | PackageDCPOutputDir=
48 | SearchPath=
49 | Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;vcldbx;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;ADOX
50 | Conditionals=
51 | DebugSourceDirs=
52 | UsePackages=0
53 | [Parameters]
54 | RunParams=
55 | HostApplication=
56 | Launcher=
57 | UseLauncher=0
58 | DebugCWD=
59 | [Language]
60 | ActiveLang=
61 | ProjectLang=
62 | RootDir=C:\Program Files\Borland\Delphi6\Bin\
63 | [Version Info]
64 | IncludeVerInfo=0
65 | AutoIncBuild=0
66 | MajorVer=1
67 | MinorVer=0
68 | Release=0
69 | Build=0
70 | Debug=0
71 | PreRelease=0
72 | Special=0
73 | Private=0
74 | DLL=0
75 | Locale=1058
76 | CodePage=1251
77 | [Version Info Keys]
78 | CompanyName=
79 | FileDescription=
80 | FileVersion=1.0.0.0
81 | InternalName=
82 | LegalCopyright=
83 | LegalTrademarks=
84 | OriginalFilename=
85 | ProductName=
86 | ProductVersion=1.0.0.0
87 | Comments=
88 |
--------------------------------------------------------------------------------
/Example5/Example5.dpr:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : Example5.dpr *)
8 | (* last modify : 24.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | program Example5;
25 |
26 | uses
27 | CL_platform in '..\Libs\OpenCL\CL_platform.pas',
28 | CL in '..\Libs\OpenCL\CL.pas',
29 | CL_GL in '..\Libs\OpenCL\CL_GL.pas',
30 | DelphiCL in '..\Libs\OpenCL\DelphiCL.pas',
31 | SimpleImageLoader in '..\Libs\OpenCL\SimpleImageLoader.pas',
32 | dglOpenGL in '..\Libs\dglOpenGL.pas',
33 | Forms,
34 | MainUnit in 'MainUnit.pas' {fMain};
35 |
36 | {$R *.res}
37 |
38 | begin
39 | Application.Initialize;
40 | Application.CreateForm(TfMain, fMain);
41 | Application.Run;
42 | end.
43 |
--------------------------------------------------------------------------------
/Example5/Example5.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example5/Example5.exe
--------------------------------------------------------------------------------
/Example5/Example5.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example5/Example5.res
--------------------------------------------------------------------------------
/Example5/MainUnit.dcu:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example5/MainUnit.dcu
--------------------------------------------------------------------------------
/Example5/MainUnit.ddp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/Example5/MainUnit.ddp
--------------------------------------------------------------------------------
/Example5/MainUnit.dfm:
--------------------------------------------------------------------------------
1 | object fMain: TfMain
2 | Left = 378
3 | Top = 138
4 | BorderStyle = bsDialog
5 | Caption = 'SimpleGL'
6 | ClientHeight = 487
7 | ClientWidth = 506
8 | Color = clBtnFace
9 | Font.Charset = DEFAULT_CHARSET
10 | Font.Color = clWindowText
11 | Font.Height = -11
12 | Font.Name = 'MS Sans Serif'
13 | Font.Style = []
14 | OldCreateOrder = False
15 | OnCreate = FormCreate
16 | OnDestroy = FormDestroy
17 | OnKeyPress = FormKeyPress
18 | OnMouseDown = FormMouseDown
19 | OnMouseUp = FormMouseUp
20 | PixelsPerInch = 96
21 | TextHeight = 13
22 | object tRecalculate: TTimer
23 | Enabled = False
24 | Interval = 100
25 | OnTimer = tRecalculateTimer
26 | Left = 96
27 | Top = 80
28 | end
29 | end
30 |
--------------------------------------------------------------------------------
/Example5/MainUnit.pas:
--------------------------------------------------------------------------------
1 | (************************************************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi *)
4 | (* *)
5 | (* project site : http://code.google.com/p/delphi-opencl/ *)
6 | (* *)
7 | (* file name : MainUnit.pas *)
8 | (* last modify : 24.12.11 *)
9 | (* license : BSD *)
10 | (* *)
11 | (* created by : Maksym Tymkovych *)
12 | (* (niello) *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (* and : Alexander Kiselev *)
18 | (* (Igroman) *)
19 | (* Site : http://Igroman14.livejournal.com *)
20 | (* e-mail : Igroman14@yandex.ru *)
21 | (* ICQ : 207-381-695 *)
22 | (* *)
23 | (************************delphi-opencl2010-2011**************************)
24 | unit MainUnit;
25 |
26 | interface
27 |
28 | {$DEFINE GL_INTEROP}
29 |
30 | uses
31 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
32 | ExtCtrls,
33 | Dialogs,
34 | dglOpenGL,
35 | cl_platform,CL,cl_gl,DelphiCL;
36 |
37 | type
38 | TfMain = class(TForm)
39 | tRecalculate: TTimer;
40 | procedure FormCreate(Sender: TObject);
41 | procedure FormDestroy(Sender: TObject);
42 | procedure FormKeyPress(Sender: TObject; var Key: Char);
43 | procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
44 | Shift: TShiftState; X, Y: Integer);
45 | procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
46 | Shift: TShiftState; X, Y: Integer);
47 | procedure tRecalculateTimer(Sender: TObject);
48 | private
49 | { Private declarations }
50 | FDC: HDC;
51 | FRC: HGLRC;
52 | procedure InitGL();
53 | procedure IdleHandler(Sender : TObject; var Done : Boolean);
54 | procedure Render();
55 | procedure CreateVBO(const VBO: PGLuint);
56 | procedure DeleteVBO(const VBO: PGLuint);
57 | procedure Motion(x,y: Integer);
58 | procedure CleanUp();
59 | procedure DisplayGL();
60 | procedure runKernel();
61 | public
62 | { Public declarations }
63 | end;
64 |
65 | var
66 | fMain: TfMain;
67 |
68 | Platforms: TDCLPlatforms;
69 | Device: PDCLDevice;
70 | Command: TDCLCommandQueue;
71 | Pro: TDCLProgram;
72 | Kernel: TDCLKernel;
73 | vbo_cl: TDCLBuffer;
74 |
75 | vbo: TGLuint;
76 | rotate_x: TCL_float = 0.0;
77 | rotate_y: TCL_float = 0.0;
78 | translate_z: TCL_float = -3.0;
79 | anim: TCL_float = 0.0;
80 |
81 | iFrameCount: Integer = 0;
82 | iFrameTrigger: Integer = 90;
83 | iFramePerSec: Integer = 0;
84 | iTestSets: Integer = 3;
85 |
86 | mouse_old_x, mouse_old_y: Integer;
87 | mouse_buttons: Integer = 0;
88 |
89 | const
90 | iRefFrameNumber: Integer = 4;
91 |
92 | var
93 | g_Index: Integer = 0;
94 | bQATest: Boolean = False;
95 | g_bFBODisplay: Boolean = False;
96 | bNoPrompt: Boolean = False;
97 |
98 | const window_width = 512;
99 | const window_height = 512;
100 | const mesh_width: TCL_uint = 256;
101 | const mesh_height: TCL_uint = 256;
102 |
103 | implementation
104 |
105 | {$R *.dfm}
106 |
107 | procedure TfMain.FormCreate(Sender: TObject);
108 | begin
109 | FDC:= GetDC(Handle);
110 | if (not InitOpenGL)or(not InitOpenCL) then Application.Terminate;
111 | ReadExtensions;
112 | InitCL_GL;
113 | FRC:= CreateRenderingContext(FDC, [opDoubleBuffered], 32, 24,
114 | 0,0,0,0);
115 | ActivateRenderingContext(FDC, FRC);
116 | InitGL();
117 |
118 | Platforms := TDCLPlatforms.Create();
119 | Device := Platforms.Platforms[0]^.DeviceWithMaxClockFrequency;
120 | Command := Device.CreateCommandQueue({$IFDEF GL_INTEROP}Device.CreateContextGL(){$ENDIF});
121 | Pro := Device.CreateProgram(ExtractFilePath(Application.ExeName)+'simpleGL.cl');
122 | Kernel := Pro.CreateKernel('sine_wave');
123 | CreateVBO(@vbo);
124 | Kernel.SetArg(0,vbo_cl);
125 | Kernel.SetArg(1,SizeOf(TCL_uint),@mesh_width);
126 | Kernel.SetArg(2,SizeOf(TCL_uint),@mesh_height);
127 | Command.Execute(Kernel,[mesh_width,mesh_height]);
128 | tRecalculate.Enabled := True;
129 | Application.OnIdle := IdleHandler;
130 | end;
131 |
132 | procedure TfMain.IdleHandler(Sender: TObject; var Done: Boolean);
133 | begin
134 | Render;
135 | Sleep(1);
136 | Done := False;
137 | end;
138 |
139 | procedure TfMain.InitGL;
140 | begin
141 | glClearColor(0.0, 0.0, 0.0, 1.0);
142 | glDisable(GL_DEPTH_TEST);
143 | glViewport(0, 0, window_width, window_height);
144 | glMatrixMode(GL_PROJECTION);
145 | glLoadIdentity();
146 | gluPerspective(60.0, window_width / window_height, 0.1, 10.0);
147 | glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
148 | glMatrixMode(GL_MODELVIEW);
149 | glLoadIdentity();
150 | glTranslatef(0.0, 0.0, translate_z);
151 | glRotatef(rotate_x, 1.0, 0.0, 0.0);
152 | glRotatef(rotate_y, 0.0, 1.0, 0.0);
153 | end;
154 |
155 | procedure TfMain.FormDestroy(Sender: TObject);
156 | begin
157 | tRecalculate.Enabled := False;
158 | CleanUp();
159 | DeactivateRenderingContext;
160 | DestroyRenderingContext(FRC);
161 | ReleaseDC(Handle, FDC);
162 | end;
163 |
164 | procedure TfMain.Render;
165 | begin
166 | DisplayGL();
167 | SwapBuffers(FDC);
168 | end;
169 |
170 | procedure TfMain.FormKeyPress(Sender: TObject; var Key: Char);
171 | begin
172 | if (Key=#27)or(Key='Q')or(Key='q')then Application.Terminate;
173 | end;
174 |
175 | procedure TfMain.CreateVBO(const VBO: PGLuint);
176 | var
177 | size: TGLsizei;
178 | begin
179 | glGenBuffers(1, vbo);
180 | glBindBuffer(GL_ARRAY_BUFFER, vbo^);
181 | size := mesh_width * mesh_height * 4 * sizeof(TCL_float);
182 | glBufferData(GL_ARRAY_BUFFER, size, nil, GL_DYNAMIC_DRAW);
183 | {$IFDEF GL_INTEROP}
184 | vbo_cl := Device.CreateFromGLBuffer(vbo,[mfWriteOnly]);
185 | {$ELSE}
186 | vbo_cl := Device.CreateBuffer(size,nil,[mfWriteOnly]);
187 | {$ENDIF}
188 | end;
189 |
190 | procedure TfMain.DeleteVBO(const VBO: PGLuint);
191 | begin
192 | FreeAndNil(vbo_cl);
193 | glBindBuffer(1, vbo^);
194 | glDeleteBuffers(1, vbo);
195 | vbo^ := 0;
196 | end;
197 |
198 | procedure TfMain.CleanUp;
199 | begin
200 | DeleteVBO(@vbo);
201 | FreeAndNil(Kernel);
202 | FreeAndNil(Pro);
203 | FreeAndNil(Command);
204 | FreeAndNil(Platforms);
205 | end;
206 |
207 | procedure TfMain.Motion(x, y: Integer);
208 | var
209 | dx,dy: TCL_float;
210 | begin
211 | dx := x - mouse_old_x;
212 | dy := y - mouse_old_y;
213 | if (mouse_buttons and 1)<>0 then
214 | begin
215 | rotate_x := rotate_x + dy * 0.2;
216 | rotate_y := rotate_y + dx * 0.2;
217 | end
218 | else
219 | if (mouse_buttons and 4)<>0 then
220 | begin
221 | translate_z := translate_z + dy * 0.01;
222 | end;
223 | mouse_old_x := x;
224 | mouse_old_y := y;
225 | glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
226 | glMatrixMode(GL_MODELVIEW);
227 | glLoadIdentity();
228 | glTranslatef(0.0, 0.0, translate_z);
229 | glRotatef(rotate_x, 1.0, 0.0, 0.0);
230 | glRotatef(rotate_y, 0.0, 1.0, 0.0);
231 | end;
232 |
233 | procedure TfMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
234 | Shift: TShiftState; X, Y: Integer);
235 | begin
236 | mouse_buttons := mouse_buttons or (1 shl Integer(button));
237 | mouse_old_x := x;
238 | mouse_old_y := y;
239 | end;
240 |
241 | procedure TfMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
242 | Shift: TShiftState; X, Y: Integer);
243 | begin
244 | mouse_buttons := 0;
245 | mouse_old_x := x;
246 | mouse_old_y := y;
247 | end;
248 |
249 | procedure TfMain.DisplayGL;
250 | begin
251 | glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
252 | glBindBuffer(GL_ARRAY_BUFFER, vbo);
253 | glVertexPointer(4, GL_FLOAT, 0, nil);
254 | glEnableClientState(GL_VERTEX_ARRAY);
255 | glColor3f(1.0, 0.0, 0.0);
256 | glDrawArrays(GL_POINTS, 0, mesh_width * mesh_height);
257 | glDisableClientState(GL_VERTEX_ARRAY);
258 | end;
259 |
260 | procedure TfMain.runKernel;
261 | var
262 | szGlobalWorkSize: Array [0..1] of TSize_t;
263 | {$IFNDEF GL_INTEROP}
264 | ptr: PGLvoid;
265 | {$ENDIF}
266 | begin
267 | {$IFDEF GL_INTEROP}
268 | Command.AcquireGLObject(vbo_cl);
269 | {$ENDIF}
270 | szGlobalWorkSize[0] := mesh_width;
271 | szGlobalWorkSize[1] := mesh_height;
272 | Kernel.SetArg(3,SizeOf(TCL_float),@anim);
273 | Command.Execute(Kernel,szGlobalWorkSize);
274 | {$IFDEF GL_INTEROP}
275 | Command.ReleaseGLObject(vbo_cl);
276 | {$ELSE}
277 | glBindBufferARB(GL_ARRAY_BUFFER, vbo);
278 | ptr := glMapBufferARB(GL_ARRAY_BUFFER,GL_WRITE_ONLY_ARB);
279 | Command.ReadBuffer(vbo_cl,SizeOf(TCL_float)*4 * mesh_height * mesh_width,ptr);
280 | glUnmapBufferARB(GL_ARRAY_BUFFER);
281 | {$ENDIF}
282 | end;
283 |
284 | procedure TfMain.tRecalculateTimer(Sender: TObject);
285 | begin
286 | Motion(Mouse.CursorPos.X,Mouse.CursorPos.Y);
287 | anim := anim + 0.1;
288 | runKernel();
289 | end;
290 |
291 | end.
292 |
--------------------------------------------------------------------------------
/Example5/simpleGL.cl:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 1993-2009 NVIDIA Corporation. All rights reserved.
3 | *
4 | * NVIDIA Corporation and its licensors retain all intellectual property and
5 | * proprietary rights in and to this software and related documentation.
6 | * Any use, reproduction, disclosure, or distribution of this software
7 | * and related documentation without an express license agreement from
8 | * NVIDIA Corporation is strictly prohibited.
9 | *
10 | * Please refer to the applicable NVIDIA end user license agreement (EULA)
11 | * associated with this source code for terms and conditions that govern
12 | * your use of this NVIDIA software.
13 | *
14 | */
15 |
16 | /* This example demonstrates how to use the OpenCL/OpenGL bindings */
17 |
18 | ///////////////////////////////////////////////////////////////////////////////
19 | //! Simple kernel to modify vertex positions in sine wave pattern
20 | //! @param data data in global memory
21 | ///////////////////////////////////////////////////////////////////////////////
22 | __kernel void sine_wave(__global float4* pos, unsigned int width, unsigned int height, float time)
23 | {
24 | unsigned int x = get_global_id(0);
25 | unsigned int y = get_global_id(1);
26 |
27 | // calculate uv coordinates
28 | float u = x / (float) width;
29 | float v = y / (float) height;
30 | u = u*2.0f - 1.0f;
31 | v = v*2.0f - 1.0f;
32 |
33 | // calculate simple sine wave pattern
34 | float freq = 4.0f;
35 | float w = sin(u*freq + time) * cos(v*freq + time) * 0.5f;
36 |
37 | // write output vertex
38 | pos[y*width+x] = (float4)(u, w, v, 1.0f);
39 | }
40 |
--------------------------------------------------------------------------------
/Libs/OpenCL/CL_d3d11.pas:
--------------------------------------------------------------------------------
1 | (*******************************************************************************
2 | * Copyright (c) 2008-2010 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (************************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : CL_d3d11.pas *)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (* updated by : Alexander Kiselev *)
40 | (* (Igroman) *)
41 | (* Site : http://Igroman14.livejournal.com *)
42 | (* e-mail : Igroman14@yandex.ru *)
43 | (* ICQ : 207-381-695 *)
44 | (* (c) 2010 *)
45 | (* *)
46 | (***********Copyright (c) niello 2008-2011*******)
47 | unit CL_d3d11;
48 |
49 | interface
50 |
51 | {$INCLUDE OpenCL.inc}
52 |
53 | uses
54 | CL_platform,
55 | CL;
56 |
57 | (******************************************************************************
58 | * cl_khr_d3d11_sharing *)
59 | const
60 | cl_khr_d3d11_sharing = 1;
61 |
62 | type
63 |
64 | TCL_d3d11_device_source_khr = TCL_uint;
65 | PCL_d3d11_device_source_khr = ^TCL_d3d11_device_source_khr;
66 |
67 | TCL_d3d11_device_set_khr = TCL_uint;
68 | PCL_d3d11_device_set_khr = ^TCL_d3d11_device_set_khr;
69 |
70 | (******************************************************************************)
71 | const
72 | // Error Codes
73 | CL_INVALID_D3D11_DEVICE_KHR = -1006;
74 | CL_INVALID_D3D11_RESOURCE_KHR = -1007;
75 | CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR = -1008;
76 | CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR = -1009;
77 |
78 | // cl_d3d11_device_source
79 | CL_D3D11_DEVICE_KHR = $4019;
80 | CL_D3D11_DXGI_ADAPTER_KHR = $401A;
81 |
82 | // cl_d3d11_device_set
83 | CL_PREFERRED_DEVICES_FOR_D3D11_KHR = $401B;
84 | CL_ALL_DEVICES_FOR_D3D11_KHR = $401C;
85 |
86 | // cl_context_info
87 | CL_CONTEXT_D3D11_DEVICE_KHR = $401D;
88 | CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR = $402D;
89 |
90 | // cl_mem_info
91 | CL_MEM_D3D11_RESOURCE_KHR = $401E;
92 |
93 | // cl_image_info
94 | CL_IMAGE_D3D11_SUBRESOURCE_KHR = $401F;
95 |
96 | // cl_command_type
97 | CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR = $4020;
98 | CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR = $4021;
99 |
100 | (******************************************************************************)
101 |
102 |
103 | {$IFDEF CL_VERSION_1_0}
104 | type
105 | TclGetDeviceIDsFromD3D11KHR_fn = function (
106 | cl_platform_id platform,
107 | cl_d3d11_device_source_khr d3d_device_source,
108 | void * d3d_object,
109 | cl_d3d11_device_set_khr d3d_device_set,
110 | cl_uint num_entries,
111 | cl_device_id * devices,
112 | cl_uint * num_devices
113 | ): TCL_int;
114 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
115 |
116 | TclCreateFromD3D11BufferKHR_fn = function (
117 | cl_context context,
118 | cl_mem_flags flags,
119 | ID3D11Buffer * resource,
120 | cl_int * errcode_ret
121 | ): PCL_mem;
122 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
123 |
124 | TclCreateFromD3D11Texture2DKHR_fn = function (
125 | cl_context context,
126 | cl_mem_flags flags,
127 | ID3D11Texture2D * resource,
128 | UINT subresource,
129 | cl_int * errcode_ret
130 | ): PCL_mem;
131 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
132 |
133 | TclCreateFromD3D11Texture3DKHR_fn = function (
134 | cl_context context,
135 | cl_mem_flags flags,
136 | ID3D11Texture3D * resource,
137 | UINT subresource,
138 | cl_int * errcode_ret
139 | ): PCL_mem;
140 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
141 |
142 | TclEnqueueAcquireD3D11ObjectsKHR_fn = function (
143 | cl_command_queue command_queue,
144 | cl_uint num_objects,
145 | const cl_mem * mem_objects,
146 | cl_uint num_events_in_wait_list,
147 | const cl_event * event_wait_list,
148 | cl_event * event
149 | ): TCL_int;
150 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
151 |
152 | TclEnqueueReleaseD3D11ObjectsKHR_fn = function (
153 | cl_command_queue command_queue,
154 | cl_uint num_objects,
155 | const cl_mem * mem_objects,
156 | cl_uint num_events_in_wait_list,
157 | const cl_event * event_wait_list,
158 | cl_event * event
159 | ): TCL_int;
160 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
161 | {$ENDIF}
162 |
163 |
164 |
165 | implementation
166 |
167 | end.
168 |
--------------------------------------------------------------------------------
/Libs/OpenCL/CL_dx9_media_sharing.pas:
--------------------------------------------------------------------------------
1 | (*******************************************************************************
2 | * Copyright (c) 2008-2012 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (************************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : CL_dx9_media_sharing.pas*)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (* updated by : Alexander Kiselev *)
40 | (* (Igroman) *)
41 | (* Site : http://Igroman14.livejournal.com *)
42 | (* e-mail : Igroman14@yandex.ru *)
43 | (* ICQ : 207-381-695 *)
44 | (* (c) 2010 *)
45 | (* *)
46 | (***********Copyright (c) niello 2008-2011*******)
47 | unit CL_dx9_media_sharing;
48 |
49 | interface
50 |
51 | {$INCLUDE OpenCL.inc}
52 |
53 | uses
54 | CL_platform,
55 | CL,
56 | Direct3D9;
57 |
58 | (******************************************************************************
59 | (* cl_khr_dx9_media_sharing *)
60 | const
61 | cl_khr_dx9_media_sharing = 1;
62 | type
63 |
64 | PIDirect3DSurface9 = ^IDirect3DSurface9;
65 |
66 | Pcl_dx9_surface_info_khr = ^Tcl_dx9_surface_info_khr;
67 | Tcl_dx9_surface_info_khr = packed record
68 | resource: PIDirect3DSurface9;
69 | shared_handle: THandle;
70 | end;
71 |
72 | (******************************************************************************)
73 | const
74 | // Error Codes
75 | CL_INVALID_DX9_MEDIA_ADAPTER_KHR = -1010;
76 | CL_INVALID_DX9_MEDIA_SURFACE_KHR = -1011;
77 | CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR = -1012;
78 | CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR = -1013;
79 |
80 | // cl_media_adapter_type_khr
81 | CL_ADAPTER_D3D9_KHR = $2020;
82 | CL_ADAPTER_D3D9EX_KHR = $2021;
83 | CL_ADAPTER_DXVA_KHR = $2022;
84 |
85 | // cl_media_adapter_set_khr
86 | CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = $2023;
87 | CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = $2024;
88 |
89 | // cl_context_info
90 | CL_CONTEXT_D3D9_DEVICE_KHR = $2025;
91 | CL_CONTEXT_D3D9EX_DEVICE_KHR = $2026;
92 | CL_CONTEXT_DXVA_DEVICE_KHR = $2027;
93 |
94 | // cl_mem_info
95 | CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR = $2028;
96 | CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR = $2029;
97 |
98 | // cl_image_info
99 | CL_IMAGE_DX9_MEDIA_PLANE_KHR = $202A;
100 |
101 | // cl_command_type
102 | CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR = $202B;
103 | CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR = $202C;
104 |
105 | (******************************************************************************)
106 |
107 | {$IFDEF CL_VERSION_1_2}
108 |
109 | type
110 | TclGetDeviceIDsForDX9MediaAdapterKHR_fn = function
111 | (
112 | _platform: Pcl_platform_id;
113 | //media_adapter_type: Tcl_dx9_media_adapter_type_khr;
114 | //media_adapter: Pointer; media_adapter_set: Tcl_dx9_media_adapter_set_khr;
115 | num_entries: Tcl_uint; devices: PPcl_device_id;
116 | num_devices: Pcl_uint
117 | ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
118 |
119 | TclCreateFromDX9MediaSurfaceKHR_fn = function
120 | (
121 | context: Pcl_context;
122 | flags: Tcl_mem_flags;
123 | //adapter_type: Tcl_dx9_media_adapter_type_khr;
124 | surface_info: Pointer;
125 | plane: Tcl_uint;
126 | errcode_ret: Pcl_int
127 | ): PCL_mem; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
128 |
129 | TclEnqueueAcquireDX9MediaSurfacesKHR_fn = function
130 | (
131 | command_queue: Pcl_command_queue;
132 | num_objects: Tcl_uint;
133 | const mem_objects: PPcl_mem;
134 | num_events_in_wait_list: Tcl_uint;
135 | const event_wait_list: PPcl_event;
136 | event: PPcl_event
137 | ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
138 |
139 | TclEnqueueReleaseDX9MediaSurfacesKHR_fn = function
140 | (
141 | command_queue: Pcl_command_queue;
142 | num_objects: Tcl_uint;
143 | const mem_objects: PPcl_mem;
144 | num_events_in_wait_list: Tcl_uint;
145 | const event_wait_list: PPcl_event;
146 | event: PPcl_event
147 | ): TCL_int; {$IFDEF CDECL} cdecl {$ELSE} stdcall{$ENDIF};
148 |
149 | {$ENDIF}
150 |
151 | {$IFDEF CL_VERSION_1_2}
152 | var
153 | clGetDeviceIDsForDX9MediaAdapterKHR_fn: TclGetDeviceIDsForDX9MediaAdapterKHR_fn;
154 | clCreateFromDX9MediaSurfaceKHR_fn: TclCreateFromDX9MediaSurfaceKHR_fn;
155 | clEnqueueAcquireDX9MediaSurfacesKHR_fn: TclEnqueueAcquireDX9MediaSurfacesKHR_fn;
156 | clEnqueueReleaseDX9MediaSurfacesKHR_fn: TclEnqueueReleaseDX9MediaSurfacesKHR_fn;
157 | {$ENDIF}
158 |
159 | function InitCL_DX9MediaSharing: Boolean;
160 |
161 | implementation
162 |
163 | function InitCL_DX9MediaSharing: Boolean;
164 | begin
165 | Result := False;
166 | if OCL_LibHandle <> nil then
167 | begin
168 | {$IFDEF CL_VERSION_1_2}
169 | clGetDeviceIDsForDX9MediaAdapterKHR_fn := TclGetDeviceIDsForDX9MediaAdapterKHR_fn(oclGetProcAddress('clGetDeviceIDsForDX9MediaAdapterKHR_fn', OCL_LibHandle));
170 | clCreateFromDX9MediaSurfaceKHR_fn := TclCreateFromDX9MediaSurfaceKHR_fn(oclGetProcAddress('clCreateFromDX9MediaSurfaceKHR_fn', OCL_LibHandle));
171 | clEnqueueAcquireDX9MediaSurfacesKHR_fn := TclEnqueueAcquireDX9MediaSurfacesKHR_fn(oclGetProcAddress('clEnqueueAcquireDX9MediaSurfacesKHR_fn', OCL_LibHandle));
172 | clEnqueueReleaseDX9MediaSurfacesKHR_fn := TclEnqueueReleaseDX9MediaSurfacesKHR_fn(oclGetProcAddress('clEnqueueReleaseDX9MediaSurfacesKHR_fn', OCL_LibHandle));
173 | {$ENDIF}
174 | Result := True;
175 | end;
176 | end;
177 |
178 | end.
179 |
--------------------------------------------------------------------------------
/Libs/OpenCL/CL_gl_ext.pas:
--------------------------------------------------------------------------------
1 | (*******************************************************************************
2 | * Copyright (c) 2008-2010 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (************************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : CL_gl_ext.pas *)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (* updated by : Alexander Kiselev *)
40 | (* (Igroman) *)
41 | (* Site : http://Igroman14.livejournal.com *)
42 | (* e-mail : Igroman14@yandex.ru *)
43 | (* ICQ : 207-381-695 *)
44 | (* (c) 2010 *)
45 | (* *)
46 | (***********Copyright (c) niello 2008-2011*******)
47 |
48 | (* cl_gl_ext.h contains vendor (non-KHR) OpenCL extensions which have *)
49 | (* OpenGL dependencies. *)
50 | unit CL_gl_ext;
51 |
52 | interface
53 |
54 | {$INCLUDE OpenCL.inc}
55 |
56 | (*
57 | * cl_khr_gl_event extension
58 | * See section 9.9 in the OpenCL 1.1 spec for more information
59 | *)
60 |
61 | uses
62 | cl,
63 | OpenGL,
64 | cl_gl,
65 | cl_platform;
66 |
67 | {$IFDEF CL_VERSION_1_1}
68 | const
69 | CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR = $200D;
70 |
71 | type
72 | TclCreateEventFromGLsyncKHR = function(
73 | context: Pcl_context; (* context *)
74 | cl_GLsync: TCL_GLsync; (* cl_GLsync *)
75 | errcode_ret: Pcl_int (* errcode_ret *)
76 | ): PCL_event;
77 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
78 | var
79 | clCreateEventFromGLsyncKHR: TclCreateEventFromGLsyncKHR;
80 | {$ENDIF}
81 |
82 | function InitCL_GL_EXT: Boolean;
83 |
84 | implementation
85 |
86 | function InitCL_GL_EXT: Boolean;
87 | begin
88 | Result := False;
89 | if OCL_LibHandle <> nil then
90 | begin
91 | {$IFDEF CL_VERSION_1_1}
92 | clCreateEventFromGLsyncKHR := TclCreateEventFromGLsyncKHR(oclGetProcAddress('clCreateEventFromGLsyncKHR', OCL_LibHandle));
93 | {$ENDIF}
94 | Result := True;
95 | end;
96 | end;
97 |
98 | end.
99 |
--------------------------------------------------------------------------------
/Libs/OpenCL/DelphiCL.inc:
--------------------------------------------------------------------------------
1 | {$DEFINE LOGGING}
2 | {$DEFINE PROFILING}
--------------------------------------------------------------------------------
/Libs/OpenCL/OpenCL.inc:
--------------------------------------------------------------------------------
1 | (********************************************)
2 | (* *)
3 | (* OpenCL1.2 and Delphi and Windows *)
4 | (* *)
5 | (* created by : Maksym Tymkovych *)
6 | (* (niello) *)
7 | (* *)
8 | (* headers versions: 0.07 *)
9 | (* file name : OpenCL.inc *)
10 | (* last modify : 10.12.11 *)
11 | (* license : BSD *)
12 | (* *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (*********Copyright (c) niello 2008-2011*****)
18 |
19 |
20 | {$IFDEF MSWINDOWS}
21 | {$DEFINE WINDOWS}
22 | {$ENDIF}
23 | {$IFDEF WINDOWS}
24 | {$IF DEFINED(WIN32) or DEFINED(WIN64)}
25 | {$DEFINE WINDESKTOP}
26 | {$ELSE}
27 | {$DEFINE WINMOBILE}
28 | {$IFEND}
29 | {$DEFINE STDCALL}
30 | {$ENDIF}
31 | {$IFDEF LINUX}
32 | {$DEFINE CDECL}
33 | {$ENDIF}
34 | {$IFDEF DARWIN}
35 | {$IF DEFINED(iPHONESIM) or (DEFINED(DARWIN) and DEFINED(CPUARM))}
36 | {$DEFINE iOS}
37 | {$ELSE}
38 | {$DEFINE MACOSX}
39 | {$IFEND}
40 | {$DEFINE CDECL}
41 | {$ENDIF}
42 |
43 |
44 | {$DEFINE USE_LOG} //Use default procedure Writeln()
45 |
46 | //{$DEFINE PURE_OPENCL_1_0}
47 | {$DEFINE PURE_OPENCL_1_1} //Actual now
48 | //{$DEFINE PURE_OPENCL_1_2}
49 | //{$DEFINE PURE_OPENCL_2_0} //TODO: work in progress
50 |
51 | //{$DEFINE WITH_DEPERCATED_OPENCL_1_1}
52 | //{$DEFINE WITH_DEPERCATED_OPENCL_1_2}
53 | //{$DEFINE WITH_DEPERCATED_OPENCL_2_0}
54 |
55 |
56 | //use Defines PURE_OPENCL_1_0 or PURE_OPENCL_1_1 or PURE_OPENCL_1_2
57 | // WITH_DEPERCATED_OPENCL_1_1 or WITH_DEPERCATED_OPENCL_1_2
58 | //{$DEFINE CL_VERSION_1_1}
59 | //{$DEFINE CL_VERSION_1_2} //wait drivers support
60 | //{$DEFINE CL_USE_DEPRECATED_OPENCL_1_0_APIS}
61 | //{$DEFINE CL_USE_DEPRECATED_OPENCL_1_1_APIS}
62 | //{$DEFINE CL_USE_DEPRECATED_OPENCL_1_2_APIS}
63 | //{$DEFINE CL_USE_DEPRECATED_OPENCL_2_0_APIS} //next OpenCL API version
64 |
65 | {$IFDEF PURE_OPENCL_1_0}
66 | {$DEFINE CL_VERSION_1_0}
67 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_0_APIS}
68 |
69 | {$UNDEF CL_VERSION_1_1}
70 | {$UNDEF CL_VERSION_1_2}
71 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
72 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_2_APIS}
73 | {$UNDEF CL_USE_DEPRECATED_OPENCL_2_0_APIS}
74 | {$ENDIF}
75 |
76 | {$IFDEF PURE_OPENCL_1_1}
77 | {$DEFINE CL_VERSION_1_0}
78 | {$DEFINE CL_VERSION_1_1}
79 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_1_APIS}
80 |
81 | {$UNDEF CL_VERSION_1_2}
82 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_0_APIS}
83 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_2_APIS}
84 | {$UNDEF CL_USE_DEPRECATED_OPENCL_2_0_APIS}
85 | {$ENDIF}
86 |
87 | {$IFDEF PURE_OPENCL_1_2}
88 | {$DEFINE CL_VERSION_1_0}
89 | {$DEFINE CL_VERSION_1_1}
90 | {$DEFINE CL_VERSION_1_2}
91 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_2_APIS}
92 |
93 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_0_APIS}
94 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
95 | {$UNDEF CL_USE_DEPRECATED_OPENCL_2_0_APIS}
96 | {$ENDIF}
97 |
98 | {$IFDEF PURE_OPENCL_2_0}
99 | {$DEFINE CL_VERSION_1_0}
100 | {$DEFINE CL_VERSION_1_1}
101 | {$DEFINE CL_VERSION_1_2}
102 | {$DEFINE CL_VERSION_2_0}
103 | {$DEFINE CL_USE_DEPRECATED_OPENCL_2_0_APIS}
104 |
105 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_0_APIS}
106 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
107 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_2_APIS}
108 | {$ENDIF}
109 |
110 | {$IFDEF WITH_DEPERCATED_OPENCL_1_1}
111 | {$DEFINE CL_VERSION_1_0}
112 | {$DEFINE CL_VERSION_1_1}
113 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_1_APIS}
114 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_0_APIS}
115 |
116 | {$UNDEF CL_VERSION_1_2}
117 | {$UNDEF CL_VERSION_2_0}
118 | {$UNDEF CL_USE_DEPRECATED_OPENCL_1_2_APIS}
119 | {$UNDEF CL_USE_DEPRECATED_OPENCL_2_0_APIS}
120 | {$ENDIF}
121 |
122 |
123 | {$IFDEF WITH_DEPERCATED_OPENCL_1_2}
124 | {$DEFINE CL_VERSION_1_0}
125 | {$DEFINE CL_VERSION_1_1}
126 | {$DEFINE CL_VERSION_1_2}
127 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_1_APIS}
128 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_0_APIS}
129 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_2_APIS}
130 |
131 | {$UNDEF CL_VERSION_2_0}
132 | {$UNDEF CL_USE_DEPRECATED_OPENCL_2_0_APIS}
133 | {$ENDIF}
134 |
135 | {$IFDEF WITH_DEPERCATED_OPENCL_2_0}
136 | {$DEFINE CL_VERSION_1_0}
137 | {$DEFINE CL_VERSION_1_1}
138 | {$DEFINE CL_VERSION_1_2}
139 | {$DEFINE CL_VERSION_2_0}
140 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_1_APIS}
141 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_0_APIS}
142 | {$DEFINE CL_USE_DEPRECATED_OPENCL_1_2_APIS}
143 | {$DEFINE CL_USE_DEPRECATED_OPENCL_2_0_APIS}
144 | {$ENDIF}
145 |
146 |
147 |
148 | {$IFDEF FPC}
149 | {$MODE Delphi}
150 | {$ENDIF}
151 |
152 | {$IFNDEF FPC}
153 | {$IFDEF VER110}//Builder 3
154 | {$DEFINE DEFINE_8087CW_NOT_IMPLEMENTED}
155 | {$DEFINE DEFINE_UINT64_EQU_INT64}
156 | {$DEFINE DEFINE_REGION_NOT_IMPLEMENTED}
157 | {$ENDIF}
158 | {$IFDEF VER100}//Delphi3
159 | {$DEFINE DEFINE_8087CW_NOT_IMPLEMENTED}
160 | {$DEFINE DEFINE_UINT64_EQU_INT64}
161 | {$DEFINE DEFINE_REGION_NOT_IMPLEMENTED}
162 | {$ENDIF}
163 | {$IFDEF VER120}//Delphi 4
164 | {$DEFINE DEFINE_8087CW_NOT_IMPLEMENTED}
165 | {$DEFINE DEFINE_UINT64_EQU_INT64}
166 | {$DEFINE DEFINE_REGION_NOT_IMPLEMENTED}
167 | {$ENDIF}
168 | {$IFDEF VER130}//Delphi 5
169 | {$DEFINE DEFINE_UINT64_EQU_INT64}
170 | {$DEFINE DEFINE_UINT64_EQU_INT64}
171 | {$ENDIF}
172 | {$IFDEF VER140}//Delphi 6
173 | {$DEFINE DEFINE_UINT64_EQU_INT64}
174 | {$DEFINE DEFINE_REGION_NOT_IMPLEMENTED}
175 | {$ENDIF}
176 | {$IFDEF VER150}//Delphi 7
177 | {$DEFINE DEFINE_REGION_NOT_IMPLEMENTED}
178 | {$ENDIF}
179 | {$ENDIF}
180 |
181 |
182 |
183 |
184 |
185 |
--------------------------------------------------------------------------------
/Libs/OpenCL/SimpleImageLoader.pas:
--------------------------------------------------------------------------------
1 | (********************************************)
2 | (* *)
3 | (* DelphiCL *)
4 | (* *)
5 | (* created by : Maksym Tymkovych *)
6 | (* (niello) *)
7 | (* *)
8 | (* headers versions: 0.07 *)
9 | (* file name : SimpleImageLoader.pas*)
10 | (* last modify : 10.12.11 *)
11 | (* license : BSD *)
12 | (* *)
13 | (* Site : www.niello.org.ua *)
14 | (* e-mail : muxamed13@ukr.net *)
15 | (* ICQ : 446-769-253 *)
16 | (* *)
17 | (*********Copyright (c) niello 2008-2011*****)
18 | unit SimpleImageLoader;
19 |
20 | interface
21 |
22 | uses
23 | CL_platform,
24 | CL,
25 | Graphics;
26 |
27 | type
28 | PArrayByte = ^TArrayByte;
29 | TArrayByte = Array [0..0] of TCL_uchar4;
30 | TImageLoader = class
31 | private
32 | FWidth: Integer;
33 | FHeight: Integer;
34 | FPtr: PArrayByte;
35 | FFormat: TCL_image_format;
36 | procedure SetPointer(const Ptr: Pointer);
37 | function GetPointer(): Pointer;
38 | function GetFormat(): PCL_image_format;
39 | public
40 | constructor Create(const FileName: String); overload;
41 | constructor Create(); overload;
42 | property Width: Integer read FWidth;
43 | property Height: Integer read FHeight;
44 | property Pointer: Pointer read GetPointer write SetPointer;
45 | property Format: PCL_image_format read GetFormat;
46 | procedure Free();
47 | procedure SaveToFile(const FileName: String);
48 | procedure Resize(const Width,Height: Integer);
49 | end;
50 |
51 | implementation
52 |
53 | { TImageLoader }
54 |
55 | constructor TImageLoader.Create(const FileName: String);
56 | var
57 | bmp: Graphics.TBitmap;
58 | i,j: Integer;
59 | row: PArrayByte;
60 | begin
61 | inherited Create();
62 | bmp := TBitmap.Create;
63 | bmp.LoadFromFile(FileName);
64 | FWidth := bmp.Width;
65 | FHeight := bmp.Height;
66 | bmp.PixelFormat := pf32bit;
67 | FPtr:=GetMemory(FWidth*FHeight*4);
68 | for i:=0 to FHeight-1 do
69 | begin
70 | row := bmp.ScanLine[i];
71 | for j:=0 to FWidth-1 do
72 | begin
73 | FPtr^[i*FWidth+j].u8 := row^[j].u8;
74 | end;
75 | end;
76 | FFormat.Image_channel_order := CL_BGRA; //BMP - BGRA file
77 | FFormat.Image_channel_data_type := CL_UNSIGNED_INT8;
78 | bmp.Free();
79 | end;
80 |
81 | constructor TImageLoader.Create();
82 | begin
83 | inherited Create();
84 |
85 | FFormat.Image_channel_order := CL_BGRA; //BMP - BGRA file
86 | FFormat.Image_channel_data_type := CL_UNSIGNED_INT8;
87 | end;
88 |
89 | procedure TImageLoader.SaveToFile(const FileName: String);
90 | var
91 | bmp: TBitmap;
92 | i,j: integer;
93 | row: PArrayByte;
94 | begin
95 | bmp:=TBitmap.Create();
96 | bmp.Width := Width;
97 | bmp.Height := Height;
98 | bmp.PixelFormat := pf32bit;
99 | for i:=0 to FHeight-1 do
100 | begin
101 | row := bmp.ScanLine[i];
102 | for j:=0 to FWidth-1 do
103 | begin
104 | row^[j].u8 := FPtr^[(i*FWidth+j)].u8;
105 | end;
106 | end;
107 | bmp.SaveToFile(FileName);
108 | bmp.Free;
109 | end;
110 |
111 | procedure TImageLoader.Free;
112 | begin
113 | Dispose(FPtr);
114 | inherited Free();
115 | end;
116 |
117 | function TImageLoader.GetFormat: PCL_image_format;
118 | begin
119 | Result := @FFormat;
120 | end;
121 |
122 | function TImageLoader.GetPointer: Pointer;
123 | begin
124 | Result := FPtr;
125 | end;
126 |
127 | procedure TImageLoader.SetPointer(const Ptr: Pointer);
128 | begin
129 | FPtr := Ptr;
130 | end;
131 |
132 | procedure TImageLoader.Resize(const Width, Height: Integer);
133 | begin
134 | Dispose(FPtr);
135 | FPtr:=GetMemory(FWidth*FHeight*4);
136 | end;
137 |
138 | end.
139 |
--------------------------------------------------------------------------------
/Libs/OpenCL/cl_d3d10.pas:
--------------------------------------------------------------------------------
1 | (*******************************************************************************
2 | * Copyright (c) 2008-2010 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (************************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : CL_d3d10.pas *)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (* updated by : Alexander Kiselev *)
40 | (* (Igroman) *)
41 | (* Site : http://Igroman14.livejournal.com *)
42 | (* e-mail : Igroman14@yandex.ru *)
43 | (* ICQ : 207-381-695 *)
44 | (* (c) 2010 *)
45 | (* *)
46 | (***********Copyright (c) niello 2008-2011*******)
47 |
48 | unit cl_d3d10;
49 |
50 | interface
51 |
52 | {$INCLUDE OpenCL.inc}
53 |
54 | uses
55 | OpenGL,
56 | cl,
57 | D3D10,
58 | cl_platform;
59 |
60 | {$INCLUDE 'OpenCL.inc'}
61 |
62 | type
63 |
64 | UINT = Longword;
65 |
66 | (******************************************************************************
67 | * cl_khr_d3d10_sharing *)
68 | const
69 | cl_khr_d3d10_sharing = 1;
70 | type
71 | Pcl_d3d10_device_source_khr = ^Tcl_d3d10_device_source_khr;
72 | Tcl_d3d10_device_source_khr = TCL_uint;
73 |
74 | Pcl_d3d10_device_set_khr = ^Tcl_d3d10_device_set_khr;
75 | Tcl_d3d10_device_set_khr = TCL_uint;
76 |
77 | (******************************************************************************)
78 | const
79 | // Error Codes
80 | CL_INVALID_D3D10_DEVICE_KHR = -1002;
81 | CL_INVALID_D3D10_RESOURCE_KHR = -1003;
82 | CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR = -1004;
83 | CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR = -1005;
84 |
85 | // cl_d3d10_device_source_nv
86 | CL_D3D10_DEVICE_KHR = $4010;
87 | CL_D3D10_DXGI_ADAPTER_KHR = $4011;
88 |
89 | // cl_d3d10_device_set_nv
90 | CL_PREFERRED_DEVICES_FOR_D3D10_KHR = $4012;
91 | CL_ALL_DEVICES_FOR_D3D10_KHR = $4013;
92 |
93 | // cl_context_info
94 | CL_CONTEXT_D3D10_DEVICE_KHR = $4014;
95 | CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR = $402C;
96 |
97 | // cl_mem_info
98 | CL_MEM_D3D10_RESOURCE_KHR = $4015;
99 |
100 | // cl_image_info
101 | CL_IMAGE_D3D10_SUBRESOURCE_KHR = $4016;
102 |
103 | // cl_command_type
104 | CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR = $4017;
105 | CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR = $4018;
106 |
107 | (******************************************************************************)
108 | {$IFDEF CL_VERSION_1_0}
109 | type
110 |
111 | TclGetDeviceIDsFromD3D10KHR_fn = function(
112 | platform: Tcl_platform_id;
113 | d3d_device_source: Tcl_d3d10_device_source_khr;
114 | d3d_object: Pointer;
115 | d3d_device_set: Tcl_d3d10_device_set_khr;
116 | num_entries: Tcl_uint;
117 | devices: PPcl_device_id;
118 | num_devices: Pcl_uint
119 | ): Tcl_int;
120 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
121 | {$ENDIF}
122 |
123 | {$IFDEF CL_VERSION_1_0}
124 | type
125 |
126 | TclCreateFromD3D10BufferKHR_fn = function(
127 | context: Pcl_context;
128 | flags: Tcl_mem_flags;
129 | resource: PID3D10Buffer;
130 | errcode_ret: Pcl_int
131 | ): Tcl_int;
132 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
133 | {$ENDIF}
134 |
135 | {$IFDEF CL_VERSION_1_0}
136 | type
137 |
138 | TclCreateFromD3D10Texture2DKHR_fn = function(
139 | context: Pcl_context;
140 | flags: Tcl_mem_flags;
141 | resource: PID3D10Texture2D;
142 | subresource: UINT;
143 | errcode_ret: Pcl_int
144 | ): Tcl_int;
145 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
146 | {$ENDIF}
147 |
148 | {$IFDEF CL_VERSION_1_0}
149 | type
150 |
151 | TclCreateFromD3D10Texture3DKHR_fn = function(
152 | context: Pcl_context;
153 | flags: Tcl_mem_flags;
154 | resource: PID3D10Texture3D;
155 | subresource: UINT;
156 | errcode_ret: Pcl_int
157 | ): Tcl_int;
158 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
159 | {$ENDIF}
160 |
161 | {$IFDEF CL_VERSION_1_0}
162 | type
163 |
164 | TclEnqueueAcquireD3D10ObjectsKHR_fn = function(
165 | command_queue: Pcl_command_queue;
166 | num_objects: Tcl_uint;
167 | const mem_objects: PPcl_mem;
168 | num_events_in_wait_list: Tcl_uint;
169 | const event_wait_list: PPcl_event;
170 | event: PPcl_event
171 | ): Tcl_int;
172 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
173 | {$ENDIF}
174 |
175 | {$IFDEF CL_VERSION_1_0}
176 | type
177 |
178 | TclEnqueueReleaseD3D10ObjectsKHR_fn = function(
179 | command_queue: Pcl_command_queue;
180 | num_objects: Tcl_uint;
181 | mem_objects: PPcl_mem;
182 | num_events_in_wait_list: Tcl_uint;
183 | const event_wait_list: PPcl_event;
184 | event: PPcl_event
185 | ): Tcl_int;{$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
186 | {$ENDIF}
187 |
188 |
189 | const
190 |
191 | CL_D3D10_DEVICE = $1070;
192 |
193 | {$IFDEF CL_VERSION_1_0}
194 | type
195 |
196 | TclCreateFromD3D10Buffer = function (
197 | context: Pcl_context; (* context *)
198 | flags: Tcl_mem_flags; (* flags *)
199 | pD3DResource: PID3D10Resource; (* pD3DResource *) //ID3D10Resource *
200 | errcode_ret: PInteger (* errcode_ret *)
201 | ) : Tcl_mem;
202 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
203 | {$ENDIF}
204 |
205 | {$IFDEF CL_VERSION_1_0}
206 | TclCreateImageFromD3D10Resource = function (context: Pcl_context; (* context *)
207 | flags: Tcl_mem_flags; (* flags *)
208 | pD3DResource: PID3D10Resource; (* pD3DResource *) //ID3D10Resource *
209 | errcode_ret: PInteger (* errcode_ret *)
210 | ) : Tcl_mem;
211 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
212 | {$ENDIF}
213 |
214 | {$IFDEF CL_VERSION_1_0}
215 | var
216 | clGetDeviceIDsFromD3D10KHR_fn: TclGetDeviceIDsFromD3D10KHR_fn;
217 | clCreateFromD3D10BufferKHR_fn: TclCreateFromD3D10BufferKHR_fn;
218 | clCreateFromD3D10Texture2DKHR_fn: TclCreateFromD3D10Texture2DKHR_fn;
219 | clCreateFromD3D10Texture3DKHR_fn: TclCreateFromD3D10Texture3DKHR_fn;
220 | clEnqueueAcquireD3D10ObjectsKHR_fn: TclEnqueueAcquireD3D10ObjectsKHR_fn;
221 | clEnqueueReleaseD3D10ObjectsKHR_fn: TclEnqueueReleaseD3D10ObjectsKHR_fn;
222 |
223 | clCreateFromD3D10Buffer: TclCreateFromD3D10Buffer;
224 | clCreateImageFromD3D10Resource: TclCreateImageFromD3D10Resource;
225 | {$ENDIF}
226 |
227 | function InitCL_D3D10: Boolean;
228 |
229 | implementation
230 |
231 | function InitCL_D3D10: Boolean;
232 | begin
233 | Result := False;
234 | if OCL_LibHandle <> nil then begin
235 | {$IFDEF CL_VERSION_1_0}
236 | clGetDeviceIDsFromD3D10KHR_fn := TclGetDeviceIDsFromD3D10KHR_fn(oclGetProcAddress('clGetDeviceIDsFromD3D10KHR_fn', OCL_LibHandle));
237 | clCreateFromD3D10BufferKHR_fn := TclCreateFromD3D10BufferKHR_fn(oclGetProcAddress('clCreateFromD3D10BufferKHR_fn', OCL_LibHandle));
238 | clCreateFromD3D10Texture2DKHR_fn := TclCreateFromD3D10Texture2DKHR_fn(oclGetProcAddress('clCreateFromD3D10Texture2DKHR_fn', OCL_LibHandle));
239 | clCreateFromD3D10Texture3DKHR_fn := TclCreateFromD3D10Texture3DKHR_fn(oclGetProcAddress('clCreateFromD3D10Texture3DKHR_fn', OCL_LibHandle));
240 | clEnqueueAcquireD3D10ObjectsKHR_fn := TclEnqueueAcquireD3D10ObjectsKHR_fn(oclGetProcAddress('clEnqueueAcquireD3D10ObjectsKHR_fn', OCL_LibHandle));
241 | clEnqueueReleaseD3D10ObjectsKHR_fn := TclEnqueueReleaseD3D10ObjectsKHR_fn(oclGetProcAddress('clEnqueueReleaseD3D10ObjectsKHR_fn', OCL_LibHandle));
242 |
243 | clCreateFromD3D10Buffer := TclCreateFromD3D10Buffer(oclGetProcAddress('clCreateFromD3D10Buffer', OCL_LibHandle));
244 | clCreateImageFromD3D10Resource := TclCreateImageFromD3D10Resource(oclGetProcAddress('clCreateImageFromD3D10Resource', OCL_LibHandle));
245 | {$ENDIF}
246 | Result := True;
247 | end;
248 | end;
249 |
250 | end.
--------------------------------------------------------------------------------
/Libs/OpenCL/cl_d3d9.pas:
--------------------------------------------------------------------------------
1 | (**********************************************************************************
2 | * Copyright (c) 2008 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | **********************************************************************************)
23 | (*******************************************************************************
24 | * Copyright (c) 2011 The Khronos Group Inc.
25 | *
26 | * Permission is hereby granted, free of charge, to any person obtaining a
27 | * copy of this software and/or associated documentation files (the
28 | * "Materials"), to deal in the Materials without restriction, including
29 | * without limitation the rights to use, copy, modify, merge, publish,
30 | * distribute, sublicense, and/or sell copies of the Materials, and to
31 | * permit persons to whom the Materials are furnished to do so, subject to
32 | * the following conditions:
33 | *
34 | * The above copyright notice and this permission notice shall be included
35 | * in all copies or substantial portions of the Materials.
36 | *
37 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
38 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
39 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
40 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
41 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
42 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
43 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
44 | ******************************************************************************)
45 | (************************************************)
46 | (* *)
47 | (* OpenCL1.2 and Delphi and Windows *)
48 | (* *)
49 | (* created by : Maksym Tymkovych *)
50 | (* (niello) *)
51 | (* *)
52 | (* headers versions: 0.07 *)
53 | (* file name : CL_d3d9.pas *)
54 | (* last modify : 10.12.11 *)
55 | (* license : BSD *)
56 | (* *)
57 | (* Site : www.niello.org.ua *)
58 | (* e-mail : muxamed13@ukr.net *)
59 | (* ICQ : 446-769-253 *)
60 | (* *)
61 | (* updated by : Alexander Kiselev *)
62 | (* (Igroman) *)
63 | (* Site : http://Igroman14.livejournal.com *)
64 | (* e-mail : Igroman14@yandex.ru *)
65 | (* ICQ : 207-381-695 *)
66 | (* (c) 2010 *)
67 | (* *)
68 | (***********Copyright (c) niello 2008-2011*******)
69 | unit cl_d3d9;
70 |
71 | interface
72 |
73 | {$INCLUDE OpenCL.inc}
74 |
75 | uses
76 | cl,
77 | Direct3D9,
78 | cl_platform;
79 |
80 |
81 | const
82 | CL_INVALID_D3D_OBJECT = CL_INVALID_GL_OBJECT;
83 |
84 | const
85 | CL_D3D9_DEVICE = $1072;
86 |
87 | type
88 | PIDirect3DResource9 = ^IDirect3DResource9;
89 |
90 | {$IFDEF CL_VERSION_1_0}
91 | TclCreateFromD3D9Buffer = function (
92 | context: Tcl_context; (* context *)
93 | flags: Tcl_mem_flags; (* flags *)
94 | pD3DResource: PIDirect3DResource9; (* pD3DResource *) //IDirect3DResource9 *
95 | shared_handle: Pointer; (* shared_handle *)
96 | errcode_ret: PInteger (* errcode_ret *)
97 | ):Tcl_mem;
98 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
99 |
100 |
101 | TclCreateImageFromD3D9Resource = function (context: Tcl_context; (* context *)
102 | flags: Tcl_mem_flags; (* flags *)
103 | pD3DResource: PIDirect3DResource9; (* pD3DResource *) //IDirect3DResource9 *
104 | shared_handle: Pointer; (* shared_handle *)
105 | errcode_ret: PInteger (* errcode_ret *)
106 | ):Tcl_mem;
107 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
108 |
109 | var
110 | clCreateFromD3D9Buffer: TclCreateFromD3D9Buffer;
111 | clCreateImageFromD3D9Resource: TclCreateImageFromD3D9Resource;
112 | {$ENDIF}
113 |
114 | function InitCL_D3D9: Boolean;
115 |
116 | implementation
117 |
118 | function InitCL_D3D9: Boolean;
119 | begin
120 | Result := False;
121 | if OCL_LibHandle <> nil then
122 | begin
123 | {$IFDEF CL_VERSION_1_0}
124 | clCreateFromD3D9Buffer := TclCreateFromD3D9Buffer(oclGetProcAddress('clCreateFromD3D9Buffer', OCL_LibHandle));
125 | clCreateImageFromD3D9Resource := TclCreateImageFromD3D9Resource(oclGetProcAddress('clCreateImageFromD3D9Resource', OCL_LibHandle));
126 | {$ENDIF}
127 | Result := True;
128 | end;
129 | end;
130 |
131 | end.
--------------------------------------------------------------------------------
/Libs/OpenCL/cl_gl.pas:
--------------------------------------------------------------------------------
1 | (******************************************************************************
2 | * Copyright (c) 2011 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (************************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : CL.pas *)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (* updated by : Alexander Kiselev *)
40 | (* (Igroman) *)
41 | (* Site : http://Igroman14.livejournal.com *)
42 | (* e-mail : Igroman14@yandex.ru *)
43 | (* ICQ : 207-381-695 *)
44 | (* (c) 2010 *)
45 | (* *)
46 | (***********Copyright (c) niello 2008-2011*******)
47 |
48 | (*
49 | * cl_gl.h contains Khronos-approved (KHR) OpenCL extensions which have
50 | * OpenGL dependencies. The application is responsible for #including
51 | * OpenGL or OpenGL ES headers before #including cl_gl.h.
52 | *)
53 | unit cl_gl;
54 |
55 | interface
56 |
57 | {$INCLUDE OpenCL.inc}
58 |
59 | uses
60 | dglOpenGL,
61 | cl,
62 | cl_platform;
63 |
64 | type
65 |
66 | PCL_gl_object_type = ^TCL_gl_object_type;
67 | TCL_gl_object_type = TCL_uint;
68 | PCL_gl_texture_info = ^TCL_gl_texture_info;
69 | TCL_gl_texture_info = TCL_uint;
70 | PCL_gl_platform_info= ^TCL_gl_platform_info;
71 | TCL_gl_platform_info= TCL_uint;
72 |
73 | Tcl_GLsync = ^Integer;
74 |
75 | const
76 | (* cl_gl_object_type *)
77 | CL_GL_OBJECT_BUFFER = $2000;
78 | CL_GL_OBJECT_TEXTURE2D = $2001;
79 | CL_GL_OBJECT_TEXTURE3D = $2002;
80 | CL_GL_OBJECT_RENDERBUFFER = $2003;
81 |
82 | (* cl_gl_texture_info *)
83 | CL_GL_TEXTURE_TARGET = $2004;
84 | CL_GL_MIPMAP_LEVEL = $2005;
85 |
86 | (* Additional Error Codes *)
87 | (*
88 | Returned by clCreateContext, clCreateContextFromType, and
89 | clGetGLContextInfoKHR when an invalid OpenGL context or share group
90 | object handle is specified in :
91 | *)
92 | CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR = -1000;
93 |
94 | (* cl_gl_context_info *)
95 | (*
96 | Accepted as the argument of clGetGLContextInfoKHR:
97 | *)
98 | CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR = $2006;
99 | CL_DEVICES_FOR_GL_CONTEXT_KHR = $2007;
100 |
101 | (* Additional cl_context_properties *)
102 | (*
103 | Accepted as an attribute name in the 'properties' argument of
104 | clCreateContext and clCreateContextFromType:
105 | *)
106 | CL_GL_CONTEXT_KHR = $2008;
107 | CL_EGL_DISPLAY_KHR = $2009;
108 | CL_GLX_DISPLAY_KHR = $200A;
109 | CL_WGL_HDC_KHR = $200B;
110 | CL_CGL_SHAREGROUP_KHR = $200C;
111 |
112 |
113 | type
114 | {$IFDEF CL_VERSION_1_0}
115 | TclCreateFromGLBuffer = function (
116 | context: Pcl_context; (* context *)
117 | flags: Tcl_mem_flags; (* flags *)
118 | bufobj: GLuint; (* bufobj *)
119 | errcode_ret: PInteger (* errcode_ret *)
120 | ): PCL_mem;
121 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
122 | {$ENDIF}
123 |
124 | {$IFDEF CL_VERSION_1_0}
125 | {$IFDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
126 | TclCreateFromGLTexture2D = function (
127 | context: Pcl_context; (* context *)
128 | flags: Tcl_mem_flags; (* flags *)
129 | target: GLenum; (* target *)
130 | miplevel: GLint; (* miplevel *)
131 | texture: GLuint; (* texture *)
132 | errcode_ret: Pcl_int (* errcode_ret *)
133 | ): PCL_mem;
134 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
135 | {$ENDIF}
136 | {$ENDIF}
137 |
138 | {$IFDEF CL_VERSION_1_0}
139 | {$IFDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
140 | TclCreateFromGLTexture3D = function (
141 | context: Pcl_context; (* context *)
142 | flags: Tcl_mem_flags; (* flags *)
143 | target: GLenum; (* target *)
144 | miplevel: GLint; (* miplevel *)
145 | texture: GLuint; (* texture *)
146 | errcode_ret: Pcl_int (* errcode_ret *)
147 | ): PCL_mem;
148 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
149 | {$ENDIF}
150 | {$ENDIF}
151 |
152 | {$IFDEF CL_VERSION_1_2}
153 | TclCreateFromGLTexture = function(
154 | context: Pcl_context; (* context *)
155 | flags: Tcl_mem_flags; (* flags *)
156 | target: GLenum; (* target *)
157 | miplevel: GLint; (* miplevel *)
158 | texture: GLuint; (* texture *)
159 | errcode_ret: Pcl_int (* errcode_ret *)
160 | ): PCL_mem;
161 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
162 | {$ENDIF}
163 |
164 | {$IFDEF CL_VERSION_1_0}
165 | TclCreateFromGLRenderbuffer = function (
166 | context: Pcl_context; (* context *)
167 | flags: Tcl_mem_flags; (* flags *)
168 | renderbuffer: GLuint; (* renderbuffer *)
169 | errcode_ret: Pcl_int (* errcode_ret *)
170 | ): Pcl_mem;
171 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
172 | {$ENDIF}
173 |
174 | {$IFDEF CL_VERSION_1_0}
175 | TclGetGLObjectInfo = function (
176 | memobj: Pcl_mem; (* memobj *)
177 | gl_object_type: Pcl_gl_object_type; (* gl_object_type *)
178 | gl_object_name: PGLuint (* gl_object_name *)
179 | ): TCL_int;
180 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
181 | {$ENDIF}
182 |
183 | {$IFDEF CL_VERSION_1_0}
184 | TclGetGLTextureInfo = function (
185 | memobj: Pcl_mem; (* memobj *)
186 | param_name: Tcl_gl_texture_info; (* param_name *)
187 | param_value_size: Tsize_t; (* param_value_size *)
188 | param_value: Pointer; (* param_value *)
189 | param_value_size_ret: Psize_t (* param_value_size_ret *)
190 | ): TCL_int;
191 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
192 | {$ENDIF}
193 |
194 | {$IFDEF CL_VERSION_1_0}
195 | TclEnqueueAcquireGLObjects = function (
196 | command_queue: Pcl_command_queue; (* command_queue *)
197 | num_objects: Tcl_uint; (* num_objects *)
198 | const mem_objects: PPcl_mem; (* mem_objects *)
199 | num_events_in_wait_list: Tcl_uint; (* num_events_in_wait_list *)
200 | const event_wait_list: PPcl_event; (* event_wait_list *)
201 | event: PPcl_event (* event *)
202 | ): TCL_int;
203 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
204 | {$ENDIF}
205 |
206 | {$IFDEF CL_VERSION_1_0}
207 | TclEnqueueReleaseGLObjects = function (
208 | command_queue: Pcl_command_queue; (* command_queue *)
209 | num_objects: Tcl_uint; (* num_objects *)
210 | const mem_objects: PPcl_mem; (* mem_objects *)
211 | num_events_in_wait_list: Tcl_uint; (* num_events_in_wait_list *)
212 | const event_wait_list: PPcl_event; (* event_wait_list *)
213 | event: PPcl_event (* event *)
214 | ): TCL_int;
215 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
216 | {$ENDIF}
217 | type
218 | Pcl_gl_context_info = ^Tcl_gl_context_info;
219 | Tcl_gl_context_info = Tcl_uint;
220 |
221 |
222 | {$IFDEF CL_VERSION_1_0}
223 | TclGetGLContextInfoKHR = function (
224 | const properties: Pcl_context_properties;(* properties *)
225 | param_name: Tcl_gl_context_info; (* param_name *)
226 | param_value_size: Tsize_t; (* param_value_size *)
227 | param_value: Pointer; (* param_value *)
228 | param_value_size_ret : Psize_t (* param_value_size_ret *)
229 | ): TCL_int;
230 | {$IFDEF CDECL}cdecl{$ELSE}stdcall{$ENDIF};
231 | {$ENDIF}
232 | var
233 | {$IFDEF CL_VERSION_1_0}
234 | clCreateFromGLBuffer: TclCreateFromGLBuffer;
235 | {$IFDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
236 | clCreateFromGLTexture2D: TclCreateFromGLTexture2D;
237 | clCreateFromGLTexture3D: TclCreateFromGLTexture3D;
238 | {$ENDIF}
239 | clCreateFromGLRenderbuffer: TclCreateFromGLRenderbuffer;
240 | clGetGLObjectInfo: TclGetGLObjectInfo;
241 | clGetGLTextureInfo: TclGetGLTextureInfo;
242 | clEnqueueAcquireGLObjects: TclEnqueueAcquireGLObjects;
243 | clEnqueueReleaseGLObjects: TclEnqueueReleaseGLObjects;
244 | clGetGLContextInfoKHR: TclGetGLContextInfoKHR;
245 | {$ENDIF}
246 |
247 | {$IFDEF CL_VERSION_1_2}
248 | clCreateFromGLTexture: TclCreateFromGLTexture;
249 | {$ENDIF}
250 |
251 | function InitCL_GL: Boolean;
252 |
253 | implementation
254 |
255 | function InitCL_GL: Boolean;
256 | begin
257 | Result := False;
258 | if OCL_LibHandle <> nil then
259 | begin
260 | {$IFDEF CL_VERSION_1_0}
261 | clCreateFromGLBuffer := TclCreateFromGLBuffer(oclGetProcAddress('clCreateFromGLBuffer', OCL_LibHandle));
262 | {$IFDEF CL_USE_DEPRECATED_OPENCL_1_1_APIS}
263 | clCreateFromGLTexture2D := TclCreateFromGLTexture2D(oclGetProcAddress('clCreateFromGLTexture2D', OCL_LibHandle));
264 | clCreateFromGLTexture3D := TclCreateFromGLTexture3D(oclGetProcAddress('clCreateFromGLTexture3D', OCL_LibHandle));
265 | {$ENDIF}
266 | clCreateFromGLRenderbuffer := TclCreateFromGLRenderbuffer(oclGetProcAddress('clCreateFromGLRenderbuffer', OCL_LibHandle));
267 | clGetGLObjectInfo := TclGetGLObjectInfo(oclGetProcAddress('clGetGLObjectInfo', OCL_LibHandle));
268 | clGetGLTextureInfo := TclGetGLTextureInfo(oclGetProcAddress('clGetGLTextureInfo', OCL_LibHandle));
269 | clEnqueueAcquireGLObjects := TclEnqueueAcquireGLObjects(oclGetProcAddress('clEnqueueAcquireGLObjects', OCL_LibHandle));
270 | clEnqueueReleaseGLObjects := TclEnqueueReleaseGLObjects(oclGetProcAddress('clEnqueueReleaseGLObjects', OCL_LibHandle));
271 | clGetGLContextInfoKHR := TclGetGLContextInfoKHR(clGetExtensionFunctionAddress('clGetGLContextInfoKHR'));
272 | {$ENDIF}
273 | {$IFDEF CL_VERSION_1_2}
274 | clCreateFromGLTexture := TclCreateFromGLTexture(oclGetProcAddress('clCreateFromGLTexture', OCL_LibHandle));
275 | {$ENDIF}
276 | Result := True;
277 | end;
278 | end;
279 |
280 | end.
--------------------------------------------------------------------------------
/Libs/OpenCL/cl_platform.pas:
--------------------------------------------------------------------------------
1 | (*******************************************************************************
2 | * Copyright (c) 2008-2010 The Khronos Group Inc.
3 | *
4 | * Permission is hereby granted, free of charge, to any person obtaining a
5 | * copy of this software and/or associated documentation files (the
6 | * "Materials"), to deal in the Materials without restriction, including
7 | * without limitation the rights to use, copy, modify, merge, publish,
8 | * distribute, sublicense, and/or sell copies of the Materials, and to
9 | * permit persons to whom the Materials are furnished to do so, subject to
10 | * the following conditions:
11 | *
12 | * The above copyright notice and this permission notice shall be included
13 | * in all copies or substantial portions of the Materials.
14 | *
15 | * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 | * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 | ******************************************************************************)
23 | (********************************************)
24 | (* *)
25 | (* OpenCL1.2 and Delphi and Windows *)
26 | (* *)
27 | (* created by : Maksym Tymkovych *)
28 | (* (niello) *)
29 | (* *)
30 | (* headers versions: 0.07 *)
31 | (* file name : cl_platform.pas *)
32 | (* last modify : 10.12.11 *)
33 | (* license : BSD *)
34 | (* *)
35 | (* Site : www.niello.org.ua *)
36 | (* e-mail : muxamed13@ukr.net *)
37 | (* ICQ : 446-769-253 *)
38 | (* *)
39 | (*********Copyright (c) niello 2008-2011*****)
40 |
41 | //Fixed By Dmitry Belkevich
42 | //Site www.makhaon.com
43 | //E-mail dmitry@makhaon.com
44 | //(c) 2009
45 | //Beta release 1.0
46 |
47 | unit cl_platform;
48 |
49 | interface
50 |
51 | (*
52 | Delphi 6 and down don't support UInt64;
53 | *)
54 |
55 | {$INCLUDE 'OpenCL.inc'}
56 |
57 | type
58 | PCL_char = ^TCL_char;
59 | TCL_char = Shortint;//-127..+128;
60 |
61 | PCL_uchar = ^TCL_uchar;
62 | TCL_uchar = Byte;//0..255;
63 |
64 | PCL_short = ^TCL_short;
65 | TCL_short = Smallint;//- 32767..+32768;
66 |
67 | PCL_ushort = ^TCL_ushort;
68 | TCL_ushort = Word;//0..+65535;
69 |
70 | PCL_int = ^TCL_int;
71 | TCL_int = Longint;//-2147483647..+2147483648;
72 |
73 | PCL_uint = ^TCL_uint;
74 | TCL_uint = Longword;//0..4294967295;
75 |
76 | PCL_long = ^TCL_long;
77 | TCL_long = Int64;
78 |
79 | PCL_ulong = ^TCL_ulong;
80 | //The error is found by Andrew Terekhov
81 | TCL_ulong = {$IFDEF DEFINE_UINT64_EQU_INT64} Int64;{$ELSE} UInt64;{$ENDIF}
82 |
83 | PCL_half = ^TCL_half;
84 | TCL_half = TCL_ushort;
85 |
86 | PCL_float = ^TCL_float;
87 | TCL_float = Single;
88 |
89 | PCL_double = ^TCL_double;
90 | TCL_double = Double;
91 |
92 | PCL_half2 = ^TCL_half2;
93 | TCL_half2 = record
94 | i16 : Array [0..1]of TCL_half;
95 | end;
96 |
97 | PCL_half4 = ^TCL_half4;
98 | TCL_half4 = record
99 | i16 : Array [0..3]of TCL_half;
100 | end;
101 |
102 | PCL_half8 = ^TCL_half8;
103 | TCL_half8 = record
104 | i16 : Array [0..7]of TCL_half;
105 | end;
106 |
107 | PCL_half16 = ^TCL_half16;
108 | TCL_half16 = record
109 | i16 : Array [0..15]of TCL_half;
110 | end;
111 |
112 | PCL_char2 = ^TCL_char2;
113 | TCL_char2 = record
114 | i8 : Array [0..1]of TCL_char;
115 | end;
116 |
117 | PCL_char4 = ^TCL_char4;
118 | TCL_char4 = record
119 | i8 : Array [0..3]of TCL_char;
120 | end;
121 |
122 | PCL_char8 = ^TCL_char8;
123 | TCL_char8 = record
124 | i8 : Array [0..7]of TCL_char;
125 | end;
126 |
127 | PCL_char16 = ^TCL_char16;
128 | TCL_char16 = record
129 | i8 : Array [0..15]of TCL_char;
130 | end;
131 |
132 | PCL_uchar2 = ^TCL_uchar2;
133 | TCL_uchar2 = record
134 | u8 : Array [0..1]of TCL_uchar;
135 | end;
136 |
137 | PCL_uchar4 = ^TCL_uchar4;
138 | TCL_uchar4 = record
139 | u8 : Array [0..3]of TCL_uchar;
140 | end;
141 |
142 | PCL_uchar8 = ^TCL_uchar8;
143 | TCL_uchar8 = record
144 | u8 : Array [0..7]of TCL_uchar;
145 | end;
146 |
147 | PCL_uchar16 = ^TCL_uchar16;
148 | TCL_uchar16 = record
149 | u8 : Array [0..15]of TCL_uchar;
150 | end;
151 |
152 | PCL_short2 = ^TCL_short2;
153 | TCL_short2 = record
154 | i16 : Array [0..1]of TCL_short;
155 | end;
156 |
157 | PCL_short4 = ^TCL_short4;
158 | TCL_short4 = record
159 | i16 : Array [0..3]of TCL_short;
160 | end;
161 |
162 | PCL_short8 = ^TCL_short8;
163 | TCL_short8 = record
164 | i16 : Array [0..7]of TCL_short;
165 | end;
166 |
167 | PCL_short16 = ^TCL_short16;
168 | TCL_short16 = record
169 | i16 : Array [0..15]of TCL_short;
170 | end;
171 |
172 | PCL_ushort2 = ^TCL_ushort2;
173 | TCL_ushort2 = record
174 | u16 : Array [0..1]of TCL_ushort;
175 | end;
176 |
177 | PCL_ushort4 = ^TCL_ushort4;
178 | TCL_ushort4 = record
179 | u16 : Array [0..3]of TCL_ushort;
180 | end;
181 |
182 | PCL_ushort8 = ^TCL_ushort8;
183 | TCL_ushort8 = record
184 | u16 : Array [0..7]of TCL_ushort;
185 | end;
186 |
187 | PCL_ushort16 = ^TCL_ushort16;
188 | TCL_ushort16 = record
189 | u16 : Array [0..15]of TCL_ushort;
190 | end;
191 |
192 | PCL_int2 = ^TCL_int2;
193 | TCL_int2 = record
194 | i32 : Array [0..1]of TCL_int;
195 | end;
196 |
197 | PCL_int4 = ^TCL_int4;
198 | TCL_int4 = record
199 | i32 : Array [0..3]of TCL_int;
200 | end;
201 |
202 | PCL_int8 = ^TCL_int8;
203 | TCL_int8 = record
204 | i32 : Array [0..7]of TCL_int;
205 | end;
206 |
207 | PCL_int16 = ^TCL_int16;
208 | TCL_int16 = record
209 | i32 : Array [0..15]of TCL_int;
210 | end;
211 |
212 | PCL_uint2 = ^TCL_uint2;
213 | TCL_uint2 = record
214 | u32 : Array [0..1]of TCL_uint;
215 | end;
216 |
217 | PCL_uint4 = ^TCL_uint4;
218 | TCL_uint4 = record
219 | u32 : Array [0..3]of TCL_uint;
220 | end;
221 |
222 | PCL_uint8 = ^TCL_uint8;
223 | TCL_uint8 = record
224 | u32 : Array [0..7]of TCL_uint;
225 | end;
226 |
227 | PCL_uint16 = ^TCL_uint16;
228 | TCL_uint16 = record
229 | u32 : Array [0..15]of TCL_uint;
230 | end;
231 |
232 | PCL_long2 = ^TCL_long2;
233 | TCL_long2 = record
234 | i64 : Array [0..1]of TCL_long;
235 | end;
236 |
237 | PCL_long4 = ^TCL_long4;
238 | TCL_long4 = record
239 | i64 : Array [0..3]of TCL_long;
240 | end;
241 |
242 | PCL_long8 = ^TCL_long8;
243 | TCL_long8 = record
244 | i64 : Array [0..7]of TCL_long;
245 | end;
246 |
247 | PCL_long16 = ^TCL_long16;
248 | TCL_long16 = record
249 | i64 : Array [0..15]of TCL_long;
250 | end;
251 |
252 | PCL_ulong2 = ^TCL_ulong2;
253 | TCL_ulong2 = record
254 | u64 : Array [0..1]of TCL_ulong;
255 | end;
256 |
257 | PCL_ulong4 = ^TCL_ulong4;
258 | TCL_ulong4 = record
259 | u64 : Array [0..3]of TCL_ulong;
260 | end;
261 |
262 | PCL_ulong8 = ^TCL_ulong8;
263 | TCL_ulong8 = record
264 | u64 : Array [0..7]of TCL_ulong;
265 | end;
266 |
267 | PCL_ulong16 = ^TCL_ulong16;
268 | TCL_ulong16 = record
269 | u64 : Array [0..15]of TCL_ulong;
270 | end;
271 |
272 | PCL_float2 = ^TCL_float2;
273 | TCL_float2 = record
274 | f32 : Array [0..1]of TCL_float;
275 | end;
276 |
277 | PCL_float4 = ^TCL_float4;
278 | TCL_float4 = record
279 | f32 : Array [0..3]of TCL_float;
280 | end;
281 |
282 | PCL_float8 = ^TCL_float8;
283 | TCL_float8 = record
284 | f32 : Array [0..7]of TCL_float;
285 | end;
286 |
287 | PCL_float16 = ^TCL_float16;
288 | TCL_float16 = record
289 | f32 : Array [0..15]of TCL_float;
290 | end;
291 |
292 | PCL_double2 = ^TCL_double2;
293 | TCL_double2 = record
294 | f64 : Array [0..1]of TCL_double;
295 | end;
296 |
297 | PCL_double4 = ^TCL_double4;
298 | TCL_double4 = record
299 | f64 : Array [0..3]of TCL_double;
300 | end;
301 |
302 | PCL_double8 = ^TCL_double8;
303 | TCL_double8 = record
304 | f64 : Array [0..7]of TCL_double;
305 | end;
306 |
307 | PCL_double16 = ^TCL_double16;
308 | TCL_double16 = record
309 | f64 : Array [0..15]of TCL_double;
310 | end;
311 |
312 | const
313 | CL_CHAR_BIT = 8;
314 | CL_SCHAR_MAX = 127;
315 | CL_SCHAR_MIN = (-127-1);
316 | CL_CHAR_MAX = CL_SCHAR_MAX;
317 | CL_CHAR_MIN = CL_SCHAR_MIN;
318 | CL_UCHAR_MAX = 255;
319 | CL_SHRT_MAX = 32767;
320 | CL_SHRT_MIN = (-32767-1);
321 | CL_USHRT_MAX = 65535;
322 | CL_INT_MAX = 2147483647;
323 | CL_INT_MIN = (-2147483647-1);
324 | CL_UINT_MAX = $ffffffff;
325 | CL_LONG_MAX = TCL_long ($7FFFFFFFFFFFFFFF);
326 | CL_LONG_MIN = TCL_long (-$7FFFFFFFFFFFFFFF) - 1;
327 | CL_ULONG_MAX = TCL_ulong($FFFFFFFFFFFFFFFF);
328 |
329 | CL_FLT_DIG = 6;
330 | CL_FLT_MANT_DIG = 24;
331 | CL_FLT_MAX_10_EXP = +38;
332 | CL_FLT_MAX_EXP = +128;
333 | CL_FLT_MIN_10_EXP = -37;
334 | CL_FLT_MIN_EXP = -125;
335 | CL_FLT_RADIX = 2;
336 | CL_FLT_MAX = 340282346638528859811704183484516925440.0;
337 | CL_FLT_MIN = 1.175494350822287507969e-38;
338 | //CL_FLT_EPSILON = 0x1.0p-23f;
339 |
340 | CL_DBL_DIG = 15;
341 | CL_DBL_MANT_DIG = 53;
342 | CL_DBL_MAX_10_EXP = +308;
343 | CL_DBL_MAX_EXP = +1024;
344 | CL_DBL_MIN_10_EXP = -307;
345 | CL_DBL_MIN_EXP = -1021;
346 | CL_DBL_RADIX = 2;
347 | CL_DBL_MAX = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0;
348 | CL_DBL_MIN = 2.225073858507201383090e-308;
349 | CL_DBL_EPSILON = 2.220446049250313080847e-16;
350 |
351 | CL_M_E = 2.718281828459045090796;
352 | CL_M_LOG2E = 1.442695040888963387005;
353 | CL_M_LOG10E = 0.434294481903251816668;
354 | CL_M_LN2 = 0.693147180559945286227;
355 | CL_M_LN10 = 2.302585092994045901094;
356 | CL_M_PI = 3.141592653589793115998;
357 | CL_M_PI_2 = 1.570796326794896557999;
358 | CL_M_PI_4 = 0.785398163397448278999;
359 | CL_M_1_PI = 0.318309886183790691216;
360 | CL_M_2_PI = 0.636619772367581382433;
361 | CL_M_2_SQRTPI = 1.128379167095512558561;
362 | CL_M_SQRT2 = 1.414213562373095145475;
363 | CL_M_SQRT1_2 = 0.707106781186547572737;
364 |
365 | CL_M_E_F = 2.71828174591064;
366 | CL_M_LOG2E_F = 1.44269502162933;
367 | CL_M_LOG10E_F = 0.43429449200630;
368 | CL_M_LN2_F = 0.69314718246460;
369 | CL_M_LN10_F = 2.30258512496948;
370 | CL_M_PI_F = 3.14159274101257;
371 | CL_M_PI_2_F = 1.57079637050629;
372 | CL_M_PI_4_F = 0.78539818525314;
373 | CL_M_1_PI_F = 0.31830987334251;
374 | CL_M_2_PI_F = 0.63661974668503;
375 | CL_M_2_SQRTPI_F = 1.12837922573090;
376 | CL_M_SQRT2_F = 1.41421353816986;
377 | CL_M_SQRT1_2_F = 0.70710676908493;
378 |
379 |
380 | CL_HUGE_VALF : TCL_float = 1e50;
381 | CL_HUGE_VAL : TCL_double = 1e500;
382 | CL_MAXFLOAT = CL_FLT_MAX;
383 | CL_INFINITY : TCL_float = 1e50; //CL_HUGE_VALF
384 | CL_NAN = 0/0;//(CL_INFINITY - CL_INFINITY);
385 |
386 | implementation
387 |
388 | end.
--------------------------------------------------------------------------------
/Libs/OpenCL/clext.pas:
--------------------------------------------------------------------------------
1 | (*
2 | ** Copyright 1998-2002, NVIDIA Corporation.
3 | ** All Rights Reserved.
4 | **
5 | ** THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL TO
6 | ** NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY THIRD PARTY
7 | ** IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORPORATION.
8 | **
9 | **
10 | *)
11 | (********************************************)
12 | (* *)
13 | (* OpenCL1.1 and Delphi and Windows *)
14 | (* *)
15 | (* created by : Maksym Tymkovych *)
16 | (* (niello) *)
17 | (* *)
18 | (* headers versions: 0.03 *)
19 | (* file name : clext.pas *)
20 | (* last modify : 13.02.10 *)
21 | (* license : BSD *)
22 | (* *)
23 | (* Site : www.niello.org.ua *)
24 | (* e-mail : muxamed13@ukr.net *)
25 | (* ICQ : 446-769-253 *)
26 | (* *)
27 | (*********Copyright (c) niello 2008-2011*****)
28 | unit clext;
29 |
30 | interface
31 |
32 | const
33 |
34 | CL_NV_DEVICE_COMPUTE_CAPABILITY_MAJOR = $4000;
35 | CL_NV_DEVICE_COMPUTE_CAPABILITY_MINOR = $4001;
36 | CL_NV_DEVICE_REGISTERS_PER_BLOCK = $4002;
37 | CL_NV_DEVICE_WARP_SIZE = $4003;
38 | CL_NV_DEVICE_GPU_OVERLAP = $4004;
39 | CL_NV_DEVICE_KERNEL_EXEC_TIMEOUT = $4005;
40 | CL_NV_DEVICE_INTEGRATED_MEMORY = $4006;
41 |
42 | implementation
43 |
44 | end.
--------------------------------------------------------------------------------
/OpenCL_Info/Main.pas:
--------------------------------------------------------------------------------
1 | unit Main;
2 |
3 | interface
4 |
5 | uses
6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 | Dialogs, dglOpenGL, sSkinProvider, sSkinManager, ExtCtrls, sPanel, ImgList,
8 | StdCtrls, sGroupBox, ComCtrls, sPageControl, jpeg, sLabel, sButton,
9 | sComboBox, sTreeView, sMemo, CL, cl_platform, clext, oclUtils, cl_d3d9,
10 | {cl_d3d10,} cl_gl, cl_ext;
11 |
12 | type
13 | TForm1 = class(TForm)
14 | sPanel2: TsPanel;
15 | sSkinManager1: TsSkinManager;
16 | sSkinProvider1: TsSkinProvider;
17 | ImageList1: TImageList;
18 | sButton1: TsButton;
19 | ComboBoxDevice: TsComboBox;
20 | sPageControl1: TsPageControl;
21 | sTabSheet1: TsTabSheet;
22 | sGroupBox1: TsGroupBox;
23 | ImageAMD: TImage;
24 | ImageNV: TImage;
25 | sLabel3: TsLabel;
26 | LabelCommonPlatform: TsLabel;
27 | sLabel5: TsLabel;
28 | LabelCommonVersion: TsLabel;
29 | sLabel7: TsLabel;
30 | LabelCommonVendor: TsLabel;
31 | sLabel9: TsLabel;
32 | LabelCommonType: TsLabel;
33 | sLabel31: TsLabel;
34 | MemoCommonExt: TsMemo;
35 | sTabSheet2: TsTabSheet;
36 | sGroupBox2: TsGroupBox;
37 | sTreeView1: TsTreeView;
38 | sTabSheet3: TsTabSheet;
39 | sGroupBox3: TsGroupBox;
40 | sMemo1: TsMemo;
41 | procedure FormCreate(Sender: TObject);
42 | procedure ComboBoxDeviceChange(Sender: TObject);
43 | procedure sButton1Click(Sender: TObject);
44 | private
45 | { Private declarations }
46 | public
47 | { Public declarations }
48 | Fcurrent_device: PPCL_device_id;
49 | Fcurrent_indevice: Integer;
50 | Fcontext: PCL_context;
51 | FStatus: TCL_int;
52 | Fdev_num: TCL_int;
53 | FBuf: array [0..1023]of AnsiChar;
54 | FSize: TSize_t;
55 | FBool: Tcl_bool;
56 | FuLong: TCL_ulong;
57 | FLong: TCL_uint;
58 | FVecs: array [0..4] of TSize_t;
59 | FVecl: array [0..4] of TCL_uint;
60 | // FInt: PCL_int;
61 | // FFloat: PCL_float;
62 | Fplatform_ : PCL_platform_id;
63 | end;
64 |
65 | const
66 | nvd: AnsiString = 'NVIDIA Corporation';
67 | ati_amdd: AnsiString = 'ATI Technologies Inc.';
68 |
69 | NV_DRIVER = 'OpenCL.dll';
70 | ATI_AMD_DRIVER = 'atiocl.dll';//'OpenCL.dll'
71 |
72 | var
73 | Form1: TForm1;
74 |
75 | implementation
76 |
77 | {$R *.dfm}
78 |
79 | var
80 | CPS: array [0..2] of PCL_context_properties = (
81 | pcl_context_properties(cl_context_platform),
82 | nil,
83 | nil
84 | );
85 |
86 | procedure TForm1.ComboBoxDeviceChange(Sender: TObject);
87 | var
88 | node: TTreeNode;
89 | node2: TTreeNode;
90 |
91 | procedure ParseExtensions(const Ext: AnsiString);
92 | var
93 | i: Integer;
94 | OldStep: Integer;
95 | begin
96 | node2 := sTreeView1.Items.AddChild(node, 'Extensions:');
97 | OldStep := 1;
98 | for i := 1 to Length(Ext) do
99 | if Ext[i] = ' ' then begin
100 | sTreeView1.Items.AddChild(node2, Copy(Ext, OldStep, i));
101 | OldStep := i;
102 | end;
103 | end;
104 | begin
105 | Fcurrent_device := oclGetDev(Fcontext, ComboBoxDevice.ItemIndex);
106 | Fcurrent_indevice := Integer(Fcurrent_device^);
107 |
108 | //first page - platform
109 | sTreeView1.Items.Clear;
110 | node := sTreeView1.Items.Add(nil, 'Platform');
111 | FStatus := clGetPlatformInfo(Fplatform_, CL_PLATFORM_NAME, SizeOf(FBuf), @FBuf, nil);
112 | LabelCommonPlatform.Caption := FBuf;
113 | sTreeView1.Items.AddChild(node, 'Name: ' + FBuf);
114 |
115 | FStatus := clGetPlatformInfo(Fplatform_, CL_PLATFORM_VERSION, SizeOf(FBuf), @FBuf, nil);
116 | LabelCommonVersion.Caption := FBuf;
117 | sTreeView1.Items.AddChild(node, 'Version: ' + FBuf);
118 |
119 | FStatus := clGetPlatformInfo(Fplatform_, CL_PLATFORM_VENDOR, SizeOf(FBuf), @FBuf, nil);
120 | LabelCommonVendor.Caption := FBuf;
121 | sTreeView1.Items.AddChild(node, 'Vendor: ' + FBuf);
122 |
123 | FStatus := clGetPlatformInfo(Fplatform_, CL_PLATFORM_PROFILE, SizeOf(FBuf), @FBuf, nil);
124 | LabelCommonType.Caption := FBuf;
125 | sTreeView1.Items.AddChild(node, 'Type: ' + FBuf);
126 |
127 | FStatus := clGetPlatformInfo(Fplatform_, CL_PLATFORM_EXTENSIONS, SizeOf(FBuf), @FBuf, nil);
128 | MemoCommonExt.Text := FBuf;
129 | ParseExtensions(FBuf);
130 |
131 | //Device
132 | node := sTreeView1.Items.Add(nil, 'Device');
133 |
134 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_NAME, SizeOf(FBuf), @FBuf, nil);
135 | sTreeView1.Items.AddChild(node, 'Name: ' + FBuf);
136 |
137 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_VERSION, SizeOf(FBuf), @FBuf, nil);
138 | sTreeView1.Items.AddChild(node, 'Version: ' + FBuf);
139 |
140 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_VENDOR, SizeOf(FBuf), @FBuf, nil);
141 | sTreeView1.Items.AddChild(node, 'Vendor: ' + FBuf);
142 |
143 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_TYPE, SizeOf(FuLong), @FuLong, nil);
144 | if (FuLong and CL_DEVICE_TYPE_CPU) <> 0 then
145 | sTreeView1.Items.AddChild(node, 'Type: CPU');
146 | if (FuLong and CL_DEVICE_TYPE_GPU) <> 0 then
147 | sTreeView1.Items.AddChild(node, 'Type: GPU');
148 | if (FuLong and CL_DEVICE_TYPE_ACCELERATOR) <> 0 then
149 | sTreeView1.Items.AddChild(node, 'Type: Accelerator');
150 | if (FuLong and CL_DEVICE_TYPE_Default) <> 0 then
151 | sTreeView1.Items.AddChild(node, 'Type: Default');
152 | // if (FuLong and CL_DEVICE_TYPE_All) <> 0 then
153 | // sTreeView1.Items.AddChild(node, 'Type: All');
154 |
155 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_EXTENSIONS, SizeOf(FBuf), @FBuf, nil);
156 | ParseExtensions(FBuf);
157 |
158 | //compute unit
159 | node := sTreeView1.Items.Add(nil, 'Compute Unit');
160 |
161 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_COMPUTE_UNITS, SizeOf(FSize), @FSize, nil);
162 | sTreeView1.Items.AddChild(node, 'Cores: ' + IntToStr(FSize));
163 |
164 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_CLOCK_FREQUENCY, SizeOf(FSize), @FSize, nil);
165 | sTreeView1.Items.AddChild(node, 'Clock: ' + IntToStr(FSize) + 'Mhz');
166 |
167 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_ADDRESS_BITS, SizeOf(FSize), @FSize, nil);
168 | sTreeView1.Items.AddChild(node, 'BitsWidth: ' + IntToStr(FSize));
169 |
170 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_WORK_GROUP_SIZE, SizeOf(FSize), @FSize, nil);
171 | sTreeView1.Items.AddChild(node, 'GroupSize: ' + IntToStr(FSize));
172 |
173 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_WORK_ITEM_SIZES , SizeOf(FSize), @FSize, nil);
174 | sTreeView1.Items.AddChild(node, 'ItemSize: ' + IntToStr(FSize));
175 |
176 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, SizeOf(FSize), @FSize, nil);
177 | sTreeView1.Items.AddChild(node, 'GridDimansions: ' + IntToStr(FSize));
178 |
179 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_MEM_ALLOC_SIZE, SizeOf(FSize), @FSize, nil);
180 | sTreeView1.Items.AddChild(node, 'MemoryAllocSize: ' + IntToStr(FSize));
181 |
182 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_GLOBAL_MEM_SIZE, SizeOf(FuLong), @FuLong, nil);
183 | sTreeView1.Items.AddChild(node, 'GlobalMemorySize: ' + IntToStr(Round(FuLong / (1024 * 1024))) + ' MByte');
184 |
185 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, SizeOf(FuLong), @FuLong, nil);
186 | sTreeView1.Items.AddChild(node, 'GlobalMemoryCacheLineSize: ' + IntToStr(Round(FuLong / 1024)) + ' KByte');
187 |
188 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, SizeOf(FuLong), @FuLong, nil);
189 | sTreeView1.Items.AddChild(node, 'GlobalMemoryCacheSize: ' + IntToStr(Round(FuLong / 1024)) + ' KByte');
190 |
191 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_GLOBAL_MEM_SIZE, SizeOf(FuLong), @FuLong, nil);
192 | sTreeView1.Items.AddChild(node, 'GlobalMemorySize: ' + IntToStr(Round(FuLong / (1024 * 1024))) + ' MByte');
193 |
194 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_ERROR_CORRECTION_SUPPORT, SizeOf(FBool), @FBool, nil);
195 | if FBool = 0 then
196 | sTreeView1.Items.AddChild(node, 'ErrorCorrectionSupport: False')
197 | else
198 | sTreeView1.Items.AddChild(node, 'ErrorCorrectionSupport: True');
199 |
200 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_LOCAL_MEM_TYPE, SizeOf(FSize), @FSize, nil);
201 | if FSize = 1 then
202 | sTreeView1.Items.AddChild(node, 'LocalMemoryType: Local')
203 | else
204 | sTreeView1.Items.AddChild(node, 'LocalMemoryType: Global');
205 |
206 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_LOCAL_MEM_SIZE, SizeOf(FuLong), @FuLong, nil);
207 | sTreeView1.Items.AddChild(node, 'LocalMemorySize: ' + IntToStr(Round(FuLong / 1024)) + ' KByte');
208 |
209 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_QUEUE_PROPERTIES, SizeOf(FuLong), @FuLong, nil);
210 | if (FuLong and CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) <> 0 then
211 | sTreeView1.Items.AddChild(node, 'QueueProperties: CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE');
212 | if (FuLong and CL_QUEUE_PROFILING_ENABLE) <> 0 then
213 | sTreeView1.Items.AddChild(node, 'QueueProperties: CL_QUEUE_PROFILING_ENABLE');
214 |
215 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE_SUPPORT, SizeOf(FBool), @FBool, nil);
216 | if FBool = 0 then
217 | sTreeView1.Items.AddChild(node, 'ImageSupport: False');
218 | if FBool = 1 then
219 | sTreeView1.Items.AddChild(node, 'ImageSupport: True');
220 |
221 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_READ_IMAGE_ARGS, SizeOf(FuLong), @FuLong, nil);
222 | sTreeView1.Items.AddChild(node, 'MaxReadImageARGS: ' + IntToStr(FuLong));
223 |
224 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_WRITE_IMAGE_ARGS, SizeOf(FuLong), @FuLong, nil);
225 | sTreeView1.Items.AddChild(node, 'MaxWriteImageARGS: ' + IntToStr(FuLong));
226 |
227 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_MAX_READ_IMAGE_ARGS, SizeOf(FuLong), @FuLong, nil);
228 | sTreeView1.Items.AddChild(node, 'MaxReadImageARGS: ' + IntToStr(FuLong));
229 |
230 | node2 := sTreeView1.Items.AddChild(node, 'PreferredVectorWidth:');
231 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, SizeOf(FLong), @FLong, nil);
232 | sTreeView1.Items.AddChild(node2, 'Char: ' + IntToStr(FLong));
233 |
234 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, SizeOf(FLong), @FLong, nil);
235 | sTreeView1.Items.AddChild(node2, 'Short: ' + IntToStr(FLong));
236 |
237 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, SizeOf(FLong), @FLong, nil);
238 | sTreeView1.Items.AddChild(node2, 'Int: ' + IntToStr(FLong));
239 |
240 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, SizeOf(FLong), @FLong, nil);
241 | sTreeView1.Items.AddChild(node2, 'Long: ' + IntToStr(FLong));
242 |
243 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, SizeOf(FLong), @FLong, nil);
244 | sTreeView1.Items.AddChild(node2, 'Float: ' + IntToStr(FLong));
245 |
246 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, SizeOf(FLong), @FLong, nil);
247 | sTreeView1.Items.AddChild(node2, 'Double: ' + IntToStr(FLong));
248 |
249 | //DeviceImage
250 | node := sTreeView1.Items.Add(nil, 'Image');
251 |
252 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE2D_MAX_WIDTH, SizeOf(FVecs[0]), @FVecs[0], nil);
253 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE2D_MAX_HEIGHT, SizeOf(FVecs[0]), @FVecs[1], nil);
254 | sTreeView1.Items.AddChild(node, '2DMax: ' + IntToStr(FVecs[0]) + 'x' + IntToStr(FVecs[1]));
255 |
256 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE3D_MAX_WIDTH, SizeOf(FVecs[0]), @FVecs[0], nil);
257 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE3D_MAX_HEIGHT, SizeOf(FVecs[0]), @FVecs[1], nil);
258 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_IMAGE3D_MAX_HEIGHT, SizeOf(FVecs[0]), @FVecs[2], nil);
259 | sTreeView1.Items.AddChild(node, '3DMax: ' + IntToStr(FVecs[0]) + 'x' + IntToStr(FVecs[1]) + 'x' + IntToStr(FVecs[2]));
260 |
261 | //NV Device
262 | node := sTreeView1.Items.Add(nil, 'NV');
263 |
264 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_COMPUTE_CAPABILITY_MAJOR, SizeOf(FVecl[0]), @FVecl[0], nil);
265 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_COMPUTE_CAPABILITY_MINOR, SizeOf(FVecl[0]), @FVecl[1], nil);
266 | sTreeView1.Items.AddChild(node, 'ComputeCapability: ' + IntToStr(FVecl[0]) + '.' + IntToStr(FVecl[1]));
267 |
268 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_REGISTERS_PER_BLOCK, SizeOf(FLong), @FLong, nil);
269 | sTreeView1.Items.AddChild(node, 'RegistersPerBlock: ' + IntToStr(FLong));
270 |
271 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_WARP_SIZE, SizeOf(FLong), @FLong, nil);
272 | sTreeView1.Items.AddChild(node, 'WarpSize: ' + IntToStr(FLong));
273 |
274 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_GPU_OVERLAP, SizeOf(FBool), @FBool, nil);
275 | sTreeView1.Items.AddChild(node, 'GPU_Overlap: ' + IntToStr(FBool));
276 |
277 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_KERNEL_EXEC_TIMEOUT, SizeOf(FBool), @FBool, nil);
278 | sTreeView1.Items.AddChild(node, 'KernelExecTimeOut: ' + IntToStr(FBool));
279 |
280 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_NV_DEVICE_INTEGRATED_MEMORY, SizeOf(FBool), @FBool, nil);
281 | sTreeView1.Items.AddChild(node, 'IntegratedMemory: ' + IntToStr(FBool));
282 | end;
283 |
284 | procedure TForm1.FormCreate(Sender: TObject);
285 | var
286 | SysDir: array [0..(MAX_PATH - 1)] of AnsiChar;
287 | l: Cardinal;
288 | FVendor: AnsiString;
289 | FRC: HGLRC;
290 | FDC: HDC;
291 | pfd: TPixelFormatDescriptor;
292 | FOCL: AnsiString;
293 |
294 | i: Integer;
295 | begin
296 | l := MAX_PATH;
297 | GetSystemDirectoryA(@SysDir[0], l);
298 |
299 | {$IFNDEF VER150}
300 | {$REGION 'GetVendor'}
301 | {$ENDIF}
302 | FillChar(pfd, SizeOf(pfd), 0);
303 | with pfd do begin
304 | nSize := SizeOf(pfd);
305 | nVersion := 1;
306 | dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
307 | iPixelType := PFD_TYPE_RGBA;
308 | cColorBits := 32;
309 | cDepthBits := 24;
310 | cStencilBits := 8;
311 | iLayerType := PFD_MAIN_PLANE;
312 | end;
313 |
314 | InitOpenGL;
315 | DeactivateRenderingContext;
316 | FDC := GetDC(Form1.Handle);
317 |
318 | SetPixelFormat(FDC, ChoosePixelFormat(FDC, @pfd), @pfd);
319 |
320 | FRC := dglOpenGL.wglCreateContext(FDC);
321 | wglMakeCurrent(FDC, FRC);
322 | ReadImplementationProperties;
323 | ReadExtensions;
324 | FVendor := glGetString(GL_VERSION);
325 | FVendor := glGetString(GL_VENDOR);
326 | wglMakeCurrent(0, 0);
327 | wglDeleteContext(FRC);
328 | ReleaseDC(Form1.Handle, FDC);
329 | {$IFNDEF VER150}
330 | {$ENDREGION}
331 | {$ENDIF}
332 |
333 | if FVendor = nvd then
334 | FOCL := NV_DRIVER
335 | else
336 | if FVendor = ati_amdd then
337 | FOCL := ATI_AMD_DRIVER;
338 |
339 | if FVendor = nvd then
340 | ImageNV.Visible := True
341 | else
342 | if FVendor = ati_amdd then
343 | ImageAMD.Visible := True;
344 |
345 | if not InitOpenCL(string(FOCL)) then begin
346 | MessageBoxA(Handle, 'InitOpenCL - fail', 'Error', MB_OK or MB_ICONERROR);
347 | Exit;
348 | end;
349 |
350 | InitCL_EXT;
351 | InitCL_OGL;
352 | InitCL_D3D9;
353 | // InitCL_D3D10;
354 |
355 | FStatus := clGetPlatformIDs(1, @Fplatform_, nil);
356 | if FStatus <> CL_SUCCESS then begin
357 | MessageBoxA(Handle, PAnsiChar(GetString(FStatus)), 'Error', MB_OK or MB_ICONERROR);
358 | Close;
359 | Exit;
360 | end;
361 |
362 | CPS[1] := pcl_context_properties(Fplatform_);
363 | Fcontext:=clCreateContextFromType(@CPS, CL_DEVICE_TYPE_ALL,nil,nil,@Fstatus);
364 | if FStatus <> CL_SUCCESS then begin
365 | MessageBoxA(Handle, PAnsiChar(GetString(FStatus)), 'Error', MB_OK or MB_ICONERROR);
366 | Close;
367 | Exit;
368 | end;
369 |
370 | FStatus:=clGetContextInfo(Fcontext,CL_CONTEXT_DEVICES,0,nil,@Fdev_num);
371 | if FStatus <> CL_SUCCESS then begin
372 | MessageBoxA(0, PAnsiChar(GetString(FStatus)), 'Error', MB_OK or MB_ICONERROR);
373 | Close;
374 | Exit;
375 | end;
376 |
377 | if Fdev_num <= 0 then begin
378 | MessageBox(Handle, PWideChar(GetString(FStatus)), 'Error', MB_OK or MB_ICONERROR);
379 | Close;
380 | Exit;
381 | end;
382 |
383 | for i := 0 to Round(Fdev_num / 4) - 1 do begin
384 | Fcurrent_device := oclGetDev(Fcontext, i);
385 | Fcurrent_indevice := Integer(Fcurrent_device^);
386 | FStatus := clGetDeviceInfo(PCL_device_id(Fcurrent_indevice), CL_DEVICE_NAME, SizeOf(FBuf), @FBuf, nil);
387 | if FStatus <> CL_SUCCESS then begin
388 | MessageBox(Handle, PWideChar(GetString(FStatus)), 'Error', MB_OK or MB_ICONERROR);
389 | Close;
390 | Exit;
391 | end;
392 | ComboBoxDevice.Items.Add('[' + IntToStr(i) + '] ' + string(FBuf));
393 | end;
394 | ComboBoxDevice.ItemIndex := 0;
395 | ComboBoxDeviceChange(Sender);
396 | end;
397 |
398 | procedure TForm1.sButton1Click(Sender: TObject);
399 | begin
400 | Close;
401 | end;
402 |
403 | end.
404 |
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.dpr:
--------------------------------------------------------------------------------
1 | program OpenCL_Info;
2 |
3 | uses
4 | Forms,
5 | Main in 'Main.pas' {Form1};
6 |
7 | {$R *.res}
8 |
9 | begin
10 | Application.Initialize;
11 | Application.MainFormOnTaskbar := True;
12 | Application.CreateForm(TForm1, Form1);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {BF2E8E72-9936-4FE3-ABC7-965B32F1DBA7}
4 | 12.0
5 | OpenCL_Info.dpr
6 | Debug
7 | DCC32
8 |
9 |
10 | true
11 |
12 |
13 | true
14 | Base
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | ..\DCU\
24 | OpenCL_Info.exe
25 | 00400000
26 | ..\Libs\;..\Libs\OpenCL;..\..\..\Libs\acnt_t\D2010;$(DCC_UnitSearchPath)
27 | WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)
28 | x86
29 | false
30 | false
31 | false
32 | false
33 | false
34 |
35 |
36 | false
37 | RELEASE;$(DCC_Define)
38 | 0
39 | false
40 |
41 |
42 | DEBUG;$(DCC_Define)
43 |
44 |
45 |
46 | MainSource
47 |
48 |
49 |
50 |
51 |
52 | Base
53 |
54 |
55 | Cfg_2
56 | Base
57 |
58 |
59 | Cfg_1
60 | Base
61 |
62 |
63 |
64 |
65 | Delphi.Personality.12
66 |
67 |
68 |
69 |
70 | OpenCL_Info.dpr
71 |
72 |
73 | False
74 | True
75 | False
76 |
77 |
78 | False
79 | False
80 | 1
81 | 0
82 | 0
83 | 0
84 | False
85 | False
86 | False
87 | False
88 | False
89 | 1049
90 | 1251
91 |
92 |
93 |
94 |
95 | 1.0.0.0
96 |
97 |
98 |
99 |
100 |
101 | 1.0.0.0
102 |
103 |
104 |
105 |
106 | 12
107 |
108 |
109 |
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.dproj.local:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 2010.03.31 00:25:10.546.pas,C:\Documents and Settings\Igroman\Мои документы\RAD Studio\Projects\Unit1.pas=C:\sandbox\OpenCL_Info\Main.pas
5 | 2010.03.31 00:25:10.546.dfm,C:\Documents and Settings\Igroman\Мои документы\RAD Studio\Projects\Unit1.dfm=C:\sandbox\OpenCL_Info\Main.dfm
6 | 2010.03.31 00:25:16.578.dproj,C:\Documents and Settings\Igroman\Мои документы\RAD Studio\Projects\Project2.dproj=C:\sandbox\OpenCL_Info\OpenCL_Info.dproj
7 | 2010.03.31 01:37:39.062.dproj,C:\sandbox\OpenCL_Info\OpenCL_Info.dproj=C:\sandbox\OpenCL_Info\OpenCL_Info.dproj
8 |
9 |
10 |
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/OpenCL_Info/OpenCL_Info.exe
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.identcache:
--------------------------------------------------------------------------------
1 | ;C:\sandbox\OpenCL\delphi-opencl\OpenCL_Info\OpenCL_Info.dpr 4C:\sandbox\OpenCL\delphi-opencl\OpenCL_Info\Main.pas
--------------------------------------------------------------------------------
/OpenCL_Info/OpenCL_Info.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecocce/delphi-opencl/a79d7d4214e2884a989d4548711c898c77e1bd0e/OpenCL_Info/OpenCL_Info.res
--------------------------------------------------------------------------------