Files

98 lines
2.8 KiB
TypeScript

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import { env } from 'onnxruntime-common';
import { Backend, SessionHandler } from '../backend';
import { Logger } from '../instrument';
import { Session } from '../session';
import { WebGLSessionHandler } from './webgl/session-handler';
import { WebGLContext } from './webgl/webgl-context';
import { createWebGLContext } from './webgl/webgl-context-factory';
/**
* WebGLBackend is the entry point for all WebGL opeartions
* When it starts it created the WebGLRenderingContext
* and other main framework components such as Program and Texture Managers
*/
export class WebGLBackend implements Backend {
glContext: WebGLContext;
get contextId(): 'webgl' | 'webgl2' | undefined {
return env.webgl.contextId;
}
set contextId(value: 'webgl' | 'webgl2' | undefined) {
env.webgl.contextId = value;
}
get matmulMaxBatchSize(): number | undefined {
return env.webgl.matmulMaxBatchSize;
}
set matmulMaxBatchSize(value: number | undefined) {
env.webgl.matmulMaxBatchSize = value;
}
get textureCacheMode(): 'initializerOnly' | 'full' | undefined {
return env.webgl.textureCacheMode;
}
set textureCacheMode(value: 'initializerOnly' | 'full' | undefined) {
env.webgl.textureCacheMode = value;
}
get pack(): boolean | undefined {
return env.webgl.pack;
}
set pack(value: boolean | undefined) {
env.webgl.pack = value;
}
get async(): boolean | undefined {
return env.webgl.async;
}
set async(value: boolean | undefined) {
env.webgl.async = value;
}
initialize(): boolean {
try {
this.glContext = createWebGLContext(this.contextId);
if (typeof this.matmulMaxBatchSize !== 'number') {
this.matmulMaxBatchSize = 16;
}
if (typeof this.textureCacheMode !== 'string') {
this.textureCacheMode = 'full';
}
if (typeof this.pack !== 'boolean') {
this.pack = false;
}
if (typeof this.async !== 'boolean') {
this.async = false;
}
Logger.setWithEnv(env);
if (!env.webgl.context) {
Object.defineProperty(env.webgl, 'context', { value: this.glContext.gl });
}
Logger.verbose(
'WebGLBackend',
`Created WebGLContext: ${typeof this.glContext} with matmulMaxBatchSize: ${
this.matmulMaxBatchSize
}; textureCacheMode: ${this.textureCacheMode}; pack: ${this.pack}; async: ${this.async}.`,
);
return true;
} catch (e) {
Logger.warning('WebGLBackend', `Unable to initialize WebGLBackend. ${e}`);
return false;
}
}
createSessionHandler(context: Session.Context): SessionHandler {
return new WebGLSessionHandler(this, context);
}
dispose(): void {
this.glContext.dispose();
}
}