1- export class GPU < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] > {
1+ export class GPU {
22 static isGPUSupported : boolean ;
33 static isCanvasSupported : boolean ;
44 static isHeadlessGLSupported : boolean ;
@@ -9,11 +9,11 @@ export class GPU<ArgTypes extends ThreadKernelVariable[] = ThreadKernelVariable[
99 static isGPUHTMLImageArraySupported : boolean ;
1010 static isSinglePrecisionSupported : boolean ;
1111 constructor ( settings ?: IGPUSettings ) ;
12- functions : GPUFunction < ArgTypes > [ ] ;
12+ functions : GPUFunction < ThreadKernelVariable [ ] > [ ] ;
1313 nativeFunctions : IGPUNativeFunction [ ] ;
1414 setFunctions ( flag : any ) : this;
1515 setNativeFunctions ( flag : IGPUNativeFunction [ ] ) : this;
16- addFunction ( kernel : GPUFunction < ArgTypes > , settings ?: IGPUFunctionSettings ) : this;
16+ addFunction ( kernel : GPUFunction , settings ?: IGPUFunctionSettings ) : this;
1717 addNativeFunction ( name : string , source : string , settings ?: IGPUFunctionSettings ) : this;
1818 combineKernels ( ...kernels : KernelFunction [ ] ) : IKernelRunShortcut ;
1919 combineKernels < KF extends KernelFunction > ( ...kernels : KF [ ] ) :
@@ -23,57 +23,45 @@ export class GPU<ArgTypes extends ThreadKernelVariable[] = ThreadKernelVariable[
2323 | ReturnType < KF > [ ] [ ] [ ]
2424 | Texture
2525 | void
26- )
26+ )
2727 & IKernelRunShortcutBase ;
28- createKernel < MethodArgTypes extends ArgTypes > ( kernel : KernelFunction < MethodArgTypes > , settings ?: IGPUKernelSettings ) : IKernelRunShortcut ;
29- createKernel < KF extends KernelFunction > ( kernel : KF , settings ?: IGPUKernelSettings ) :
30- ( ( ...args : Parameters < KF > ) =>
31- ReturnType < KF > [ ]
32- | ReturnType < KF > [ ] [ ]
33- | ReturnType < KF > [ ] [ ] [ ]
28+ createKernel < ArgTypes extends ThreadKernelVariable [ ] , ConstantsT extends IConstantsThis > ( kernel : KernelFunction < ArgTypes , ConstantsT > , settings ?: IGPUKernelSettings ) : IKernelRunShortcut ;
29+ createKernel < KernelType extends KernelFunction > ( kernel : KernelType , settings ?: IGPUKernelSettings ) :
30+ ( ( ...args : Parameters < KernelType > ) =>
31+ ReturnType < KernelType > [ ]
32+ | ReturnType < KernelType > [ ] [ ]
33+ | ReturnType < KernelType > [ ] [ ] [ ]
3434 | Texture
3535 | void
36- )
37- & IKernelRunShortcutBase ;
38- createKernelMap (
39- subKernels : {
40- [ targetLocation : string ] : KernelFunction
41- }
42- | KernelFunction [ ] ,
43- rootKernel : KernelFunction ,
44- settings ?: IGPUKernelSettings ) : ( ( ( ) => IMappedKernelResult ) & IKernelRunShortcut ) ;
45- // this needs further refined
46- createKernelMap < KF extends KernelFunction > (
47- subKernels : {
48- [ targetLocation : string ] : KF
49- }
50- | KF [ ] ,
51- rootKernel : KF ,
52- settings ?: IGPUKernelSettings
53- ) :
54- ( ( ...args : Parameters < KF > ) => {
55- result ?:
56- ReturnType < KF > [ ]
57- | ReturnType < KF > [ ] [ ]
58- | ReturnType < KF > [ ] [ ] [ ]
59- | Texture
60- | void ;
61- [ targetLocation : string ] :
62- ReturnType < KF > [ ]
63- | ReturnType < KF > [ ] [ ]
64- | ReturnType < KF > [ ] [ ] [ ]
65- | Texture
66- | void
67- }
68- )
36+ )
6937 & IKernelRunShortcutBase ;
38+ createKernelMap <
39+ ResultType ,
40+ KernelFunctionType ,
41+ ConstantsType = { }
42+ > (
43+ subKernels : ISubKernelObject | ISubKernelArray ,
44+ rootKernel : ThreadFunction ,
45+ settings ?: IGPUKernelSettings ) : ( ( ( ) => IMappedKernelResult ) & IKernelMapRunShortcut < ResultType > ) ;
7046 destroy ( ) : Promise < void > ;
7147 Kernel : typeof Kernel ;
7248 mode : string ;
7349 canvas : any ;
7450 context : any ;
7551}
7652
53+ export interface ISubKernelObject {
54+ [ targetLocation : string ] : KernelFunction
55+ }
56+
57+ export interface ISubKernelArray {
58+ [ index : number ] : KernelFunction
59+ }
60+
61+ export interface ISubKernelsResults {
62+ [ resultsLocation : string ] : KernelOutput
63+ }
64+
7765export interface IGPUFunction extends IFunctionSettings {
7866 source : string ;
7967}
@@ -214,7 +202,7 @@ export class Kernel {
214202 setImmutable ( flag : boolean ) : this;
215203 setCanvas ( flag : any ) : this;
216204 setContext ( flag : any ) : this;
217- addFunction < MethodArgTypes extends ThreadKernelVariable [ ] > ( flag : GPUFunction < MethodArgTypes > , settings ?: IFunctionSettings ) : this;
205+ addFunction < ArgTypes extends ThreadKernelVariable [ ] > ( flag : GPUFunction < ArgTypes > , settings ?: IFunctionSettings ) : this;
218206 setFunctions ( flag : any ) : this;
219207 setNativeFunctions ( flag : IGPUNativeFunction [ ] ) : this;
220208 setStrictIntegers ( flag : boolean ) : this;
@@ -244,14 +232,14 @@ export class Kernel {
244232}
245233
246234
247- export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] >
248- = ThreadFunction < ArgTypes >
235+ export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } >
236+ = ThreadFunction < ArgTypes , ConstantsType >
249237 | IFunction
250238 | IGPUFunction
251239 | string [ ] ;
252240
253- export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] > =
254- ( ( ...args : ArgTypes ) => ThreadFunctionResult ) ;
241+ export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } > =
242+ ( ( this : IKernelFunctionThis < ConstantsType > , ...args : ArgTypes ) => ThreadFunctionResult ) ;
255243
256244export type Precision = 'single' | 'unsigned' ;
257245
@@ -315,8 +303,8 @@ export interface IConstantsThis {
315303
316304export interface IKernelXYZ {
317305 x : number ;
318- y ? : number ;
319- z ? : number ;
306+ y : number ;
307+ z : number ;
320308}
321309
322310export interface FunctionList {
@@ -370,6 +358,14 @@ export interface IKernelRunShortcut extends IKernelRunShortcutBase {
370358 exec ( ) : Promise < KernelOutput > ;
371359}
372360
361+ export interface IKernelMapRunShortcut < SubKernelResultTypes > extends IKernelRunShortcutBase {
362+ kernel : Kernel ;
363+ ( ...args : KernelVariable [ ] ) : {
364+ result : KernelOutput
365+ } & SubKernelResultTypes ;
366+ exec ( ) : Promise < KernelOutput > ;
367+ }
368+
373369export interface IKernelFeatures {
374370 isFloatRead : boolean ;
375371 kernelMap : boolean ;
@@ -387,10 +383,10 @@ export interface IKernelFeatures {
387383 highFloatPrecision : { rangeMax : number } ;
388384}
389385
390- export interface IKernelFunctionThis {
386+ export interface IKernelFunctionThis < ConstantsT = Object > {
391387 output : IKernelXYZ ;
392388 thread : IKernelXYZ ;
393- constants : IConstantsThis ;
389+ constants : ConstantsT ;
394390 color ( r : number ) : void ,
395391 color ( r : number , g : number ) : void ,
396392 color ( r : number , g : number , b : number ) : void ,
@@ -414,6 +410,8 @@ export type KernelVariable =
414410
415411export type ThreadFunctionResult
416412 = number
413+ | number [ ]
414+ | number [ ] [ ]
417415 | [ number , number ]
418416 | [ number , number , number ]
419417 | [ number , number , number , number ]
@@ -457,8 +455,8 @@ export type Pixel = {
457455 a : number ;
458456} ;
459457
460- export type KernelFunction < ArgT extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] > = ( (
461- this : IKernelFunctionThis ,
458+ export type KernelFunction < ArgT extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsT extends IConstantsThis = { } > = ( (
459+ this : IKernelFunctionThis < ConstantsT > ,
462460 ...args : ArgT
463461) => KernelOutput ) ;
464462
@@ -608,7 +606,7 @@ export interface IPlugin {
608606 onBeforeRun : ( kernel : Kernel ) => void ;
609607}
610608
611- export type OutputDimensions = [ number , number , number ] | Int32Array ;
609+ export type OutputDimensions = [ number ] | [ number , number ] | [ number , number , number ] | Int32Array ;
612610export type TextureDimensions = [ number , number ] ;
613611
614612export class Input {
0 commit comments