Created
July 18, 2017 11:03
-
-
Save sagnitude/eae02db420dec3334ad4878be8d08817 to your computer and use it in GitHub Desktop.
Test gpu.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var b64Str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
var b64Table = {}; | |
var b64Chars = []; | |
var b64LookupTable = []; | |
for (var i = 0; i < b64Str.length; i++) { | |
var ch = b64Str.charCodeAt(i); | |
b64Table[ch] = i; | |
b64Chars[i] = ch; | |
b64LookupTable[ch] = i; | |
} | |
for (var i = 0; i < b64LookupTable.length; i++) { | |
var ch = b64LookupTable[i]; | |
if (ch === undefined) { | |
b64LookupTable[i] = 0; | |
} | |
} | |
b64LookupTable[61] = 0; //padding | |
//rawData should be ArrayBuffer or array of base64 encoded data | |
function decodeBase64Gpu(rawData) { | |
var uint = new Uint8Array(rawData); | |
var array = []; | |
for (var i = 0; i < uint.length; i++) { | |
array[i] = uint[i]; | |
if (array[i] === 61) { | |
array[i] = 0; | |
} | |
} | |
//note the trailing equals | |
var segments = uint.length / 4; | |
var de_base64 = idsmap.gpu.createKernel(function(array, x, b64LookupTable) { | |
var index = this.thread.x; | |
var outIndex = this.thread.y; | |
var calcIndex = this.thread.z; | |
if (calcIndex === 0) { | |
//charCode inputGroup | |
var ch1 = array[index * 4]; | |
var ch2 = array[index * 4 + 1]; | |
var ch3 = array[index * 4 + 2]; | |
var ch4 = array[index * 4 + 3]; | |
var i1 = b64LookupTable[ch1]; | |
var i2 = b64LookupTable[ch2]; | |
var i3 = b64LookupTable[ch3]; | |
var i4 = b64LookupTable[ch4]; | |
if (ch3 === 61) { | |
//== | |
if (outIndex > 0) return 0; | |
} | |
if (ch4 === 61) { | |
//= | |
if (outIndex > 1) return 0; | |
} | |
if (outIndex === 0) { | |
return i1 * 4 + (i2 / 16); | |
} else if (outIndex === 1) { | |
return (i2 % 16) * 16 + i3 / 4; | |
} else if (outIndex === 2) { | |
return i4 + (i3 % 4) * 64; | |
} | |
return 0; | |
} | |
}).dimensions([segments, 3, 1]); | |
var val = de_base64(array, array, b64LookupTable); | |
var base64_str = ""; | |
for (var i = 0; i < segments; i++) { | |
base64_str += String.fromCharCode(~~val[0][0][i]); | |
base64_str += String.fromCharCode(~~val[0][1][i]); | |
base64_str += String.fromCharCode(~~val[0][2][i]); | |
} | |
return base64_str; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment