// var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; // var ARGUMENT_NAMES = /([^\s,]+)/g; // function getParamNames(func) { // var fnStr = func.toString().replace(STRIP_COMMENTS, ''); // var result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES); // if(result === null) // result = []; // return result; // } var GPU_jsFallback = (function() { function clone(obj) { if(obj === null || typeof(obj) !== 'object' || 'isActiveClone' in obj) return obj; var temp = obj.constructor(); // changed for(var key in obj) { if(Object.prototype.hasOwnProperty.call(obj, key)) { obj['isActiveClone'] = null; temp[key] = clone(obj[key]); delete obj['isActiveClone']; } } return temp; } /// JS fallback transformation, basically pure JS /// /// @param inputFunction The calling to perform the conversion /// @param _threadDim The thread dim array configuration /// @param _blockDim The block dim array configuration /// @param paramObj The parameter object /// /// @returns callable function if converted, else returns null function jsFallback(kernel, _threadDim, _blockDim, paramObj) { var threadDim = clone(_threadDim); var blockDim = clone(_blockDim); while (threadDim.length < 3) { threadDim.push(1); } while (blockDim.length < 3) { blockDim.push(1); } var globalDim = [ threadDim[0] * blockDim[0], threadDim[1] * blockDim[1], threadDim[2] * blockDim[2] ]; return function() { var ret = new Array(globalDim[2]); for (var i=0; i