Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move __glGenObject to GL.genObject. NFC #21302

Merged
merged 1 commit into from
Feb 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
74 changes: 34 additions & 40 deletions src/library_webgl.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,34 @@ for (/**@suppress{duplicate}*/var i = 0; i < {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};
return ret;
},

// The code path for creating textures, buffers, framebuffers and other
// objects the same (and not in fast path), so we merge the functions
// together.
// 'createFunction' refers to the WebGL context function name to do the actual
// creation, 'objectTable' points to the GL object table where to populate the
// created objects, and 'functionName' carries the name of the caller for
// debug information.
genObject: (n, buffers, createFunction, objectTable
#if GL_ASSERTIONS
, functionName
#endif
) => {
for (var i = 0; i < n; i++) {
var buffer = GLctx[createFunction]();
var id = buffer && GL.getNewId(objectTable);
if (buffer) {
buffer.name = id;
objectTable[id] = buffer;
} else {
GL.recordError(0x502 /* GL_INVALID_OPERATION */);
#if GL_ASSERTIONS
err(`GL_INVALID_OPERATION in ${functionName}: GLctx.${createFunction} returned null - most likely GL context is lost!`);
#endif
}
{{{ makeSetValue('buffers', 'i*4', 'id', 'i32') }}};
}
},

#if FULL_ES2 || LEGACY_GL_EMULATION
// When user GL code wants to render from client-side memory, we need to
// upload the vertex data to a temp VBO for rendering. Maintain a set of
Expand Down Expand Up @@ -1770,46 +1798,16 @@ for (/**@suppress{duplicate}*/var i = 0; i < {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};
return GLctx.isTexture(texture);
},

// The code path for creating textures, buffers, framebuffers and other
// objects is so identical to each other (and not in fast path), that merge
// the functions together to only have one generated copy of this.
// 'createFunction' refers to the WebGL context function name to do the actual
// creation, 'objectTable' points to the GL object table where to populate the
// created objects, and 'functionName' carries the name of the caller for
// debug information.
$__glGenObject: (n, buffers, createFunction, objectTable
#if GL_ASSERTIONS
, functionName
#endif
) => {
for (var i = 0; i < n; i++) {
var buffer = GLctx[createFunction]();
var id = buffer && GL.getNewId(objectTable);
if (buffer) {
buffer.name = id;
objectTable[id] = buffer;
} else {
GL.recordError(0x502 /* GL_INVALID_OPERATION */);
#if GL_ASSERTIONS
err(`GL_INVALID_OPERATION in ${functionName}: GLctx.${createFunction} returned null - most likely GL context is lost!`);
#endif
}
{{{ makeSetValue('buffers', 'i*4', 'id', 'i32') }}};
}
},

glGenBuffers__deps: ['$__glGenObject'],
glGenBuffers: (n, buffers) => {
__glGenObject(n, buffers, 'createBuffer', GL.buffers
GL.genObject(n, buffers, 'createBuffer', GL.buffers
#if GL_ASSERTIONS
, 'glGenBuffers'
#endif
);
},

glGenTextures__deps: ['$__glGenObject'],
glGenTextures: (n, textures) => {
__glGenObject(n, textures, 'createTexture', GL.textures
GL.genObject(n, textures, 'createTexture', GL.textures
#if GL_ASSERTIONS
, 'glGenTextures'
#endif
Expand Down Expand Up @@ -2055,9 +2053,8 @@ for (/**@suppress{duplicate}*/var i = 0; i < {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};
return GLctx.isBuffer(b);
},

glGenRenderbuffers__deps: ['$__glGenObject'],
glGenRenderbuffers: (n, renderbuffers) => {
__glGenObject(n, renderbuffers, 'createRenderbuffer', GL.renderbuffers
GL.genObject(n, renderbuffers, 'createRenderbuffer', GL.renderbuffers
#if GL_ASSERTIONS
, 'glGenRenderbuffers'
#endif
Expand Down Expand Up @@ -3627,9 +3624,8 @@ for (/**@suppress{duplicate}*/var i = 0; i < {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};

},

glGenFramebuffers__deps: ['$__glGenObject'],
glGenFramebuffers: (n, ids) => {
__glGenObject(n, ids, 'createFramebuffer', GL.framebuffers
GL.genObject(n, ids, 'createFramebuffer', GL.framebuffers
#if GL_ASSERTIONS
, 'glGenFramebuffers'
#endif
Expand Down Expand Up @@ -3678,19 +3674,17 @@ for (/**@suppress{duplicate}*/var i = 0; i < {{{ GL_POOL_TEMP_BUFFERS_SIZE }}};
return GLctx.isFramebuffer(fb);
},

glGenVertexArrays__deps: ['$__glGenObject'
#if LEGACY_GL_EMULATION
, '$emulGlGenVertexArrays'
glGenVertexArrays__deps: ['$emulGlGenVertexArrays'],
#endif
],
glGenVertexArrays: (n, arrays) => {
#if LEGACY_GL_EMULATION
emulGlGenVertexArrays(n, arrays);
#else
#if GL_ASSERTIONS
assert(GLctx.createVertexArray, 'Must have WebGL2 or OES_vertex_array_object to use vao');
#endif
__glGenObject(n, arrays, 'createVertexArray', GL.vaos
GL.genObject(n, arrays, 'createVertexArray', GL.vaos
#if GL_ASSERTIONS
, 'glGenVertexArrays'
#endif
Expand Down
9 changes: 3 additions & 6 deletions src/library_webgl2.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,8 @@ var LibraryWebGL2 = {
},

// Queries
glGenQueries__deps: ['$__glGenObject'],
glGenQueries: (n, ids) => {
__glGenObject(n, ids, 'createQuery', GL.queries
GL.genObject(n, ids, 'createQuery', GL.queries
#if GL_ASSERTIONS
, 'glGenQueries'
#endif
Expand Down Expand Up @@ -246,9 +245,8 @@ var LibraryWebGL2 = {
},

// Sampler objects
glGenSamplers__deps: ['$__glGenObject'],
glGenSamplers: (n, samplers) => {
__glGenObject(n, samplers, 'createSampler', GL.samplers
GL.genObject(n, samplers, 'createSampler', GL.samplers
#if GL_ASSERTIONS
, 'glGenSamplers'
#endif
Expand Down Expand Up @@ -340,9 +338,8 @@ var LibraryWebGL2 = {
},

// Transform Feedback
glGenTransformFeedbacks__deps: ['$__glGenObject'],
glGenTransformFeedbacks: (n, ids) => {
__glGenObject(n, ids, 'createTransformFeedback', GL.transformFeedbacks
GL.genObject(n, ids, 'createTransformFeedback', GL.transformFeedbacks
#if GL_ASSERTIONS
, 'glGenTransformFeedbacks'
#endif
Expand Down
4 changes: 2 additions & 2 deletions test/code_size/hello_webgl2_wasm2js.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"a.html": 567,
"a.html.gz": 379,
"a.js": 17795,
"a.js.gz": 7978,
"a.js.gz": 7979,
"a.mem": 3123,
"a.mem.gz": 2693,
"total": 21485,
"total_gz": 11050
"total_gz": 11051
}
4 changes: 2 additions & 2 deletions test/code_size/hello_webgl_wasm2js.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"a.html": 567,
"a.html.gz": 379,
"a.js": 17267,
"a.js.gz": 7813,
"a.js.gz": 7812,
"a.mem": 3123,
"a.mem.gz": 2693,
"total": 20957,
"total_gz": 10885
"total_gz": 10884
}
2 changes: 1 addition & 1 deletion test/other/metadce/test_metadce_hello_O0.gzsize
Original file line number Diff line number Diff line change
@@ -1 +1 @@
8355
8348
2 changes: 1 addition & 1 deletion test/other/metadce/test_metadce_hello_O0.jssize
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22908
22894
2 changes: 1 addition & 1 deletion test/other/metadce/test_metadce_minimal_O0.gzsize
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7176
7169
2 changes: 1 addition & 1 deletion test/other/metadce/test_metadce_minimal_O0.jssize
Original file line number Diff line number Diff line change
@@ -1 +1 @@
19532
19518
2 changes: 1 addition & 1 deletion test/other/test_unoptimized_code_size.js.size
Original file line number Diff line number Diff line change
@@ -1 +1 @@
58114
58095