@@ -36,13 +36,12 @@ export class GPU {
36
36
)
37
37
& IKernelRunShortcutBase ;
38
38
createKernelMap <
39
- ResultType ,
40
- KernelFunctionType ,
41
- ConstantsType = { }
39
+ ArgTypes extends ThreadKernelVariable [ ] ,
40
+ ConstantsType = null ,
42
41
> (
43
- subKernels : ISubKernelObject | ISubKernelArray ,
44
- rootKernel : ThreadFunction ,
45
- settings ?: IGPUKernelSettings ) : ( ( ( ) => IMappedKernelResult ) & IKernelMapRunShortcut < ResultType > ) ;
42
+ subKernels : ISubKernelObject ,
43
+ rootKernel : ThreadFunction < ArgTypes , ConstantsType > ,
44
+ settings ?: IGPUKernelSettings ) : ( ( ( this : IKernelFunctionThis < ConstantsType > , ... args : ArgTypes ) => IMappedKernelResult ) & IKernelMapRunShortcut < typeof subKernels > ) ;
46
45
destroy ( ) : Promise < void > ;
47
46
Kernel : typeof Kernel ;
48
47
mode : string ;
@@ -51,15 +50,19 @@ export class GPU {
51
50
}
52
51
53
52
export interface ISubKernelObject {
54
- [ targetLocation : string ] : KernelFunction
53
+ [ targetLocation : string ] :
54
+ ( ( ...args : ThreadKernelVariable [ ] ) => ThreadFunctionResult )
55
+ | ( ( ...args : any [ ] ) => ThreadFunctionResult ) ;
55
56
}
56
57
57
58
export interface ISubKernelArray {
58
- [ index : number ] : KernelFunction
59
+ [ index : number ] :
60
+ ( ( ...args : ThreadKernelVariable [ ] ) => ThreadFunctionResult )
61
+ | ( ( ...args : any [ ] ) => ThreadFunctionResult ) ;
59
62
}
60
63
61
64
export interface ISubKernelsResults {
62
- [ resultsLocation : string ] : KernelOutput
65
+ [ resultsLocation : string ] : KernelOutput ;
63
66
}
64
67
65
68
export interface IGPUFunction extends IFunctionSettings {
@@ -232,13 +235,13 @@ export class Kernel {
232
235
}
233
236
234
237
235
- export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } >
238
+ export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType = { } >
236
239
= ThreadFunction < ArgTypes , ConstantsType >
237
240
| IFunction
238
241
| IGPUFunction
239
242
| string [ ] ;
240
243
241
- export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } > =
244
+ export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType = { } > =
242
245
( ( this : IKernelFunctionThis < ConstantsType > , ...args : ArgTypes ) => ThreadFunctionResult ) ;
243
246
244
247
export type Precision = 'single' | 'unsigned' ;
@@ -347,25 +350,19 @@ export interface ITypesList {
347
350
[ typeName : string ] : GPUVariableType
348
351
}
349
352
350
- export interface IKernelRunShortcutBase extends Kernel {
353
+ export interface IKernelRunShortcutBase < T = KernelOutput > extends Kernel {
351
354
kernel : Kernel ;
352
- exec ( ) : Promise < KernelOutput > ;
355
+ ( ...args : KernelVariable [ ] ) : T ;
356
+ exec ( ) : Promise < T > ;
353
357
}
354
358
355
359
export interface IKernelRunShortcut extends IKernelRunShortcutBase {
356
- kernel : Kernel ;
357
- ( ...args : KernelVariable [ ] ) : KernelOutput ;
358
- exec ( ) : Promise < KernelOutput > ;
359
- }
360
360
361
- export interface IKernelMapRunShortcut < SubKernelResultTypes > extends IKernelRunShortcutBase {
362
- kernel : Kernel ;
363
- ( ...args : KernelVariable [ ] ) : {
364
- result : KernelOutput
365
- } & SubKernelResultTypes ;
366
- exec ( ) : Promise < KernelOutput > ;
367
361
}
368
362
363
+ export interface IKernelMapRunShortcut < SubKernelType > extends IKernelRunShortcutBase <
364
+ { result : KernelOutput } & { [ key in keyof SubKernelType ] : KernelOutput } > { }
365
+
369
366
export interface IKernelFeatures {
370
367
isFloatRead : boolean ;
371
368
kernelMap : boolean ;
@@ -383,7 +380,7 @@ export interface IKernelFeatures {
383
380
highFloatPrecision : { rangeMax : number } ;
384
381
}
385
382
386
- export interface IKernelFunctionThis < ConstantsT = Object > {
383
+ export interface IKernelFunctionThis < ConstantsT = { } > {
387
384
output : IKernelXYZ ;
388
385
thread : IKernelXYZ ;
389
386
constants : ConstantsT ;
@@ -455,10 +452,17 @@ export type Pixel = {
455
452
a : number ;
456
453
} ;
457
454
458
- export type KernelFunction < ArgT extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsT extends IConstantsThis = { } > = ( (
459
- this : IKernelFunctionThis < ConstantsT > ,
460
- ...args : ArgT
461
- ) => KernelOutput ) ;
455
+ // export type KernelFunction<ArgT extends ThreadKernelVariable[] = ThreadKernelVariable[], ConstantsT extends IConstantsThis = {}> = ((
456
+ // this: IKernelFunctionThis<ConstantsT>,
457
+ // ...args: ArgT
458
+ // ) => KernelOutput);
459
+
460
+ export interface KernelFunction < ArgT extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsT = { } > {
461
+ (
462
+ this : IKernelFunctionThis < ConstantsT > ,
463
+ ...args : ArgT
464
+ ) : KernelOutput ;
465
+ }
462
466
463
467
export type KernelOutput = void
464
468
| number
0 commit comments