diff --git a/src/lib/libwebgl.js b/src/lib/libwebgl.js index e42b0378d5f5f..7b7b37089cac3 100644 --- a/src/lib/libwebgl.js +++ b/src/lib/libwebgl.js @@ -3273,9 +3273,9 @@ for (/**@suppress{duplicate}*/var i = 0; i <= {{{ GL_POOL_TEMP_BUFFERS_SIZE }}}; // Remove all the layout(binding = x) directives so that they do not make // their way to the actual WebGL shader compiler. These regexes get quite // hairy, check against https://regex101.com/ when working on these. - source = source.replace(/layout\s*\(.*?binding\s*=\s*([-\d]+).*?\)/g, ''); // "layout(binding = 3)" -> "" + source = source.replace(/layout\s*\(\s*binding\s*=\s*([-\d]+)\s*\)/g, ''); // "layout(binding = 3)" -> "" source = source.replace(/(layout\s*\((.*?)),\s*binding\s*=\s*([-\d]+)\)/g, '$1)'); // "layout(std140, binding = 1)" -> "layout(std140)" - source = source.replace(/layout\s*\(\s*binding\s*=\s*([-\d]+)\s*,(.*?)\)/g, 'layout($2)'); // "layout(binding = 1, std140)" -> "layout(std140)" + source = source.replace(/layout\s*\(\s*binding\s*=\s*([-\d]+)\s*,\s*(.*?)\)/g, 'layout($2)'); // "layout(binding = 1, std140)" -> "layout(std140)" #if GL_DEBUG dbg(`Shader source after removing layout binding directives: ${source}`; diff --git a/test/browser/webgl2_ubo_layout_binding.c b/test/browser/webgl2_ubo_layout_binding.c index c572037cda82e..9a5de4eb5a377 100644 --- a/test/browser/webgl2_ubo_layout_binding.c +++ b/test/browser/webgl2_ubo_layout_binding.c @@ -83,6 +83,11 @@ int main(int argc, char *argv[]) "out vec4 outColor;\n" "void main() { outColor = vec4(r, green.g, blue[0].b + blue[1].b, 1.0); }"); + // The above shader compilation should preserve the std140 layout part in the uniforms, so + // make sure that did happen. (https://github.com/emscripten-core/emscripten/issues/25828) + assert(strstr(emscripten_webgl_get_shader_source_utf8(ps), "layout(std140) uniform Green")); + assert(strstr(emscripten_webgl_get_shader_source_utf8(ps), "layout(std140) uniform Blue")); + GLuint program = CreateProgram(vs, ps); glUseProgram(program);