Skip to content

Commit 1dc2739

Browse files
fix: Improve kernel maps typings
1 parent d5212d3 commit 1dc2739

File tree

2 files changed

+33
-29
lines changed

2 files changed

+33
-29
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gpu.js",
3-
"version": "2.10.1",
3+
"version": "2.10.3",
44
"description": "GPU Accelerated JavaScript",
55
"engines": {
66
"node": ">=8.0.0"

src/index.d.ts

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5352
export interface ISubKernelObject {
54-
[targetLocation: string]: KernelFunction
53+
[targetLocation: string]:
54+
((...args: ThreadKernelVariable[]) => ThreadFunctionResult)
55+
| ((...args: any[]) => ThreadFunctionResult);
5556
}
5657

5758
export interface ISubKernelArray {
58-
[index: number]: KernelFunction
59+
[index: number]:
60+
((...args: ThreadKernelVariable[]) => ThreadFunctionResult)
61+
| ((...args: any[]) => ThreadFunctionResult);
5962
}
6063

6164
export interface ISubKernelsResults {
62-
[resultsLocation: string]: KernelOutput
65+
[resultsLocation: string]: KernelOutput;
6366
}
6467

6568
export 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

244247
export 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

355359
export 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+
369366
export 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

463467
export type KernelOutput = void
464468
| number

0 commit comments

Comments
 (0)