"use strict";
|
/**
|
* @license
|
* Copyright 2017 Google Inc. All Rights Reserved.
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
* =============================================================================
|
*/
|
Object.defineProperty(exports, "__esModule", { value: true });
|
var environment_1 = require("../../environment");
|
var util = require("../../util");
|
var PackingScheme;
|
(function (PackingScheme) {
|
/**
|
* All values in a single texel are densely packed without any constraints.
|
*
|
* This is how the shader encodes a tensor with shape = [2, 3, 4]
|
* (indices are [batch, row, col]).
|
*
|
* 000|001 010|011 020|021
|
* ------- ------- -------
|
* 002|003 012|013 022|023
|
*
|
* 100|101 110|111 120|121
|
* ------- ------- -------
|
* 102|103 112|113 122|123
|
*
|
*/
|
PackingScheme[PackingScheme["DENSE"] = 0] = "DENSE";
|
/**
|
* Single texels contain only values from the same batch, and from adjacent
|
* rows and columns.
|
*
|
* This is how the shader encodes a tensor with shape = [2, 3, 5]
|
* (indices are [batch, row, col]).
|
*
|
* 000|001 002|003 004|xxx 020|021 022|023 024|xxx
|
* ------- ------- ------- ------- ------- -------
|
* 010|011 012|013 014|xxx xxx|xxx xxx|xxx xxx|xxx
|
*
|
* 100|101 102|103 104|xxx 120|121 122|123 124|xxx
|
* ------- ------- ------- ------- ------- -------
|
* 110|111 112|113 114|xxx xxx|xxx xxx|xxx xxx|xxx
|
*
|
*/
|
PackingScheme[PackingScheme["SHARED_BATCH"] = 1] = "SHARED_BATCH";
|
})(PackingScheme = exports.PackingScheme || (exports.PackingScheme = {}));
|
var TextureUsage;
|
(function (TextureUsage) {
|
TextureUsage[TextureUsage["RENDER"] = 0] = "RENDER";
|
TextureUsage[TextureUsage["UPLOAD"] = 1] = "UPLOAD";
|
TextureUsage[TextureUsage["PIXELS"] = 2] = "PIXELS";
|
TextureUsage[TextureUsage["DOWNLOAD"] = 3] = "DOWNLOAD";
|
})(TextureUsage = exports.TextureUsage || (exports.TextureUsage = {}));
|
var PhysicalTextureType;
|
(function (PhysicalTextureType) {
|
PhysicalTextureType[PhysicalTextureType["UNPACKED_FLOAT16"] = 0] = "UNPACKED_FLOAT16";
|
PhysicalTextureType[PhysicalTextureType["UNPACKED_FLOAT32"] = 1] = "UNPACKED_FLOAT32";
|
PhysicalTextureType[PhysicalTextureType["PACKED_4X1_UNSIGNED_BYTE"] = 2] = "PACKED_4X1_UNSIGNED_BYTE";
|
PhysicalTextureType[PhysicalTextureType["PACKED_2X2_FLOAT32"] = 3] = "PACKED_2X2_FLOAT32";
|
PhysicalTextureType[PhysicalTextureType["PACKED_2X2_FLOAT16"] = 4] = "PACKED_2X2_FLOAT16";
|
})(PhysicalTextureType = exports.PhysicalTextureType || (exports.PhysicalTextureType = {}));
|
function getUnpackedMatrixTextureShapeWidthHeight(rows, columns) {
|
return [columns, rows];
|
}
|
exports.getUnpackedMatrixTextureShapeWidthHeight = getUnpackedMatrixTextureShapeWidthHeight;
|
function getUnpackedArraySizeFromMatrixSize(matrixSize, channelsPerTexture) {
|
return matrixSize * channelsPerTexture;
|
}
|
exports.getUnpackedArraySizeFromMatrixSize = getUnpackedArraySizeFromMatrixSize;
|
function getColorMatrixTextureShapeWidthHeight(rows, columns) {
|
return [columns * 4, rows];
|
}
|
exports.getColorMatrixTextureShapeWidthHeight = getColorMatrixTextureShapeWidthHeight;
|
/**
|
* Get shape for densely packed RGBA texture.
|
*/
|
function getDenseTexShape(shape) {
|
var size = util.sizeFromShape(shape);
|
var texelsNeeded = Math.ceil(size / 4);
|
return util.sizeToSquarishShape(texelsNeeded);
|
}
|
exports.getDenseTexShape = getDenseTexShape;
|
function getMatrixSizeFromUnpackedArraySize(unpackedSize, channelsPerTexture) {
|
if (unpackedSize % channelsPerTexture !== 0) {
|
throw new Error("unpackedSize (" + unpackedSize + ") must be a multiple of " +
|
("" + channelsPerTexture));
|
}
|
return unpackedSize / channelsPerTexture;
|
}
|
exports.getMatrixSizeFromUnpackedArraySize = getMatrixSizeFromUnpackedArraySize;
|
function decodeMatrixFromUnpackedColorRGBAArray(unpackedArray, matrix, channels) {
|
var requiredSize = unpackedArray.length * channels / 4;
|
if (matrix.length < requiredSize) {
|
throw new Error("matrix length (" + matrix.length + ") must be >= " + requiredSize);
|
}
|
var dst = 0;
|
for (var src = 0; src < unpackedArray.length; src += 4) {
|
for (var c = 0; c < channels; c++) {
|
matrix[dst++] = unpackedArray[src + c];
|
}
|
}
|
}
|
exports.decodeMatrixFromUnpackedColorRGBAArray = decodeMatrixFromUnpackedColorRGBAArray;
|
function getPackedMatrixTextureShapeWidthHeight(rows, columns) {
|
return [
|
Math.max(1, Math.ceil(columns / 2)), Math.max(1, Math.ceil(rows / 2))
|
];
|
}
|
exports.getPackedMatrixTextureShapeWidthHeight = getPackedMatrixTextureShapeWidthHeight;
|
function getPackedRGBAArraySizeFromMatrixShape(rows, columns) {
|
var _a = getPackedMatrixTextureShapeWidthHeight(rows, columns), w = _a[0], h = _a[1];
|
return w * h * 4;
|
}
|
exports.getPackedRGBAArraySizeFromMatrixShape = getPackedRGBAArraySizeFromMatrixShape;
|
function getTextureConfig(
|
// tslint:disable-next-line:no-any
|
gl, textureHalfFloatExtension) {
|
// tslint:disable-next-line:no-any
|
var glany = gl;
|
var internalFormatFloat;
|
var internalFormatHalfFloat;
|
var internalFormatPackedHalfFloat;
|
var internalFormatPackedFloat;
|
var textureFormatFloat;
|
var downloadTextureFormat;
|
var downloadUnpackNumChannels;
|
var defaultNumChannels;
|
var textureTypeHalfFloat;
|
var textureTypeFloat;
|
if (environment_1.env().getNumber('WEBGL_VERSION') === 2) {
|
internalFormatFloat = glany.R32F;
|
internalFormatHalfFloat = glany.R16F;
|
internalFormatPackedHalfFloat = glany.RGBA16F;
|
internalFormatPackedFloat = glany.RGBA32F;
|
textureFormatFloat = glany.RED;
|
downloadUnpackNumChannels = 4;
|
defaultNumChannels = 1;
|
textureTypeHalfFloat = glany.HALF_FLOAT;
|
textureTypeFloat = glany.FLOAT;
|
}
|
else {
|
internalFormatFloat = gl.RGBA;
|
internalFormatHalfFloat = gl.RGBA;
|
internalFormatPackedHalfFloat = gl.RGBA;
|
internalFormatPackedFloat = glany.RGBA;
|
textureFormatFloat = gl.RGBA;
|
downloadUnpackNumChannels = 4;
|
defaultNumChannels = 4;
|
textureTypeHalfFloat = textureHalfFloatExtension != null ?
|
textureHalfFloatExtension.HALF_FLOAT_OES :
|
null;
|
textureTypeFloat = gl.FLOAT;
|
}
|
downloadTextureFormat = gl.RGBA;
|
return {
|
internalFormatFloat: internalFormatFloat,
|
internalFormatHalfFloat: internalFormatHalfFloat,
|
internalFormatPackedHalfFloat: internalFormatPackedHalfFloat,
|
internalFormatPackedFloat: internalFormatPackedFloat,
|
textureFormatFloat: textureFormatFloat,
|
downloadTextureFormat: downloadTextureFormat,
|
downloadUnpackNumChannels: downloadUnpackNumChannels,
|
defaultNumChannels: defaultNumChannels,
|
textureTypeHalfFloat: textureTypeHalfFloat,
|
textureTypeFloat: textureTypeFloat
|
};
|
}
|
exports.getTextureConfig = getTextureConfig;
|
//# sourceMappingURL=tex_util.js.map
|