@tensorflow/tfjs-core
Version:
Hardware-accelerated JavaScript library for machine intelligence
99 lines (98 loc) • 5.23 kB
TypeScript
/**
* @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.
* =============================================================================
*/
/// <reference types="webgl2" />
import { PixelData, TypedArray } from '../../types';
import { WebGL1DisjointQueryTimerExtension, WebGL2DisjointQueryTimerExtension } from './webgl_types';
export interface FenceContext {
query: WebGLQuery | WebGLSync;
isFencePassed(): boolean;
}
export declare class GPGPUContext {
gl: WebGLRenderingContext;
textureFloatExtension: {};
textureHalfFloatExtension: {};
colorBufferFloatExtension: {};
colorBufferHalfFloatExtension: {};
disjointQueryTimerExtension: WebGL2DisjointQueryTimerExtension | WebGL1DisjointQueryTimerExtension;
vertexBuffer: WebGLBuffer;
indexBuffer: WebGLBuffer;
framebuffer: WebGLFramebuffer;
outputTexture: WebGLTexture | null;
program: WebGLProgram | null;
private disposed;
private disjoint;
private textureConfig;
constructor(gl?: WebGLRenderingContext);
private readonly debug;
dispose(): void;
createFloat32MatrixTexture(rows: number, columns: number): WebGLTexture;
createFloat16MatrixTexture(rows: number, columns: number): WebGLTexture;
createUnsignedBytesMatrixTexture(rows: number, columns: number): WebGLTexture;
uploadPixelDataToTexture(texture: WebGLTexture, pixels: PixelData | ImageData | HTMLImageElement | HTMLCanvasElement): void;
uploadDenseMatrixToTexture(texture: WebGLTexture, width: number, height: number, data: TypedArray): void;
createFloat16PackedMatrixTexture(rows: number, columns: number): WebGLTexture;
createPackedMatrixTexture(rows: number, columns: number): WebGLTexture;
deleteMatrixTexture(texture: WebGLTexture): void;
downloadByteEncodedFloatMatrixFromOutputTexture(texture: WebGLTexture, rows: number, columns: number): Float32Array;
downloadPackedMatrixFromBuffer(buffer: WebGLBuffer, batch: number, rows: number, columns: number, physicalRows: number, physicalCols: number): Float32Array;
downloadFloat32MatrixFromBuffer(buffer: WebGLBuffer, size: number): Float32Array;
createBufferFromTexture(texture: WebGLTexture, rows: number, columns: number): WebGLBuffer;
createAndWaitForFence(): Promise<void>;
private createFence;
downloadMatrixFromPackedTexture(texture: WebGLTexture, physicalRows: number, physicalCols: number): Float32Array;
private vertexAttrsAreBound;
createProgram(fragmentShaderSource: string): WebGLProgram;
deleteProgram(program: WebGLProgram): void;
setProgram(program: WebGLProgram | null): void;
getUniformLocation(program: WebGLProgram, uniformName: string, shouldThrow?: boolean): WebGLUniformLocation;
getAttributeLocation(program: WebGLProgram, attribute: string): number;
getUniformLocationNoThrow(program: WebGLProgram, uniformName: string): WebGLUniformLocation;
setInputMatrixTexture(inputMatrixTexture: WebGLTexture, uniformLocation: WebGLUniformLocation, textureUnit: number): void;
setOutputMatrixTexture(outputMatrixTexture: WebGLTexture, rows: number, columns: number): void;
setOutputPackedMatrixTexture(outputPackedMatrixTexture: WebGLTexture, rows: number, columns: number): void;
setOutputMatrixWriteRegion(startRow: number, numRows: number, startColumn: number, numColumns: number): void;
setOutputPackedMatrixWriteRegion(startRow: number, numRows: number, startColumn: number, numColumns: number): void;
debugValidate(): void;
executeProgram(): void;
blockUntilAllProgramsCompleted(): void;
private getQueryTimerExtension;
private getQueryTimerExtensionWebGL2;
private getQueryTimerExtensionWebGL1;
beginQuery(): WebGLQuery;
endQuery(): void;
waitForQueryAndGetTime(query: WebGLQuery): Promise<number>;
private getQueryTime;
private isQueryAvailable;
pollFence(fenceContext: FenceContext): Promise<void>;
private itemsToPoll;
pollItems(): void;
private addItemToPoll;
private bindTextureToFrameBuffer;
private unbindTextureToFrameBuffer;
private downloadMatrixDriver;
private setOutputMatrixTextureDriver;
private setOutputMatrixWriteRegionDriver;
private throwIfDisposed;
private throwIfNoProgram;
}
/**
* Finds the index of the last true element using linear search.
* Note: We can't do binary search because Chrome expects us to explicitly
* test all fences before download:
* https://github.com/tensorflow/tfjs/issues/1145
*/
export declare function linearSearchLastTrue(arr: Array<() => boolean>): number;