UNPKG

gpu.js

Version:

GPU Accelerated JavaScript

202 lines (187 loc) 8.97 kB
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean'); const { WebGLKernelValueFloat } = require('./kernel-value/float'); const { WebGLKernelValueInteger } = require('./kernel-value/integer'); const { WebGLKernelValueHTMLImage } = require('./kernel-value/html-image'); const { WebGLKernelValueDynamicHTMLImage } = require('./kernel-value/dynamic-html-image'); const { WebGLKernelValueHTMLVideo } = require('./kernel-value/html-video'); const { WebGLKernelValueDynamicHTMLVideo } = require('./kernel-value/dynamic-html-video'); const { WebGLKernelValueSingleInput } = require('./kernel-value/single-input'); const { WebGLKernelValueDynamicSingleInput } = require('./kernel-value/dynamic-single-input'); const { WebGLKernelValueUnsignedInput } = require('./kernel-value/unsigned-input'); const { WebGLKernelValueDynamicUnsignedInput } = require('./kernel-value/dynamic-unsigned-input'); const { WebGLKernelValueMemoryOptimizedNumberTexture } = require('./kernel-value/memory-optimized-number-texture'); const { WebGLKernelValueDynamicMemoryOptimizedNumberTexture } = require('./kernel-value/dynamic-memory-optimized-number-texture'); const { WebGLKernelValueNumberTexture } = require('./kernel-value/number-texture'); const { WebGLKernelValueDynamicNumberTexture } = require('./kernel-value/dynamic-number-texture'); const { WebGLKernelValueSingleArray } = require('./kernel-value/single-array'); const { WebGLKernelValueDynamicSingleArray } = require('./kernel-value/dynamic-single-array'); const { WebGLKernelValueSingleArray1DI } = require('./kernel-value/single-array1d-i'); const { WebGLKernelValueDynamicSingleArray1DI } = require('./kernel-value/dynamic-single-array1d-i'); const { WebGLKernelValueSingleArray2DI } = require('./kernel-value/single-array2d-i'); const { WebGLKernelValueDynamicSingleArray2DI } = require('./kernel-value/dynamic-single-array2d-i'); const { WebGLKernelValueSingleArray3DI } = require('./kernel-value/single-array3d-i'); const { WebGLKernelValueDynamicSingleArray3DI } = require('./kernel-value/dynamic-single-array3d-i'); const { WebGLKernelValueArray2 } = require('./kernel-value/array2'); const { WebGLKernelValueArray3 } = require('./kernel-value/array3'); const { WebGLKernelValueArray4 } = require('./kernel-value/array4'); const { WebGLKernelValueUnsignedArray } = require('./kernel-value/unsigned-array'); const { WebGLKernelValueDynamicUnsignedArray } = require('./kernel-value/dynamic-unsigned-array'); const kernelValueMaps = { unsigned: { dynamic: { 'Boolean': WebGLKernelValueBoolean, 'Integer': WebGLKernelValueInteger, 'Float': WebGLKernelValueFloat, 'Array': WebGLKernelValueDynamicUnsignedArray, 'Array(2)': WebGLKernelValueArray2, 'Array(3)': WebGLKernelValueArray3, 'Array(4)': WebGLKernelValueArray4, 'Array1D(2)': false, 'Array1D(3)': false, 'Array1D(4)': false, 'Array2D(2)': false, 'Array2D(3)': false, 'Array2D(4)': false, 'Array3D(2)': false, 'Array3D(3)': false, 'Array3D(4)': false, 'Input': WebGLKernelValueDynamicUnsignedInput, 'NumberTexture': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(1)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(2)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(3)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture, 'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture, 'HTMLCanvas': WebGLKernelValueDynamicHTMLImage, 'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage, 'HTMLImage': WebGLKernelValueDynamicHTMLImage, 'ImageBitmap': WebGLKernelValueDynamicHTMLImage, 'ImageData': WebGLKernelValueDynamicHTMLImage, 'HTMLImageArray': false, 'HTMLVideo': WebGLKernelValueDynamicHTMLVideo, }, static: { 'Boolean': WebGLKernelValueBoolean, 'Float': WebGLKernelValueFloat, 'Integer': WebGLKernelValueInteger, 'Array': WebGLKernelValueUnsignedArray, 'Array(2)': WebGLKernelValueArray2, 'Array(3)': WebGLKernelValueArray3, 'Array(4)': WebGLKernelValueArray4, 'Array1D(2)': false, 'Array1D(3)': false, 'Array1D(4)': false, 'Array2D(2)': false, 'Array2D(3)': false, 'Array2D(4)': false, 'Array3D(2)': false, 'Array3D(3)': false, 'Array3D(4)': false, 'Input': WebGLKernelValueUnsignedInput, 'NumberTexture': WebGLKernelValueNumberTexture, 'ArrayTexture(1)': WebGLKernelValueNumberTexture, 'ArrayTexture(2)': WebGLKernelValueNumberTexture, 'ArrayTexture(3)': WebGLKernelValueNumberTexture, 'ArrayTexture(4)': WebGLKernelValueNumberTexture, 'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture, 'HTMLCanvas': WebGLKernelValueHTMLImage, 'OffscreenCanvas': WebGLKernelValueHTMLImage, 'HTMLImage': WebGLKernelValueHTMLImage, 'ImageBitmap': WebGLKernelValueHTMLImage, 'ImageData': WebGLKernelValueHTMLImage, 'HTMLImageArray': false, 'HTMLVideo': WebGLKernelValueHTMLVideo, } }, single: { dynamic: { 'Boolean': WebGLKernelValueBoolean, 'Integer': WebGLKernelValueInteger, 'Float': WebGLKernelValueFloat, 'Array': WebGLKernelValueDynamicSingleArray, 'Array(2)': WebGLKernelValueArray2, 'Array(3)': WebGLKernelValueArray3, 'Array(4)': WebGLKernelValueArray4, 'Array1D(2)': WebGLKernelValueDynamicSingleArray1DI, 'Array1D(3)': WebGLKernelValueDynamicSingleArray1DI, 'Array1D(4)': WebGLKernelValueDynamicSingleArray1DI, 'Array2D(2)': WebGLKernelValueDynamicSingleArray2DI, 'Array2D(3)': WebGLKernelValueDynamicSingleArray2DI, 'Array2D(4)': WebGLKernelValueDynamicSingleArray2DI, 'Array3D(2)': WebGLKernelValueDynamicSingleArray3DI, 'Array3D(3)': WebGLKernelValueDynamicSingleArray3DI, 'Array3D(4)': WebGLKernelValueDynamicSingleArray3DI, 'Input': WebGLKernelValueDynamicSingleInput, 'NumberTexture': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(1)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(2)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(3)': WebGLKernelValueDynamicNumberTexture, 'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture, 'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture, 'HTMLCanvas': WebGLKernelValueDynamicHTMLImage, 'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage, 'HTMLImage': WebGLKernelValueDynamicHTMLImage, 'ImageBitmap': WebGLKernelValueDynamicHTMLImage, 'ImageData': WebGLKernelValueDynamicHTMLImage, 'HTMLImageArray': false, 'HTMLVideo': WebGLKernelValueDynamicHTMLVideo, }, static: { 'Boolean': WebGLKernelValueBoolean, 'Float': WebGLKernelValueFloat, 'Integer': WebGLKernelValueInteger, 'Array': WebGLKernelValueSingleArray, 'Array(2)': WebGLKernelValueArray2, 'Array(3)': WebGLKernelValueArray3, 'Array(4)': WebGLKernelValueArray4, 'Array1D(2)': WebGLKernelValueSingleArray1DI, 'Array1D(3)': WebGLKernelValueSingleArray1DI, 'Array1D(4)': WebGLKernelValueSingleArray1DI, 'Array2D(2)': WebGLKernelValueSingleArray2DI, 'Array2D(3)': WebGLKernelValueSingleArray2DI, 'Array2D(4)': WebGLKernelValueSingleArray2DI, 'Array3D(2)': WebGLKernelValueSingleArray3DI, 'Array3D(3)': WebGLKernelValueSingleArray3DI, 'Array3D(4)': WebGLKernelValueSingleArray3DI, 'Input': WebGLKernelValueSingleInput, 'NumberTexture': WebGLKernelValueNumberTexture, 'ArrayTexture(1)': WebGLKernelValueNumberTexture, 'ArrayTexture(2)': WebGLKernelValueNumberTexture, 'ArrayTexture(3)': WebGLKernelValueNumberTexture, 'ArrayTexture(4)': WebGLKernelValueNumberTexture, 'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture, 'HTMLCanvas': WebGLKernelValueHTMLImage, 'OffscreenCanvas': WebGLKernelValueHTMLImage, 'HTMLImage': WebGLKernelValueHTMLImage, 'ImageBitmap': WebGLKernelValueHTMLImage, 'ImageData': WebGLKernelValueHTMLImage, 'HTMLImageArray': false, 'HTMLVideo': WebGLKernelValueHTMLVideo, } }, }; function lookupKernelValueType(type, dynamic, precision, value) { if (!type) { throw new Error('type missing'); } if (!dynamic) { throw new Error('dynamic missing'); } if (!precision) { throw new Error('precision missing'); } if (value.type) { type = value.type; } const types = kernelValueMaps[precision][dynamic]; if (types[type] === false) { return null; } else if (types[type] === undefined) { throw new Error(`Could not find a KernelValue for ${ type }`); } return types[type]; } module.exports = { lookupKernelValueType, kernelValueMaps, };