@@ -36,13 +36,12 @@ export class GPU {
3636 )
3737 & IKernelRunShortcutBase ;
3838 createKernelMap <
39- ResultType ,
40- KernelFunctionType ,
41- ConstantsType = { }
39+ ArgTypes extends ThreadKernelVariable [ ] ,
40+ ConstantsType = null ,
4241 > (
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 > ) ;
4645 destroy ( ) : Promise < void > ;
4746 Kernel : typeof Kernel ;
4847 mode : string ;
@@ -51,15 +50,19 @@ export class GPU {
5150}
5251
5352export interface ISubKernelObject {
54- [ targetLocation : string ] : KernelFunction
53+ [ targetLocation : string ] :
54+ ( ( ...args : ThreadKernelVariable [ ] ) => ThreadFunctionResult )
55+ | ( ( ...args : any [ ] ) => ThreadFunctionResult ) ;
5556}
5657
5758export interface ISubKernelArray {
58- [ index : number ] : KernelFunction
59+ [ index : number ] :
60+ ( ( ...args : ThreadKernelVariable [ ] ) => ThreadFunctionResult )
61+ | ( ( ...args : any [ ] ) => ThreadFunctionResult ) ;
5962}
6063
6164export interface ISubKernelsResults {
62- [ resultsLocation : string ] : KernelOutput
65+ [ resultsLocation : string ] : KernelOutput ;
6366}
6467
6568export interface IGPUFunction extends IFunctionSettings {
@@ -232,13 +235,13 @@ export class Kernel {
232235}
233236
234237
235- export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } >
238+ export type GPUFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType = { } >
236239 = ThreadFunction < ArgTypes , ConstantsType >
237240 | IFunction
238241 | IGPUFunction
239242 | string [ ] ;
240243
241- export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType extends IConstantsThis = { } > =
244+ export type ThreadFunction < ArgTypes extends ThreadKernelVariable [ ] = ThreadKernelVariable [ ] , ConstantsType = { } > =
242245 ( ( this : IKernelFunctionThis < ConstantsType > , ...args : ArgTypes ) => ThreadFunctionResult ) ;
243246
244247export type Precision = 'single' | 'unsigned' ;
@@ -347,25 +350,19 @@ export interface ITypesList {
347350 [ typeName : string ] : GPUVariableType
348351}
349352
350- export interface IKernelRunShortcutBase extends Kernel {
353+ export interface IKernelRunShortcutBase < T = KernelOutput > extends Kernel {
351354 kernel : Kernel ;
352- exec ( ) : Promise < KernelOutput > ;
355+ ( ...args : KernelVariable [ ] ) : T ;
356+ exec ( ) : Promise < T > ;
353357}
354358
355359export interface IKernelRunShortcut extends IKernelRunShortcutBase {
356- kernel : Kernel ;
357- ( ...args : KernelVariable [ ] ) : KernelOutput ;
358- exec ( ) : Promise < KernelOutput > ;
359- }
360360
361- export interface IKernelMapRunShortcut < SubKernelResultTypes > extends IKernelRunShortcutBase {
362- kernel : Kernel ;
363- ( ...args : KernelVariable [ ] ) : {
364- result : KernelOutput
365- } & SubKernelResultTypes ;
366- exec ( ) : Promise < KernelOutput > ;
367361}
368362
363+ export interface IKernelMapRunShortcut < SubKernelType > extends IKernelRunShortcutBase <
364+ { result : KernelOutput } & { [ key in keyof SubKernelType ] : KernelOutput } > { }
365+
369366export interface IKernelFeatures {
370367 isFloatRead : boolean ;
371368 kernelMap : boolean ;
@@ -383,7 +380,7 @@ export interface IKernelFeatures {
383380 highFloatPrecision : { rangeMax : number } ;
384381}
385382
386- export interface IKernelFunctionThis < ConstantsT = Object > {
383+ export interface IKernelFunctionThis < ConstantsT = { } > {
387384 output : IKernelXYZ ;
388385 thread : IKernelXYZ ;
389386 constants : ConstantsT ;
@@ -455,10 +452,17 @@ export type Pixel = {
455452 a : number ;
456453} ;
457454
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+ }
462466
463467export type KernelOutput = void
464468 | number
0 commit comments