mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
fix: #470
the math didn't end up being wrong, but found an issue with argument type, and went ahead and fixed it
This commit is contained in:
parent
1c96c40bd2
commit
49a06ba305
@ -5,7 +5,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:22 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:45 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -4581,7 +4581,6 @@ class HeadlessGLKernel extends WebGLKernel {
|
||||
module.exports = {
|
||||
HeadlessGLKernel
|
||||
};
|
||||
|
||||
},{"../gl/kernel-string":10,"../web-gl/kernel":55,"gl":2}],32:[function(require,module,exports){
|
||||
const { utils } = require('../utils');
|
||||
|
||||
@ -4785,10 +4784,12 @@ class Kernel {
|
||||
setupArguments(args) {
|
||||
if (!this.argumentTypes) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
if (!this.argumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6405,7 +6406,6 @@ const operatorMap = {
|
||||
module.exports = {
|
||||
WebGLFunctionNode
|
||||
};
|
||||
|
||||
},{"../function-node":9}],36:[function(require,module,exports){
|
||||
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
|
||||
const { WebGLKernelValueFloat } = require('./kernel-value/float');
|
||||
@ -7548,7 +7548,10 @@ class WebGLKernel extends GLKernel {
|
||||
setupArguments(args) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTextureCount = 0;
|
||||
this.argumentTypes = [];
|
||||
const needsArgumentTypes = this.argumentTypes === null;
|
||||
if (needsArgumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
}
|
||||
this.argumentSizes = [];
|
||||
this.argumentBitRatios = [];
|
||||
if (!this.precision) {
|
||||
@ -7565,8 +7568,13 @@ class WebGLKernel extends GLKernel {
|
||||
for (let index = 0; index < args.length; index++) {
|
||||
const value = args[index];
|
||||
const name = this.argumentNames[index];
|
||||
const type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
let type;
|
||||
if (needsArgumentTypes) {
|
||||
type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
} else {
|
||||
type = this.argumentTypes[index];
|
||||
}
|
||||
const KernelValue = this.constructor.lookupKernelValueType(type, this.dynamicArguments ? 'dynamic' : 'static', this.precision);
|
||||
if (KernelValue === null) {
|
||||
throw new Error('unsupported argument');
|
||||
@ -9990,6 +9998,10 @@ class GPU {
|
||||
|
||||
source = typeof source === 'function' ? source.toString() : source;
|
||||
const switchableKernels = {};
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings) || {};
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const mergedSettings = Object.assign({
|
||||
context: this.context,
|
||||
canvas: this.canvas,
|
||||
@ -10046,7 +10058,7 @@ class GPU {
|
||||
return newKernel.renderOutput();
|
||||
}
|
||||
}
|
||||
}, upgradeDeprecatedCreateKernelSettings(settings) || {});
|
||||
}, settingsCopy);
|
||||
|
||||
const kernel = kernelRunShortcut(new this.Kernel(source, mergedSettings));
|
||||
|
||||
@ -10079,7 +10091,12 @@ class GPU {
|
||||
}
|
||||
}
|
||||
|
||||
const kernel = this.createKernel(fn, upgradeDeprecatedCreateKernelSettings(settings));
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings);
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const kernel = this.createKernel(fn, settingsCopy);
|
||||
|
||||
if (Array.isArray(arguments[0])) {
|
||||
const functions = arguments[0];
|
||||
for (let i = 0; i < functions.length; i++) {
|
||||
@ -10194,6 +10211,7 @@ module.exports = {
|
||||
kernelOrder,
|
||||
kernelTypes
|
||||
};
|
||||
|
||||
},{"./backend/cpu/kernel":7,"./backend/headless-gl/kernel":31,"./backend/web-gl/kernel":55,"./backend/web-gl2/kernel":79,"./kernel-run-shortcut":85,"./utils":88,"gpu-mock.js":3}],83:[function(require,module,exports){
|
||||
const { GPU } = require('./gpu');
|
||||
const { alias } = require('./alias');
|
||||
|
||||
44
bin/gpu-browser-core.min.js
vendored
44
bin/gpu-browser-core.min.js
vendored
@ -5,7 +5,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:24 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:47 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -18,7 +18,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:22 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:45 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -4594,7 +4594,6 @@ class HeadlessGLKernel extends WebGLKernel {
|
||||
module.exports = {
|
||||
HeadlessGLKernel
|
||||
};
|
||||
|
||||
},{"../gl/kernel-string":10,"../web-gl/kernel":55,"gl":2}],32:[function(require,module,exports){
|
||||
const { utils } = require('../utils');
|
||||
|
||||
@ -4798,10 +4797,12 @@ class Kernel {
|
||||
setupArguments(args) {
|
||||
if (!this.argumentTypes) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
if (!this.argumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6418,7 +6419,6 @@ const operatorMap = {
|
||||
module.exports = {
|
||||
WebGLFunctionNode
|
||||
};
|
||||
|
||||
},{"../function-node":9}],36:[function(require,module,exports){
|
||||
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
|
||||
const { WebGLKernelValueFloat } = require('./kernel-value/float');
|
||||
@ -7561,7 +7561,10 @@ class WebGLKernel extends GLKernel {
|
||||
setupArguments(args) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTextureCount = 0;
|
||||
this.argumentTypes = [];
|
||||
const needsArgumentTypes = this.argumentTypes === null;
|
||||
if (needsArgumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
}
|
||||
this.argumentSizes = [];
|
||||
this.argumentBitRatios = [];
|
||||
if (!this.precision) {
|
||||
@ -7578,8 +7581,13 @@ class WebGLKernel extends GLKernel {
|
||||
for (let index = 0; index < args.length; index++) {
|
||||
const value = args[index];
|
||||
const name = this.argumentNames[index];
|
||||
const type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
let type;
|
||||
if (needsArgumentTypes) {
|
||||
type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
} else {
|
||||
type = this.argumentTypes[index];
|
||||
}
|
||||
const KernelValue = this.constructor.lookupKernelValueType(type, this.dynamicArguments ? 'dynamic' : 'static', this.precision);
|
||||
if (KernelValue === null) {
|
||||
throw new Error('unsupported argument');
|
||||
@ -10003,6 +10011,10 @@ class GPU {
|
||||
|
||||
source = typeof source === 'function' ? source.toString() : source;
|
||||
const switchableKernels = {};
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings) || {};
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const mergedSettings = Object.assign({
|
||||
context: this.context,
|
||||
canvas: this.canvas,
|
||||
@ -10059,7 +10071,7 @@ class GPU {
|
||||
return newKernel.renderOutput();
|
||||
}
|
||||
}
|
||||
}, upgradeDeprecatedCreateKernelSettings(settings) || {});
|
||||
}, settingsCopy);
|
||||
|
||||
const kernel = kernelRunShortcut(new this.Kernel(source, mergedSettings));
|
||||
|
||||
@ -10092,7 +10104,12 @@ class GPU {
|
||||
}
|
||||
}
|
||||
|
||||
const kernel = this.createKernel(fn, upgradeDeprecatedCreateKernelSettings(settings));
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings);
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const kernel = this.createKernel(fn, settingsCopy);
|
||||
|
||||
if (Array.isArray(arguments[0])) {
|
||||
const functions = arguments[0];
|
||||
for (let i = 0; i < functions.length; i++) {
|
||||
@ -10207,6 +10224,7 @@ module.exports = {
|
||||
kernelOrder,
|
||||
kernelTypes
|
||||
};
|
||||
|
||||
},{"./backend/cpu/kernel":7,"./backend/headless-gl/kernel":31,"./backend/web-gl/kernel":55,"./backend/web-gl2/kernel":79,"./kernel-run-shortcut":85,"./utils":88,"gpu-mock.js":3}],83:[function(require,module,exports){
|
||||
const { GPU } = require('./gpu');
|
||||
const { alias } = require('./alias');
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:22 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:45 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -9345,7 +9345,6 @@ class HeadlessGLKernel extends WebGLKernel {
|
||||
module.exports = {
|
||||
HeadlessGLKernel
|
||||
};
|
||||
|
||||
},{"../gl/kernel-string":11,"../web-gl/kernel":56,"gl":3}],33:[function(require,module,exports){
|
||||
const { utils } = require('../utils');
|
||||
|
||||
@ -9549,10 +9548,12 @@ class Kernel {
|
||||
setupArguments(args) {
|
||||
if (!this.argumentTypes) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
if (!this.argumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -11169,7 +11170,6 @@ const operatorMap = {
|
||||
module.exports = {
|
||||
WebGLFunctionNode
|
||||
};
|
||||
|
||||
},{"../function-node":10}],37:[function(require,module,exports){
|
||||
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
|
||||
const { WebGLKernelValueFloat } = require('./kernel-value/float');
|
||||
@ -12312,7 +12312,10 @@ class WebGLKernel extends GLKernel {
|
||||
setupArguments(args) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTextureCount = 0;
|
||||
this.argumentTypes = [];
|
||||
const needsArgumentTypes = this.argumentTypes === null;
|
||||
if (needsArgumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
}
|
||||
this.argumentSizes = [];
|
||||
this.argumentBitRatios = [];
|
||||
if (!this.precision) {
|
||||
@ -12329,8 +12332,13 @@ class WebGLKernel extends GLKernel {
|
||||
for (let index = 0; index < args.length; index++) {
|
||||
const value = args[index];
|
||||
const name = this.argumentNames[index];
|
||||
const type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
let type;
|
||||
if (needsArgumentTypes) {
|
||||
type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
} else {
|
||||
type = this.argumentTypes[index];
|
||||
}
|
||||
const KernelValue = this.constructor.lookupKernelValueType(type, this.dynamicArguments ? 'dynamic' : 'static', this.precision);
|
||||
if (KernelValue === null) {
|
||||
throw new Error('unsupported argument');
|
||||
@ -14754,6 +14762,10 @@ class GPU {
|
||||
|
||||
source = typeof source === 'function' ? source.toString() : source;
|
||||
const switchableKernels = {};
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings) || {};
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const mergedSettings = Object.assign({
|
||||
context: this.context,
|
||||
canvas: this.canvas,
|
||||
@ -14810,7 +14822,7 @@ class GPU {
|
||||
return newKernel.renderOutput();
|
||||
}
|
||||
}
|
||||
}, upgradeDeprecatedCreateKernelSettings(settings) || {});
|
||||
}, settingsCopy);
|
||||
|
||||
const kernel = kernelRunShortcut(new this.Kernel(source, mergedSettings));
|
||||
|
||||
@ -14843,7 +14855,12 @@ class GPU {
|
||||
}
|
||||
}
|
||||
|
||||
const kernel = this.createKernel(fn, upgradeDeprecatedCreateKernelSettings(settings));
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings);
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const kernel = this.createKernel(fn, settingsCopy);
|
||||
|
||||
if (Array.isArray(arguments[0])) {
|
||||
const functions = arguments[0];
|
||||
for (let i = 0; i < functions.length; i++) {
|
||||
@ -14958,6 +14975,7 @@ module.exports = {
|
||||
kernelOrder,
|
||||
kernelTypes
|
||||
};
|
||||
|
||||
},{"./backend/cpu/kernel":8,"./backend/headless-gl/kernel":32,"./backend/web-gl/kernel":56,"./backend/web-gl2/kernel":80,"./kernel-run-shortcut":86,"./utils":89,"gpu-mock.js":4}],84:[function(require,module,exports){
|
||||
const { GPU } = require('./gpu');
|
||||
const { alias } = require('./alias');
|
||||
|
||||
44
bin/gpu-browser.min.js
vendored
44
bin/gpu-browser.min.js
vendored
@ -5,7 +5,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:24 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:47 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -18,7 +18,7 @@
|
||||
* GPU Accelerated JavaScript
|
||||
*
|
||||
* @version 2.0.0-rc.14
|
||||
* @date Thu May 23 2019 20:48:22 GMT-0400 (Eastern Daylight Time)
|
||||
* @date Thu May 23 2019 21:45:45 GMT-0400 (Eastern Daylight Time)
|
||||
*
|
||||
* @license MIT
|
||||
* The MIT License
|
||||
@ -9358,7 +9358,6 @@ class HeadlessGLKernel extends WebGLKernel {
|
||||
module.exports = {
|
||||
HeadlessGLKernel
|
||||
};
|
||||
|
||||
},{"../gl/kernel-string":11,"../web-gl/kernel":56,"gl":3}],33:[function(require,module,exports){
|
||||
const { utils } = require('../utils');
|
||||
|
||||
@ -9562,10 +9561,12 @@ class Kernel {
|
||||
setupArguments(args) {
|
||||
if (!this.argumentTypes) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
if (!this.argumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -11182,7 +11183,6 @@ const operatorMap = {
|
||||
module.exports = {
|
||||
WebGLFunctionNode
|
||||
};
|
||||
|
||||
},{"../function-node":10}],37:[function(require,module,exports){
|
||||
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
|
||||
const { WebGLKernelValueFloat } = require('./kernel-value/float');
|
||||
@ -12325,7 +12325,10 @@ class WebGLKernel extends GLKernel {
|
||||
setupArguments(args) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTextureCount = 0;
|
||||
this.argumentTypes = [];
|
||||
const needsArgumentTypes = this.argumentTypes === null;
|
||||
if (needsArgumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
}
|
||||
this.argumentSizes = [];
|
||||
this.argumentBitRatios = [];
|
||||
if (!this.precision) {
|
||||
@ -12342,8 +12345,13 @@ class WebGLKernel extends GLKernel {
|
||||
for (let index = 0; index < args.length; index++) {
|
||||
const value = args[index];
|
||||
const name = this.argumentNames[index];
|
||||
const type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
let type;
|
||||
if (needsArgumentTypes) {
|
||||
type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
} else {
|
||||
type = this.argumentTypes[index];
|
||||
}
|
||||
const KernelValue = this.constructor.lookupKernelValueType(type, this.dynamicArguments ? 'dynamic' : 'static', this.precision);
|
||||
if (KernelValue === null) {
|
||||
throw new Error('unsupported argument');
|
||||
@ -14767,6 +14775,10 @@ class GPU {
|
||||
|
||||
source = typeof source === 'function' ? source.toString() : source;
|
||||
const switchableKernels = {};
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings) || {};
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const mergedSettings = Object.assign({
|
||||
context: this.context,
|
||||
canvas: this.canvas,
|
||||
@ -14823,7 +14835,7 @@ class GPU {
|
||||
return newKernel.renderOutput();
|
||||
}
|
||||
}
|
||||
}, upgradeDeprecatedCreateKernelSettings(settings) || {});
|
||||
}, settingsCopy);
|
||||
|
||||
const kernel = kernelRunShortcut(new this.Kernel(source, mergedSettings));
|
||||
|
||||
@ -14856,7 +14868,12 @@ class GPU {
|
||||
}
|
||||
}
|
||||
|
||||
const kernel = this.createKernel(fn, upgradeDeprecatedCreateKernelSettings(settings));
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings);
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const kernel = this.createKernel(fn, settingsCopy);
|
||||
|
||||
if (Array.isArray(arguments[0])) {
|
||||
const functions = arguments[0];
|
||||
for (let i = 0; i < functions.length; i++) {
|
||||
@ -14971,6 +14988,7 @@ module.exports = {
|
||||
kernelOrder,
|
||||
kernelTypes
|
||||
};
|
||||
|
||||
},{"./backend/cpu/kernel":8,"./backend/headless-gl/kernel":32,"./backend/web-gl/kernel":56,"./backend/web-gl2/kernel":80,"./kernel-run-shortcut":86,"./utils":89,"gpu-mock.js":4}],84:[function(require,module,exports){
|
||||
const { GPU } = require('./gpu');
|
||||
const { alias } = require('./alias');
|
||||
|
||||
@ -258,10 +258,12 @@ class Kernel {
|
||||
setupArguments(args) {
|
||||
if (!this.argumentTypes) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
if (!this.argumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const argType = utils.getVariableType(args[i], this.strictIntegers);
|
||||
this.argumentTypes.push(argType === 'Integer' ? 'Number' : argType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -359,8 +359,11 @@ class WebGLKernel extends GLKernel {
|
||||
setupArguments(args) {
|
||||
this.kernelArguments = [];
|
||||
this.argumentTextureCount = 0;
|
||||
const needsArgumentTypes = this.argumentTypes === null;
|
||||
// TODO: remove
|
||||
this.argumentTypes = [];
|
||||
if (needsArgumentTypes) {
|
||||
this.argumentTypes = [];
|
||||
}
|
||||
this.argumentSizes = [];
|
||||
this.argumentBitRatios = [];
|
||||
// TODO: end remove
|
||||
@ -379,8 +382,13 @@ class WebGLKernel extends GLKernel {
|
||||
for (let index = 0; index < args.length; index++) {
|
||||
const value = args[index];
|
||||
const name = this.argumentNames[index];
|
||||
const type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
let type;
|
||||
if (needsArgumentTypes) {
|
||||
type = utils.getVariableType(value, this.strictIntegers);
|
||||
this.argumentTypes.push(type);
|
||||
} else {
|
||||
type = this.argumentTypes[index];
|
||||
}
|
||||
const KernelValue = this.constructor.lookupKernelValueType(type, this.dynamicArguments ? 'dynamic' : 'static', this.precision);
|
||||
if (KernelValue === null) {
|
||||
throw new Error('unsupported argument');
|
||||
|
||||
15
src/gpu.js
15
src/gpu.js
@ -210,6 +210,11 @@ class GPU {
|
||||
|
||||
source = typeof source === 'function' ? source.toString() : source;
|
||||
const switchableKernels = {};
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings) || {};
|
||||
// handle conversion of argumentTypes
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const mergedSettings = Object.assign({
|
||||
context: this.context,
|
||||
canvas: this.canvas,
|
||||
@ -266,7 +271,7 @@ class GPU {
|
||||
return newKernel.renderOutput();
|
||||
}
|
||||
}
|
||||
}, upgradeDeprecatedCreateKernelSettings(settings) || {});
|
||||
}, settingsCopy);
|
||||
|
||||
const kernel = kernelRunShortcut(new this.Kernel(source, mergedSettings));
|
||||
|
||||
@ -331,7 +336,13 @@ class GPU {
|
||||
}
|
||||
}
|
||||
|
||||
const kernel = this.createKernel(fn, upgradeDeprecatedCreateKernelSettings(settings));
|
||||
const settingsCopy = upgradeDeprecatedCreateKernelSettings(settings);
|
||||
// handle conversion of argumentTypes
|
||||
if (settings && typeof settings.argumentTypes === 'object') {
|
||||
settingsCopy.argumentTypes = Object.keys(settings.argumentTypes).map(argumentName => settings.argumentTypes[argumentName]);
|
||||
}
|
||||
const kernel = this.createKernel(fn, settingsCopy);
|
||||
|
||||
if (Array.isArray(arguments[0])) {
|
||||
const functions = arguments[0];
|
||||
for (let i = 0; i < functions.length; i++) {
|
||||
|
||||
@ -163,6 +163,7 @@
|
||||
<script type="module" src="issues/401-cpu-canvas-check.js"></script>
|
||||
<script type="module" src="issues/410-if-statement.js"></script>
|
||||
<script type="module" src="issues/422-warnings.js"></script>
|
||||
<script type="module" src="issues/470-modulus-wrong.js"></script>
|
||||
<script type="module" src="issues/471-canvas-issue.js"></script>
|
||||
<script type="module" src="issues/472-compilation-issue.js"></script>
|
||||
<script type="module" src="issues/473-4-pixels.js"></script>
|
||||
|
||||
53
test/issues/470-modulus-wrong.js
Normal file
53
test/issues/470-modulus-wrong.js
Normal file
@ -0,0 +1,53 @@
|
||||
const { assert, skip, test, module: describe } = require('qunit');
|
||||
const { GPU } = require('../../src');
|
||||
|
||||
describe('issue #470 - modulus wrong');
|
||||
|
||||
function testModulusWrong(mode) {
|
||||
const gpu = new GPU({ mode });
|
||||
const kernel = gpu.createKernel(function(mod) {
|
||||
return this.thread.x % mod;
|
||||
}, {
|
||||
output: [10],
|
||||
argumentTypes: {
|
||||
mod: 'Integer',
|
||||
},
|
||||
});
|
||||
|
||||
const result = kernel(6);
|
||||
assert.equal(kernel.argumentTypes[0], 'Integer');
|
||||
assert.equal(result[0], 0 % 6);
|
||||
assert.equal(result[1], 1 % 6);
|
||||
assert.equal(result[2], 2 % 6);
|
||||
assert.equal(result[3], 3 % 6);
|
||||
assert.equal(result[4], 4 % 6);
|
||||
assert.equal(result[5], 5 % 6);
|
||||
assert.equal(result[6], 6 % 6);
|
||||
assert.equal(result[7], 7 % 6);
|
||||
assert.equal(result[8], 8 % 6);
|
||||
assert.equal(result[9], 9 % 6);
|
||||
}
|
||||
|
||||
test('auto', () => {
|
||||
testModulusWrong();
|
||||
});
|
||||
|
||||
test('gpu', () => {
|
||||
testModulusWrong('gpu');
|
||||
});
|
||||
|
||||
(GPU.isWebGLSupported ? test : skip)('webgl', () => {
|
||||
testModulusWrong('webgl');
|
||||
});
|
||||
|
||||
(GPU.isWebGL2Supported ? test : skip)('webgl2', () => {
|
||||
testModulusWrong('webgl2');
|
||||
});
|
||||
|
||||
(GPU.isHeadlessGLSupported ? test : skip)('headlessgl', () => {
|
||||
testModulusWrong('headlessgl');
|
||||
});
|
||||
|
||||
test('cpu', () => {
|
||||
testModulusWrong('cpu');
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user