fix: double definitions for arrays when they are integers

fixes #399
This commit is contained in:
Robert Plummer 2018-11-18 14:08:59 -05:00
parent c97c86f408
commit e3d80ea3e4
11 changed files with 44 additions and 31 deletions

View File

@ -4,8 +4,8 @@
*
* GPU Accelerated JavaScript
*
* @version 1.10.2
* @date Thu Nov 01 2018 14:15:00 GMT-0400 (EDT)
* @version 1.10.3
* @date Sun Nov 18 2018 14:07:45 GMT-0500 (EST)
*
* @license MIT
* The MIT License

4
bin/gpu-core.min.js vendored
View File

@ -4,8 +4,8 @@
*
* GPU Accelerated JavaScript
*
* @version 1.10.2
* @date Thu Nov 01 2018 14:15:00 GMT-0400 (EDT)
* @version 1.10.3
* @date Sun Nov 18 2018 14:07:45 GMT-0500 (EST)
*
* @license MIT
* The MIT License

View File

@ -4,8 +4,8 @@
*
* GPU Accelerated JavaScript
*
* @version 1.10.2
* @date Thu Nov 01 2018 14:15:00 GMT-0400 (EDT)
* @version 1.10.3
* @date Sun Nov 18 2018 14:07:45 GMT-0500 (EST)
*
* @license MIT
* The MIT License
@ -4437,7 +4437,7 @@ module.exports = function (_KernelBase) {
floatOutput: this.floatOutput
}, paramDim);
result.push('uniform sampler2D user_' + paramName, 'ivec2 user_' + paramName + 'Size = vec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'ivec3 user_' + paramName + 'Dim = vec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform int user_' + paramName + 'BitRatio');
result.push('uniform sampler2D user_' + paramName, 'ivec2 user_' + paramName + 'Size = ivec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'ivec3 user_' + paramName + 'Dim = ivec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform int user_' + paramName + 'BitRatio');
} else if (paramType === 'Integer') {
result.push('float user_' + paramName + ' = ' + param + '.0');
} else if (paramType === 'Float') {
@ -5565,10 +5565,6 @@ module.exports = function (_WebGLKernel) {
}, paramDim);
result.push('uniform highp sampler2D user_' + paramName, 'highp ivec2 user_' + paramName + 'Size = ivec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'highp ivec3 user_' + paramName + 'Dim = ivec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform highp int user_' + paramName + 'BitRatio');
if (paramType === 'Array') {
result.push('uniform highp int user_' + paramName + 'BitRatio');
}
} else if (paramType === 'Integer') {
result.push('highp float user_' + paramName + ' = ' + param + '.0');
} else if (paramType === 'Float') {

16
bin/gpu.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1313,7 +1313,7 @@ module.exports = function (_KernelBase) {
floatOutput: this.floatOutput
}, paramDim);
result.push('uniform sampler2D user_' + paramName, 'ivec2 user_' + paramName + 'Size = vec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'ivec3 user_' + paramName + 'Dim = vec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform int user_' + paramName + 'BitRatio');
result.push('uniform sampler2D user_' + paramName, 'ivec2 user_' + paramName + 'Size = ivec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'ivec3 user_' + paramName + 'Dim = ivec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform int user_' + paramName + 'BitRatio');
} else if (paramType === 'Integer') {
result.push('float user_' + paramName + ' = ' + param + '.0');
} else if (paramType === 'Float') {

View File

@ -760,10 +760,6 @@ module.exports = function (_WebGLKernel) {
}, paramDim);
result.push('uniform highp sampler2D user_' + paramName, 'highp ivec2 user_' + paramName + 'Size = ivec2(' + paramSize[0] + ', ' + paramSize[1] + ')', 'highp ivec3 user_' + paramName + 'Dim = ivec3(' + paramDim[0] + ', ' + paramDim[1] + ', ' + paramDim[2] + ')', 'uniform highp int user_' + paramName + 'BitRatio');
if (paramType === 'Array') {
result.push('uniform highp int user_' + paramName + 'BitRatio');
}
} else if (paramType === 'Integer') {
result.push('highp float user_' + paramName + ' = ' + param + '.0');
} else if (paramType === 'Float') {

View File

@ -1,6 +1,6 @@
{
"name": "gpu.js",
"version": "1.10.2",
"version": "1.10.3",
"description": "GPU Accelerated JavaScript",
"main": "./dist/index.js",
"files": ["dist", "bin"],

View File

@ -1289,8 +1289,8 @@ module.exports = class WebGLKernel extends KernelBase {
result.push(
`uniform sampler2D user_${ paramName }`,
`ivec2 user_${ paramName }Size = vec2(${ paramSize[0] }, ${ paramSize[1] })`,
`ivec3 user_${ paramName }Dim = vec3(${ paramDim[0] }, ${ paramDim[1]}, ${ paramDim[2] })`,
`ivec2 user_${ paramName }Size = ivec2(${ paramSize[0] }, ${ paramSize[1] })`,
`ivec3 user_${ paramName }Dim = ivec3(${ paramDim[0] }, ${ paramDim[1]}, ${ paramDim[2] })`,
`uniform int user_${ paramName }BitRatio`
);
} else if (paramType === 'Integer') {

View File

@ -788,10 +788,6 @@ module.exports = class WebGL2Kernel extends WebGLKernel {
`highp ivec3 user_${ paramName }Dim = ivec3(${ paramDim[0] }, ${ paramDim[1]}, ${ paramDim[2] })`,
`uniform highp int user_${ paramName }BitRatio`
);
if (paramType === 'Array') {
result.push(`uniform highp int user_${ paramName }BitRatio`)
}
} else if (paramType === 'Integer') {
result.push(`highp float user_${ paramName } = ${ param }.0`);
} else if (paramType === 'Float') {

View File

@ -88,5 +88,6 @@
<script src="issues/359-addfunction-params-wrong.js"></script>
<script src="issues/382-bad-constant.js"></script>
<script src="issues/390-thread-assignment.js"></script>
<script src="issues/399-double-definition.js"></script>
</body>
</html>

View File

@ -0,0 +1,24 @@
(function() {
function test(mode) {
var gpu = new GPU({ mode: mode });
const toTexture = gpu.createKernel(function(value) {
return value[this.thread.x];
}, {
output: [2],
outputToTexture: true,
hardcodeConstants: true,
outputImmutable: true
});
// basically it doesn't die, but builds all the way through to webGL
QUnit.assert.equal(toTexture([0, 1]).constructor, GPU.Texture);
gpu.destroy();
}
QUnit.test('Issue #399 - double definition (webgl)', function() {
test('webgl')
});
QUnit.test('Issue #399 - double definition (webgl2)', function() {
test('webgl2')
});
})();