diff options
author | Timothy Arceri <[email protected]> | 2016-10-31 23:54:03 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2016-11-19 07:42:33 +1100 |
commit | 9d96d3803ab5dc896d4844ac785db57bb1717f91 (patch) | |
tree | e9a688d77f579e5184068bbc1aeaf349853b4871 /src/mesa/program | |
parent | 2b8f97d0ff0836b1d1c8753a81a8810df385b21d (diff) |
glsl: create gl_program at the start of linking rather than the end
This will allow us to directly store metadata we want to retain in
gl_program this metadata is currently stored in gl_linked_shader and
will be lost if relinking fails even though the program will remain
in use and is still valid according to the spec.
"If a program object that is active for any shader stage is re-linked
unsuccessfully, the link status will be set to FALSE, but any existing
executables and associated state will remain part of the current
rendering state until a subsequent call to UseProgram,
UseProgramStages, or BindProgramPipeline removes them from use."
This change will also help avoid the double handing that happens in
_mesa_copy_linked_program_data().
Reviewed-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/mesa/program')
-rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 7f4212333f1..88a7f368ee1 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -2794,9 +2794,7 @@ get_mesa_program(struct gl_context *ctx, validate_ir_tree(shader->ir); - prog = ctx->Driver.NewProgram(ctx, target, shader_program->Name); - if (!prog) - return NULL; + prog = shader->Program; prog->Parameters = _mesa_new_parameter_list(); v.ctx = ctx; v.prog = prog; @@ -2929,9 +2927,6 @@ get_mesa_program(struct gl_context *ctx, prog->info.fs.depth_layout = shader_program->FragDepthLayout; } - /* Don't use _mesa_reference_program() just take ownership */ - shader->Program = prog; - if ((ctx->_Shader->Flags & GLSL_NO_OPT) == 0) { _mesa_optimize_program(ctx, prog, prog); } |