Skip to content

Commit 9540340

Browse files
fix: Fix floatTextures support test
fix: Rename `WebGLKernel._formatArrayTransfer()` to `WebGLKernel.formatArrayTransfer()` because it is used in more than just this class fix: Add `HeadlessGL.features.isTextureFloat` fix: Add `HeadlessGL.getIsTextureFloat()` fix: Add operation to delete `HeadlessGLKernel.extensions.WEBGL_draw_buffers` fix: Remove `assert.throws` from Issue #91 test fix: Add "features/float-output-textures.js" back to all.html test fix: Bump version number and build
1 parent d9bee09 commit 9540340

File tree

13 files changed

+202
-117
lines changed

13 files changed

+202
-117
lines changed

bin/gpu-browser-core.js

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.0.0-rc.4
8-
* @date Sun Mar 17 2019 22:11:56 GMT-0400 (Eastern Daylight Time)
7+
* @version 2.0.0-rc.5
8+
* @date Tue Mar 19 2019 08:40:39 GMT-0400 (Eastern Daylight Time)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -2698,6 +2698,7 @@ class HeadlessGLKernel extends WebGLKernel {
26982698
OES_texture_float: testContext.getExtension('OES_texture_float'),
26992699
OES_texture_float_linear: testContext.getExtension('OES_texture_float_linear'),
27002700
OES_element_index_uint: testContext.getExtension('OES_element_index_uint'),
2701+
WEBGL_draw_buffers: testContext.getExtension('WEBGL_draw_buffers'),
27012702
};
27022703
features = this.getFeatures();
27032704
}
@@ -2715,12 +2716,16 @@ class HeadlessGLKernel extends WebGLKernel {
27152716
return Object.freeze({
27162717
isFloatRead: this.getIsFloatRead(),
27172718
isIntegerDivisionAccurate: this.getIsIntegerDivisionAccurate(),
2718-
getIsTextureFloat: true,
2719+
isTextureFloat: this.getIsTextureFloat(),
27192720
isDrawBuffers,
27202721
kernelMap: isDrawBuffers
27212722
});
27222723
}
27232724

2725+
static getIsTextureFloat() {
2726+
return Boolean(testExtensions.OES_texture_float);
2727+
}
2728+
27242729
static getIsDrawBuffers() {
27252730
return Boolean(testExtensions.WEBGL_draw_buffers);
27262731
}
@@ -2755,6 +2760,7 @@ class HeadlessGLKernel extends WebGLKernel {
27552760
OES_texture_float: this.context.getExtension('OES_texture_float'),
27562761
OES_texture_float_linear: this.context.getExtension('OES_texture_float_linear'),
27572762
OES_element_index_uint: this.context.getExtension('OES_element_index_uint'),
2763+
WEBGL_draw_buffers: this.context.getExtension('WEBGL_draw_buffers'),
27582764
};
27592765
}
27602766

@@ -2764,6 +2770,7 @@ class HeadlessGLKernel extends WebGLKernel {
27642770
this.extensions.OES_texture_float = null;
27652771
this.extensions.OES_texture_float_linear = null;
27662772
this.extensions.OES_element_index_uint = null;
2773+
this.extensions.WEBGL_draw_buffers = null;
27672774
}
27682775

27692776
static destroyContext(context) {
@@ -4309,7 +4316,7 @@ function webGLKernelString(gpuKernel, name) {
43094316
${ removeFnNoise(gpuKernel.build.toString()) }
43104317
${ removeFnNoise(gpuKernel.run.toString()) }
43114318
${ removeFnNoise(gpuKernel._addArgument.toString()) }
4312-
${ removeFnNoise(gpuKernel._formatArrayTransfer.toString()) }
4319+
${ removeFnNoise(gpuKernel.formatArrayTransfer.toString()) }
43134320
${ removeFnNoise(gpuKernel.checkOutput.toString()) }
43144321
${ removeFnNoise(gpuKernel.getArgumentTexture.toString()) }
43154322
${ removeFnNoise(gpuKernel.getTextureCache.toString()) }
@@ -5079,7 +5086,7 @@ class WebGLKernel extends GLKernel {
50795086
const {
50805087
valuesFlat,
50815088
bitRatio
5082-
} = this._formatArrayTransfer(value, length);
5089+
} = this.formatArrayTransfer(value, length);
50835090

50845091
let buffer;
50855092
if (this.floatTextures) {
@@ -5124,7 +5131,7 @@ class WebGLKernel extends GLKernel {
51245131
const {
51255132
valuesFlat,
51265133
bitRatio
5127-
} = this._formatArrayTransfer(value.value, length);
5134+
} = this.formatArrayTransfer(value.value, length);
51285135

51295136
if (this.floatTextures) {
51305137
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1], 0, gl.RGBA, gl.FLOAT, input);
@@ -5216,11 +5223,15 @@ class WebGLKernel extends GLKernel {
52165223
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
52175224

52185225
let length = size[0] * size[1];
5226+
if (this.floatTextures) {
5227+
length *= 4;
5228+
length *= 4;
5229+
}
52195230

52205231
const {
52215232
valuesFlat,
52225233
bitRatio
5223-
} = this._formatArrayTransfer(value, length);
5234+
} = this.formatArrayTransfer(value, length);
52245235

52255236
let buffer;
52265237
if (this.floatTextures) {
@@ -5257,10 +5268,10 @@ class WebGLKernel extends GLKernel {
52575268
const {
52585269
valuesFlat,
52595270
bitRatio
5260-
} = this._formatArrayTransfer(value.value, length);
5271+
} = this.formatArrayTransfer(value.value, length);
52615272

52625273
if (this.floatTextures) {
5263-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1], 0, gl.RGBA, gl.FLOAT, inputArray);
5274+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1], 0, gl.RGBA, gl.FLOAT, valuesFlat);
52645275
} else {
52655276
const buffer = new Uint8Array(valuesFlat.buffer);
52665277
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0] / bitRatio, size[1], 0, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
@@ -5328,9 +5339,12 @@ class WebGLKernel extends GLKernel {
53285339
this.constantsLength++;
53295340
}
53305341

