mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
glsl: Initialize all member variables of _mesa_glsl_parse_state on construction.
The _mesa_glsl_parse_state object relies on the memory allocator zeroing out its contents before it's initialized, which is quite an unusual practice in the C++ world because it ties objects to some specific allocation scheme, and gives unpredictable results when an object is created with a different allocator -- Stack allocation, array allocation, or aggregation inside a different object are some of the useful possibilities that come to my mind. Initialize all fields from the constructor and stop using the zeroing allocator. Reviewed-by: Paul Berry <stereotype441@gmail.com> Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
0e72db9f97
commit
43bf36b080
2 changed files with 15 additions and 3 deletions
|
|
@ -55,7 +55,7 @@ static unsigned known_desktop_glsl_versions[] =
|
|||
|
||||
_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
||||
GLenum target, void *mem_ctx)
|
||||
: ctx(_ctx)
|
||||
: ctx(_ctx), switch_state()
|
||||
{
|
||||
switch (target) {
|
||||
case GL_VERTEX_SHADER: this->target = vertex_shader; break;
|
||||
|
|
@ -66,10 +66,14 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||
this->scanner = NULL;
|
||||
this->translation_unit.make_empty();
|
||||
this->symbols = new(mem_ctx) glsl_symbol_table;
|
||||
|
||||
this->num_uniform_blocks = 0;
|
||||
this->uniform_block_array_size = 0;
|
||||
this->uniform_blocks = NULL;
|
||||
|
||||
this->info_log = ralloc_strdup(mem_ctx, "");
|
||||
this->error = false;
|
||||
this->loop_nesting_ast = NULL;
|
||||
this->switch_state.switch_nesting_ast = NULL;
|
||||
|
||||
this->struct_specifier_depth = 0;
|
||||
this->num_builtins_to_link = 0;
|
||||
|
|
@ -105,6 +109,13 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||
|
||||
this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
|
||||
|
||||
this->current_function = NULL;
|
||||
this->toplevel_ir = NULL;
|
||||
this->found_return = false;
|
||||
this->all_invariant = false;
|
||||
this->user_structures = NULL;
|
||||
this->num_user_structures = 0;
|
||||
|
||||
/* Populate the list of supported GLSL versions */
|
||||
/* FINISHME: Once the OpenGL 3.0 'forward compatible' context or
|
||||
* the OpenGL 3.2 Core context is supported, this logic will need
|
||||
|
|
@ -163,6 +174,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||
|
||||
this->gs_input_prim_type_specified = false;
|
||||
this->gs_input_prim_type = GL_POINTS;
|
||||
this->gs_input_size = 0;
|
||||
this->out_qualifier = new(this) ast_type_qualifier();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ struct _mesa_glsl_parse_state {
|
|||
_mesa_glsl_parse_state(struct gl_context *_ctx, GLenum target,
|
||||
void *mem_ctx);
|
||||
|
||||
DECLARE_RZALLOC_CXX_OPERATORS(_mesa_glsl_parse_state);
|
||||
DECLARE_RALLOC_CXX_OPERATORS(_mesa_glsl_parse_state);
|
||||
|
||||
/**
|
||||
* Generate a string representing the GLSL version currently being compiled
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue