UNPKG

@tensorflow/tfjs-core

Version:

Hardware-accelerated JavaScript library for machine intelligence

200 lines 7.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Type; (function (Type) { Type[Type["NUMBER"] = 0] = "NUMBER"; Type[Type["BOOLEAN"] = 1] = "BOOLEAN"; Type[Type["STRING"] = 2] = "STRING"; })(Type = exports.Type || (exports.Type = {})); exports.URL_PROPERTIES = [ { name: 'DEBUG', type: Type.BOOLEAN }, { name: 'IS_BROWSER', type: Type.BOOLEAN }, { name: 'WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION', type: Type.NUMBER }, { name: 'WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE', type: Type.BOOLEAN }, { name: 'WEBGL_VERSION', type: Type.NUMBER }, { name: 'WEBGL_RENDER_FLOAT32_ENABLED', type: Type.BOOLEAN }, { name: 'WEBGL_DOWNLOAD_FLOAT_ENABLED', type: Type.BOOLEAN }, { name: 'WEBGL_FENCE_API_ENABLED', type: Type.BOOLEAN }, { name: 'BACKEND', type: Type.STRING } ]; function isWebGLVersionEnabled(webGLVersion, isBrowser) { var gl; try { gl = getWebGLRenderingContext(webGLVersion, isBrowser); } catch (e) { return false; } if (gl != null) { loseContext(gl); return true; } return false; } exports.isWebGLVersionEnabled = isWebGLVersionEnabled; function getWebGLDisjointQueryTimerVersion(webGLVersion, isBrowser) { if (webGLVersion === 0) { return 0; } var queryTimerVersion; var gl = getWebGLRenderingContext(webGLVersion, isBrowser); if (hasExtension(gl, 'EXT_disjoint_timer_query_webgl2') && webGLVersion === 2) { queryTimerVersion = 2; } else if (hasExtension(gl, 'EXT_disjoint_timer_query')) { queryTimerVersion = 1; } else { queryTimerVersion = 0; } if (gl != null) { loseContext(gl); } return queryTimerVersion; } exports.getWebGLDisjointQueryTimerVersion = getWebGLDisjointQueryTimerVersion; function isRenderToFloatTextureEnabled(webGLVersion, isBrowser) { if (webGLVersion === 0) { return false; } var gl = getWebGLRenderingContext(webGLVersion, isBrowser); if (webGLVersion === 1) { if (!hasExtension(gl, 'OES_texture_float')) { return false; } } else { if (!hasExtension(gl, 'EXT_color_buffer_float')) { return false; } } createFloatTextureAndBindToFramebuffer(gl, webGLVersion); var isFrameBufferComplete = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE; loseContext(gl); return isFrameBufferComplete; } exports.isRenderToFloatTextureEnabled = isRenderToFloatTextureEnabled; function isDownloadFloatTextureEnabled(webGLVersion, isBrowser) { if (webGLVersion === 0) { return false; } var gl = getWebGLRenderingContext(webGLVersion, isBrowser); if (webGLVersion === 1) { if (!hasExtension(gl, 'OES_texture_float')) { return false; } } else { if (!hasExtension(gl, 'EXT_color_buffer_float')) { return false; } } createFloatTextureAndBindToFramebuffer(gl, webGLVersion); gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.FLOAT, new Float32Array(4)); var readPixelsNoError = gl.getError() === gl.NO_ERROR; loseContext(gl); return readPixelsNoError; } exports.isDownloadFloatTextureEnabled = isDownloadFloatTextureEnabled; function isWebGLFenceEnabled(webGLVersion, isBrowser) { if (webGLVersion !== 2) { return false; } var gl = getWebGLRenderingContext(webGLVersion, isBrowser); var isEnabled = gl.fenceSync != null; loseContext(gl); return isEnabled; } exports.isWebGLFenceEnabled = isWebGLFenceEnabled; function isChrome() { return typeof navigator !== 'undefined' && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); } exports.isChrome = isChrome; var TENSORFLOWJS_FLAGS_PREFIX = 'tfjsflags'; function getFeaturesFromURL() { var features = {}; if (typeof window === 'undefined' || typeof window.location === 'undefined') { return features; } var urlParams = getQueryParams(window.location.search); if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) { var urlFlags_1 = {}; var keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(','); keyValues.forEach(function (keyValue) { var _a = keyValue.split(':'), key = _a[0], value = _a[1]; urlFlags_1[key] = value; }); exports.URL_PROPERTIES.forEach(function (urlProperty) { if (urlProperty.name in urlFlags_1) { console.log("Setting feature override from URL " + urlProperty.name + ": " + ("" + urlFlags_1[urlProperty.name])); if (urlProperty.type === Type.NUMBER) { features[urlProperty.name] = +urlFlags_1[urlProperty.name]; } else if (urlProperty.type === Type.BOOLEAN) { features[urlProperty.name] = urlFlags_1[urlProperty.name] === 'true'; } else if (urlProperty.type === Type.STRING) { features[urlProperty.name] = urlFlags_1[urlProperty.name]; } else { console.warn("Unknown URL param: " + urlProperty.name + "."); } } }); } return features; } exports.getFeaturesFromURL = getFeaturesFromURL; function hasExtension(gl, extensionName) { var ext = gl.getExtension(extensionName); return ext != null; } function getWebGLRenderingContext(webGLVersion, isBrowser) { if (webGLVersion === 0 || !isBrowser) { throw new Error('Cannot get WebGL rendering context, WebGL is disabled.'); } var tempCanvas = document.createElement('canvas'); if (webGLVersion === 1) { return (tempCanvas.getContext('webgl') || tempCanvas.getContext('experimental-webgl')); } return tempCanvas.getContext('webgl2'); } function loseContext(gl) { if (gl != null) { var loseContextExtension = gl.getExtension('WEBGL_lose_context'); if (loseContextExtension == null) { throw new Error('Extension WEBGL_lose_context not supported on this browser.'); } loseContextExtension.loseContext(); } } function createFloatTextureAndBindToFramebuffer(gl, webGLVersion) { var frameBuffer = gl.createFramebuffer(); var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); var internalFormat = webGLVersion === 2 ? gl.RGBA32F : gl.RGBA; gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 1, 1, 0, gl.RGBA, gl.FLOAT, null); gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); } function getQueryParams(queryString) { var params = {}; queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, function (s) { var t = []; for (var _i = 1; _i < arguments.length; _i++) { t[_i - 1] = arguments[_i]; } decodeParam(params, t[0], t[1]); return t.join('='); }); return params; } exports.getQueryParams = getQueryParams; function decodeParam(params, name, value) { params[decodeURIComponent(name)] = decodeURIComponent(value || ''); } //# sourceMappingURL=environment_util.js.map