5331-
_formatArrayTransfer(value, length) {
5342+
formatArrayTransfer(value, length) {
53325343
let bitRatio = 1;
53335344
let valuesFlat = value;
5345+
if (this.floatTextures) {
5346+
length *= 4;
5347+
}
53345348
if (utils.isArray(value[0]) || this.floatTextures) {
53355349
valuesFlat = new Float32Array(length);
53365350
utils.flattenTo(value, valuesFlat);
@@ -5710,6 +5724,7 @@ class WebGLKernel extends GLKernel {
57105724
this.extensions.OES_texture_float = null;
57115725
this.extensions.OES_texture_float_linear = null;
57125726
this.extensions.OES_element_index_uint = null;
5727+
this.extensions.WEBGL_draw_buffers = null;
57135728
}
57145729

57155730
static destroyContext(context) {
@@ -5729,6 +5744,7 @@ class WebGLKernel extends GLKernel {
57295744
module.exports = {
57305745
WebGLKernel
57315746
};
5747+
57325748
},{"../../plugins/triangle-noise":26,"../../texture":27,"../../utils":28,"../function-builder":7,"../gl-kernel":9,"./fragment-shader":12,"./function-node":13,"./kernel-string":14,"./vertex-shader":16}],16:[function(require,module,exports){
57335749
const vertexShader = `precision highp float;
57345750
precision highp int;
@@ -6291,7 +6307,7 @@ class WebGL2Kernel extends WebGLKernel {
62916307
const {
62926308
valuesFlat,
62936309
bitRatio
6294-
} = this._formatArrayTransfer(value, length);
6310+
} = this.formatArrayTransfer(value, length);
62956311

62966312
let buffer;
62976313
if (this.floatTextures) {
@@ -6335,10 +6351,10 @@ class WebGL2Kernel extends WebGLKernel {
63356351
const {
63366352
valuesFlat,
63376353
bitRatio
6338-
} = this._formatArrayTransfer(value.value, length);
6354+
} = this.formatArrayTransfer(value.value, length);
63396355

63406356
if (this.floatTextures) {
6341-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, size[0], size[1], 0, gl.RGBA, gl.FLOAT, inputArray);
6357+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, size[0], size[1], 0, gl.RGBA, gl.FLOAT, valuesFlat);
63426358
} else {
63436359
const buffer = new Uint8Array(valuesFlat.buffer);
63446360
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0] / bitRatio, size[1], 0, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
@@ -6528,7 +6544,7 @@ class WebGL2Kernel extends WebGLKernel {
65286544
const {
65296545
valuesFlat,
65306546
bitRatio
6531-
} = this._formatArrayTransfer(value, length);
6547+
} = this.formatArrayTransfer(value, length);
65326548

65336549
let buffer;
65346550
if (this.floatTextures) {
@@ -6565,10 +6581,10 @@ class WebGL2Kernel extends WebGLKernel {
65656581
const {
65666582
valuesFlat,
65676583
bitRatio
6568-
} = this._formatArrayTransfer(value.value, length);
6584+
} = this.formatArrayTransfer(value.value, length);
65696585

65706586
if (this.floatTextures) {
6571-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, size[0], size[1], 0, gl.RGBA, gl.FLOAT, inputArray);
6587+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, size[0], size[1], 0, gl.RGBA, gl.FLOAT, valuesFlat);
65726588
} else {
65736589
const buffer = new Uint8Array(valuesFlat.buffer);
65746590
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0] / bitRatio, size[1], 0, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
@@ -6869,6 +6885,7 @@ class WebGL2Kernel extends WebGLKernel {
68696885
module.exports = {
68706886
WebGL2Kernel
68716887
};
6888+
68726889
},{"../../texture":27,"../../utils":28,"../function-builder":7,"../web-gl/kernel":15,"./fragment-shader":17,"./function-node":18,"./vertex-shader":20}],20:[function(require,module,exports){
68736890
const vertexShader = `#version 300 es
68746891
precision highp float;
@@ -7467,7 +7484,6 @@ class Texture {
74677484
module.exports = {
74687485
Texture
74697486
};
7470-
74717487
},{}],28:[function(require,module,exports){
74727488
const {
74737489
Input
@@ -7576,8 +7592,9 @@ const utils = {
75767592
}
75777593

75787594
if (opt.floatTextures && (!output || opt.floatOutput)) {
7579-
w = numTexels = Math.ceil(numTexels / 4);
7595+
w = numTexels * 4;
75807596
}
7597+
75817598
if (h > 1 && w * h === numTexels) {
75827599
return [w, h];
75837600
}

0 commit comments

Comments
 (0)