1
- export class GPU < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] > {
1
+ export class GPU {
2
2
static isGPUSupported : boolean ;
3
3
static isCanvasSupported : boolean ;
4
4
static isHeadlessGLSupported : boolean ;
@@ -9,11 +9,11 @@ export class GPU<ArgTypes extends ThreadKernelVariable[] = ThreadKernelVariable[
9
9
static isGPUHTMLImageArraySupported : boolean ;
10
10
static isSinglePrecisionSupported : boolean ;
11
11
constructor ( settings ?: IGPUSettings ) ;
12
- functions : GPUFunction < ArgTypes > [ ] ;
12
+ functions : GPUFunction < ThreadKernelVariable [ ] > [ ] ;
13
13
nativeFunctions : IGPUNativeFunction [ ] ;
14
14
setFunctions ( flag : any ) : this;
15
15
setNativeFunctions ( flag : IGPUNativeFunction [ ] ) : this;
16
- addFunction ( kernel : GPUFunction < ArgTypes > , settings ?: IGPUFunctionSettings ) : this;
16
+ addFunction ( kernel : GPUFunction , settings ?: IGPUFunctionSettings ) : this;
17
17
addNativeFunction ( name : string , source : string , settings ?: IGPUFunctionSettings ) : this;
18
18
combineKernels ( ...kernels : KernelFunction [ ] ) : IKernelRunShortcut ;
19
19
combineKernels < KF extends KernelFunction > ( ...kernels : KF [ ] ) :
@@ -23,57 +23,45 @@ export class GPU<ArgTypes extends ThreadKernelVariable[] = ThreadKernelVariable[
23
23
| ReturnType < KF > [ ] [ ] [ ]
24
24
| Texture
25
25
| void
26
- )
26
+ )
27
27
& 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 > [ ] [ ] [ ]
34
34
| Texture
35
35
| 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
+ )
69
37
& IKernelRunShortcutBase ;
38
+ createKernelMap <
39
+ ResultType ,
40
+ KernelFunctionType ,
41
+ ConstantsType = { }
42
+ > (
43
+ subKernels : ISubKernelObject | ISubKernelArray ,
44
+ rootKernel : ThreadFunction ,
45
+ settings ?: IGPUKernelSettings ) : ( ( ( ) => IMappedKernelResult ) & IKernelMapRunShortcut < ResultType > ) ;
70
46
destroy ( ) : Promise < void > ;
71
47
Kernel : typeof Kernel ;
72
48
mode : string ;
73
49
canvas : any ;
74
50
context : any ;
75
51
}
76
52
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
+
77
65
export interface IGPUFunction extends IFunctionSettings {
78
66
source : string ;
79
67
}
@@ -214,7 +202,7 @@ export class Kernel {
214
202
setImmutable ( flag : boolean ) : this;
215
203
setCanvas ( flag : any ) : this;
216
204
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;
218
206
setFunctions ( flag : any ) : this;
219
207
setNativeFunctions ( flag : IGPUNativeFunction [ ] ) : this;
220
208
setStrictIntegers ( flag : boolean ) : this;
@@ -244,14 +232,14 @@ export class Kernel {
244
232
}
245
233
246
234
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 >
249
237
| IFunction
250
238
| IGPUFunction
251
239
| string [ ] ;
252
240
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 ) ;
255
243
256
244
export type Precision = 'single' | 'unsigned' ;
257
245
@@ -315,8 +303,8 @@ export interface IConstantsThis {
315
303
316
304
export interface IKernelXYZ {
317
305
x : number ;
318
- y ? : number ;
319
- z ? : number ;
306
+ y : number ;
307
+ z : number ;
320
308
}
321
309
322
310
export interface FunctionList {
@@ -370,6 +358,14 @@ export interface IKernelRunShortcut extends IKernelRunShortcutBase {
370
358
exec ( ) : Promise < KernelOutput > ;
371
359
}
372
360
361
+ export interface IKernelMapRunShortcut < SubKernelResultTypes > extends IKernelRunShortcutBase {
362
+ kernel : Kernel ;
363
+ ( ...args : KernelVariable [ ] ) : {
364
+ result : KernelOutput
365
+ } & SubKernelResultTypes ;
366
+ exec ( ) : Promise < KernelOutput > ;
367
+ }
368
+
373
369
export interface IKernelFeatures {
374
370
isFloatRead : boolean ;
375
371
kernelMap : boolean ;
@@ -387,10 +383,10 @@ export interface IKernelFeatures {
387
383
highFloatPrecision : { rangeMax : number } ;
388
384
}
389
385
390
- export interface IKernelFunctionThis {
386
+ export interface IKernelFunctionThis < ConstantsT = Object > {
391
387
output : IKernelXYZ ;
392
388
thread : IKernelXYZ ;
393
- constants : IConstantsThis ;
389
+ constants : ConstantsT ;
394
390
color ( r : number ) : void ,
395
391
color ( r : number , g : number ) : void ,
396
392
color ( r : number , g : number , b : number ) : void ,
@@ -414,6 +410,8 @@ export type KernelVariable =
414
410
415
411
export type ThreadFunctionResult
416
412
= number
413
+ | number [ ]
414
+ | number [ ] [ ]
417
415
| [ number , number ]
418
416
| [ number , number , number ]
419
417
| [ number , number , number , number ]
@@ -457,8 +455,8 @@ export type Pixel = {
457
455
a : number ;
458
456
} ;
459
457
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 > ,
462
460
...args : ArgT
463
461
) => KernelOutput ) ;
464
462
@@ -608,7 +606,7 @@ export interface IPlugin {
608
606
onBeforeRun : ( kernel : Kernel ) => void ;
609
607
}
610
608
611
- export type OutputDimensions = [ number , number , number ] | Int32Array ;
609
+ export type OutputDimensions = [ number ] | [ number , number ] | [ number , number , number ] | Int32Array ;
612
610
export type TextureDimensions = [ number , number ] ;
613
611
614
612
export class Input {
0 commit comments