├── 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.pasFD:\Developer\DelphiWorkSpace\delphi-opencl\Libs\OpenCL\CL_platform.pasCD:\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.pas2J:\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.pas5J:\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.pas2J:\OpenCL_samples\svn\svn\Libs\OpenCL\DelphiCL.pas5J:\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.pas2J:\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.pas5J:\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 |
Form1
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.dpr4C:\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 --------------------------------------------------------------------------------