Skip to content

Commit d6757ab

Browse files
Merge pull request #458 from Drenata/fix-return-nd-array
Fix return of >=2d arrays from GPU
2 parents 47bae6b + ce6fb28 commit d6757ab

File tree

6 files changed

+173
-101
lines changed

6 files changed

+173
-101
lines changed

bin/gpu-browser-core.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* GPU Accelerated JavaScript
66
*
77
* @version 2.0.0-rc.13
8-
* @date Mon Apr 29 2019 08:45:13 GMT-0400 (Eastern Daylight Time)
8+
* @date Mon Apr 29 2019 20:46:46 GMT+0200 (CEST)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -3466,9 +3466,10 @@ class GLKernel extends Kernel {
34663466
const XResultsMax = xMax * 4;
34673467
for (let y = 0; y < yMax; y++) {
34683468
const xResults = new Array(xMax);
3469+
const offset = y * XResultsMax;
34693470
let i = 0;
34703471
for (let x = 0; x < XResultsMax; x += 4) {
3471-
xResults[i++] = pixels.subarray(x, x + 2);
3472+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
34723473
}
34733474
yResults[y] = xResults;
34743475
}
@@ -3483,9 +3484,10 @@ class GLKernel extends Kernel {
34833484
const yResults = new Array(yMax);
34843485
for (let y = 0; y < yMax; y++) {
34853486
const xResults = new Array(xMax);
3487+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
34863488
let i = 0;
34873489
for (let x = 0; x < xResultsMax; x += 4) {
3488-
xResults[i++] = pixels.subarray(x, x + 2);
3490+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
34893491
}
34903492
yResults[y] = xResults;
34913493
}
@@ -3507,13 +3509,14 @@ class GLKernel extends Kernel {
35073509
render2DArray3() {
35083510
const pixels = this.readFloatPixelsToFloat32Array();
35093511
const [xMax, yMax] = this.output;
3510-
const xMaxResults = xMax * 4;
3512+
const xResultsMax = xMax * 4;
35113513
const yResults = new Array(yMax);
35123514
for (let y = 0; y < yMax; y++) {
35133515
const xResults = new Array(xMax);
3516+
const offset = y * xResultsMax;
35143517
let i = 0;
3515-
for (let x = 0; x < xMaxResults; x += 4) {
3516-
xResults[i++] = pixels.subarray(x, x + 3);
3518+
for (let x = 0; x < xResultsMax; x += 4) {
3519+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
35173520
}
35183521
yResults[y] = xResults;
35193522
}
@@ -3522,15 +3525,16 @@ class GLKernel extends Kernel {
35223525
render3DArray3() {
35233526
const pixels = this.readFloatPixelsToFloat32Array();
35243527
const [xMax, yMax, zMax] = this.output;
3525-
const xMaxResults = xMax * 4;
3528+
const xResultsMax = xMax * 4;
35263529
const zResults = new Array(zMax);
35273530
for (let z = 0; z < zMax; z++) {
35283531
const yResults = new Array(yMax);
35293532
for (let y = 0; y < yMax; y++) {
35303533
const xResults = new Array(xMax);
3534+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
35313535
let i = 0;
3532-
for (let x = 0; x < xMaxResults; x += 4) {
3533-
xResults[i++] = pixels.subarray(x, x + 3);
3536+
for (let x = 0; x < xResultsMax; x += 4) {
3537+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
35343538
}
35353539
yResults[y] = xResults;
35363540
}
@@ -3552,13 +3556,14 @@ class GLKernel extends Kernel {
35523556
render2DArray4() {
35533557
const pixels = this.readFloatPixelsToFloat32Array();
35543558
const [xMax, yMax] = this.output;
3555-
const xMaxResult = xMax * 4;
3559+
const xResultsMax = xMax * 4;
35563560
const yResults = new Array(yMax);
35573561
for (let y = 0; y < yMax; y++) {
35583562
const xResults = new Array(xMax);
3563+
const offset = y * xResultsMax;
35593564
let i = 0;
3560-
for (let x = 0; x < xMaxResult; x += 4) {
3561-
xResults[i++] = pixels.subarray(x, x + 4);
3565+
for (let x = 0; x < xResultsMax; x += 4) {
3566+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
35623567
}
35633568
yResults[y] = xResults;
35643569
}
@@ -3567,15 +3572,16 @@ class GLKernel extends Kernel {
35673572
render3DArray4() {
35683573
const pixels = this.readFloatPixelsToFloat32Array();
35693574
const [xMax, yMax, zMax] = this.output;
3570-
const xResultsMap = xMax * 4;
3575+
const xResultsMax = xMax * 4;
35713576
const zResults = new Array(zMax);
35723577
for (let z = 0; z < zMax; z++) {
35733578
const yResults = new Array(yMax);
35743579
for (let y = 0; y < yMax; y++) {
35753580
const xResults = new Array(xMax);
3581+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
35763582
let i = 0;
3577-
for (let x = 0; x < xResultsMap; x += 4) {
3578-
xResults[i++] = pixels.subarray(x, x + 4);
3583+
for (let x = 0; x < xResultsMax; x += 4) {
3584+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
35793585
}
35803586
yResults[y] = xResults;
35813587
}

bin/gpu-browser-core.min.js

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* GPU Accelerated JavaScript
66
*
77
* @version 2.0.0-rc.13
8-
* @date Mon Apr 29 2019 08:45:16 GMT-0400 (Eastern Daylight Time)
8+
* @date Mon Apr 29 2019 20:46:48 GMT+0200 (CEST)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -18,7 +18,7 @@
1818
* GPU Accelerated JavaScript
1919
*
2020
* @version 2.0.0-rc.13
21-
* @date Mon Apr 29 2019 08:45:13 GMT-0400 (Eastern Daylight Time)
21+
* @date Mon Apr 29 2019 20:46:46 GMT+0200 (CEST)
2222
*
2323
* @license MIT
2424
* The MIT License
@@ -3479,9 +3479,10 @@ class GLKernel extends Kernel {
34793479
const XResultsMax = xMax * 4;
34803480
for (let y = 0; y < yMax; y++) {
34813481
const xResults = new Array(xMax);
3482+
const offset = y * XResultsMax;
34823483
let i = 0;
34833484
for (let x = 0; x < XResultsMax; x += 4) {
3484-
xResults[i++] = pixels.subarray(x, x + 2);
3485+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
34853486
}
34863487
yResults[y] = xResults;
34873488
}
@@ -3496,9 +3497,10 @@ class GLKernel extends Kernel {
34963497
const yResults = new Array(yMax);
34973498
for (let y = 0; y < yMax; y++) {
34983499
const xResults = new Array(xMax);
3500+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
34993501
let i = 0;
35003502
for (let x = 0; x < xResultsMax; x += 4) {
3501-
xResults[i++] = pixels.subarray(x, x + 2);
3503+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
35023504
}
35033505
yResults[y] = xResults;
35043506
}
@@ -3520,13 +3522,14 @@ class GLKernel extends Kernel {
35203522
render2DArray3() {
35213523
const pixels = this.readFloatPixelsToFloat32Array();
35223524
const [xMax, yMax] = this.output;
3523-
const xMaxResults = xMax * 4;
3525+
const xResultsMax = xMax * 4;
35243526
const yResults = new Array(yMax);
35253527
for (let y = 0; y < yMax; y++) {
35263528
const xResults = new Array(xMax);
3529+
const offset = y * xResultsMax;
35273530
let i = 0;
3528-
for (let x = 0; x < xMaxResults; x += 4) {
3529-
xResults[i++] = pixels.subarray(x, x + 3);
3531+
for (let x = 0; x < xResultsMax; x += 4) {
3532+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
35303533
}
35313534
yResults[y] = xResults;
35323535
}
@@ -3535,15 +3538,16 @@ class GLKernel extends Kernel {
35353538
render3DArray3() {
35363539
const pixels = this.readFloatPixelsToFloat32Array();
35373540
const [xMax, yMax, zMax] = this.output;
3538-
const xMaxResults = xMax * 4;
3541+
const xResultsMax = xMax * 4;
35393542
const zResults = new Array(zMax);
35403543
for (let z = 0; z < zMax; z++) {
35413544
const yResults = new Array(yMax);
35423545
for (let y = 0; y < yMax; y++) {
35433546
const xResults = new Array(xMax);
3547+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
35443548
let i = 0;
3545-
for (let x = 0; x < xMaxResults; x += 4) {
3546-
xResults[i++] = pixels.subarray(x, x + 3);
3549+
for (let x = 0; x < xResultsMax; x += 4) {
3550+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
35473551
}
35483552
yResults[y] = xResults;
35493553
}
@@ -3565,13 +3569,14 @@ class GLKernel extends Kernel {
35653569
render2DArray4() {
35663570
const pixels = this.readFloatPixelsToFloat32Array();
35673571
const [xMax, yMax] = this.output;
3568-
const xMaxResult = xMax * 4;
3572+
const xResultsMax = xMax * 4;
35693573
const yResults = new Array(yMax);
35703574
for (let y = 0; y < yMax; y++) {
35713575
const xResults = new Array(xMax);
3576+
const offset = y * xResultsMax;
35723577
let i = 0;
3573-
for (let x = 0; x < xMaxResult; x += 4) {
3574-
xResults[i++] = pixels.subarray(x, x + 4);
3578+
for (let x = 0; x < xResultsMax; x += 4) {
3579+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
35753580
}
35763581
yResults[y] = xResults;
35773582
}
@@ -3580,15 +3585,16 @@ class GLKernel extends Kernel {
35803585
render3DArray4() {
35813586
const pixels = this.readFloatPixelsToFloat32Array();
35823587
const [xMax, yMax, zMax] = this.output;
3583-
const xResultsMap = xMax * 4;
3588+
const xResultsMax = xMax * 4;
35843589
const zResults = new Array(zMax);
35853590
for (let z = 0; z < zMax; z++) {
35863591
const yResults = new Array(yMax);
35873592
for (let y = 0; y < yMax; y++) {
35883593
const xResults = new Array(xMax);
3594+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
35893595
let i = 0;
3590-
for (let x = 0; x < xResultsMap; x += 4) {
3591-
xResults[i++] = pixels.subarray(x, x + 4);
3596+
for (let x = 0; x < xResultsMax; x += 4) {
3597+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
35923598
}
35933599
yResults[y] = xResults;
35943600
}

bin/gpu-browser.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* GPU Accelerated JavaScript
66
*
77
* @version 2.0.0-rc.13
8-
* @date Mon Apr 29 2019 08:45:14 GMT-0400 (Eastern Daylight Time)
8+
* @date Mon Apr 29 2019 20:46:46 GMT+0200 (CEST)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -8230,9 +8230,10 @@ class GLKernel extends Kernel {
82308230
const XResultsMax = xMax * 4;
82318231
for (let y = 0; y < yMax; y++) {
82328232
const xResults = new Array(xMax);
8233+
const offset = y * XResultsMax;
82338234
let i = 0;
82348235
for (let x = 0; x < XResultsMax; x += 4) {
8235-
xResults[i++] = pixels.subarray(x, x + 2);
8236+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
82368237
}
82378238
yResults[y] = xResults;
82388239
}
@@ -8247,9 +8248,10 @@ class GLKernel extends Kernel {
82478248
const yResults = new Array(yMax);
82488249
for (let y = 0; y < yMax; y++) {
82498250
const xResults = new Array(xMax);
8251+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
82508252
let i = 0;
82518253
for (let x = 0; x < xResultsMax; x += 4) {
8252-
xResults[i++] = pixels.subarray(x, x + 2);
8254+
xResults[i++] = pixels.subarray(x + offset, x + offset + 2);
82538255
}
82548256
yResults[y] = xResults;
82558257
}
@@ -8271,13 +8273,14 @@ class GLKernel extends Kernel {
82718273
render2DArray3() {
82728274
const pixels = this.readFloatPixelsToFloat32Array();
82738275
const [xMax, yMax] = this.output;
8274-
const xMaxResults = xMax * 4;
8276+
const xResultsMax = xMax * 4;
82758277
const yResults = new Array(yMax);
82768278
for (let y = 0; y < yMax; y++) {
82778279
const xResults = new Array(xMax);
8280+
const offset = y * xResultsMax;
82788281
let i = 0;
8279-
for (let x = 0; x < xMaxResults; x += 4) {
8280-
xResults[i++] = pixels.subarray(x, x + 3);
8282+
for (let x = 0; x < xResultsMax; x += 4) {
8283+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
82818284
}
82828285
yResults[y] = xResults;
82838286
}
@@ -8286,15 +8289,16 @@ class GLKernel extends Kernel {
82868289
render3DArray3() {
82878290
const pixels = this.readFloatPixelsToFloat32Array();
82888291
const [xMax, yMax, zMax] = this.output;
8289-
const xMaxResults = xMax * 4;
8292+
const xResultsMax = xMax * 4;
82908293
const zResults = new Array(zMax);
82918294
for (let z = 0; z < zMax; z++) {
82928295
const yResults = new Array(yMax);
82938296
for (let y = 0; y < yMax; y++) {
82948297
const xResults = new Array(xMax);
8298+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
82958299
let i = 0;
8296-
for (let x = 0; x < xMaxResults; x += 4) {
8297-
xResults[i++] = pixels.subarray(x, x + 3);
8300+
for (let x = 0; x < xResultsMax; x += 4) {
8301+
xResults[i++] = pixels.subarray(x + offset, x + offset + 3);
82988302
}
82998303
yResults[y] = xResults;
83008304
}
@@ -8316,13 +8320,14 @@ class GLKernel extends Kernel {
83168320
render2DArray4() {
83178321
const pixels = this.readFloatPixelsToFloat32Array();
83188322
const [xMax, yMax] = this.output;
8319-
const xMaxResult = xMax * 4;
8323+
const xResultsMax = xMax * 4;
83208324
const yResults = new Array(yMax);
83218325
for (let y = 0; y < yMax; y++) {
83228326
const xResults = new Array(xMax);
8327+
const offset = y * xResultsMax;
83238328
let i = 0;
8324-
for (let x = 0; x < xMaxResult; x += 4) {
8325-
xResults[i++] = pixels.subarray(x, x + 4);
8329+
for (let x = 0; x < xResultsMax; x += 4) {
8330+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
83268331
}
83278332
yResults[y] = xResults;
83288333
}
@@ -8331,15 +8336,16 @@ class GLKernel extends Kernel {
83318336
render3DArray4() {
83328337
const pixels = this.readFloatPixelsToFloat32Array();
83338338
const [xMax, yMax, zMax] = this.output;
8334-
const xResultsMap = xMax * 4;
8339+
const xResultsMax = xMax * 4;
83358340
const zResults = new Array(zMax);
83368341
for (let z = 0; z < zMax; z++) {
83378342
const yResults = new Array(yMax);
83388343
for (let y = 0; y < yMax; y++) {
83398344
const xResults = new Array(xMax);
8345+
const offset = (z * xResultsMax * yMax) + (y * xResultsMax);
83408346
let i = 0;
8341-
for (let x = 0; x < xResultsMap; x += 4) {
8342-
xResults[i++] = pixels.subarray(x, x + 4);
8347+
for (let x = 0; x < xResultsMax; x += 4) {
8348+
xResults[i++] = pixels.subarray(x + offset, x + offset + 4);
83438349
}
83448350
yResults[y] = xResults;
83458351
}

0 commit comments

Comments
 (0)