mesa/src/compiler
Timothy Arceri d2861d682a mesa/glsl: delete previously linked shaders earlier when linking
This moves the delete linked shaders call to
_mesa_clear_shader_program_data() which makes sure we delete them
before returning due to any validation problems.

It also reduces some code duplication.

From the OpenGL 4.5 Core spec:

   "If LinkProgram failed, any information about a previous link of
   that program object is lost. Thus, a failed link does not restore
   the old state of program.

   ...

   If one of these commands is called with a program for which
   LinkProgram failed, no error is generated unless otherwise noted.
   Implementations may return information on variables and interface
   blocks that would have been active had the program been linked
   successfully. In cases where the link failed because the program
   required too many resources, these commands may help applications
   determine why limits were exceeded."

Therefore it's expected that we shouldn't be able to query the
program that failed to link and retrieve information about a
previously successful link.

Before this change the linker was doing validation before freeing
the previously linked shaders and therefore could exit on failure
before they were freed.

This change also fixes an issue in compat profile where a program
with no shaders attached is expect to fall back to fixed function
but was instead trying to relink IR from a previous link.

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97715
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
2016-11-03 11:58:53 +11:00
..
glsl mesa/glsl: delete previously linked shaders earlier when linking 2016-11-03 11:58:53 +11:00
nir nir: fix nir_shader_clone() and nir_sweep() 2016-11-03 10:39:13 +11:00
spirv ralloc: use rzalloc where it's necessary 2016-10-31 11:53:38 +01:00
.gitignore nir/spirv: Remove a duplicate spirv2nir from .gitignore 2016-10-04 07:43:15 -07:00
Android.glsl.gen.mk Android: glsl: add rules to generate ir_expression*.h header files 2016-09-06 15:58:55 +01:00
Android.glsl.mk Android: glsl: add rules to generate ir_expression*.h header files 2016-09-06 15:58:55 +01:00
Android.mk Android: glsl: add rules to generate ir_expression*.h header files 2016-09-06 15:58:55 +01:00
Android.nir.gen.mk compiler: android: flesh out nir into separate makefile 2016-04-11 19:08:23 +01:00
Android.nir.mk compiler: android: flesh out nir into separate makefile 2016-04-11 19:08:23 +01:00
builtin_type_macros.h glsl: add subpass image type (v2) 2016-09-16 15:16:31 +10:00
glsl_types.cpp glsl: Fix reading of uninitialized memory 2016-10-31 11:53:38 +01:00
glsl_types.h glsl: initialize glsl_struct_field properly 2016-10-31 11:53:38 +01:00
Makefile.am compiler: avoid warning about redefinition of PYTHON_GEN 2016-10-26 14:54:26 +01:00
Makefile.glsl.am glsl: Add pthread libs to cache_test 2016-10-27 09:49:35 +11:00
Makefile.nir.am compiler: avoid warning about redefinition of PYTHON_GEN 2016-10-26 14:54:26 +01:00
Makefile.sources compiler: automake: add shader_info.h to the sources list 2016-10-26 12:04:02 +01:00
nir_types.cpp nir: Delete open coded type printing. 2016-10-06 02:13:36 -07:00
nir_types.h nir: Delete open coded type printing. 2016-10-06 02:13:36 -07:00
SConscript glsl: Generate ir_expression_operation.h from Python 2016-08-30 16:28:00 -07:00
SConscript.glsl mesa: Remove prog_hash_table.c 2016-09-12 10:48:35 +10:00
SConscript.nir glsl: Generate ir_expression_operation.h from Python 2016-08-30 16:28:00 -07:00
shader_enums.c compiler: add printable values for cull distance varyings. 2016-10-04 10:15:23 +10:00
shader_enums.h compiler: update the comment for enum glsl_interp_mode 2016-10-26 14:29:36 +11:00
shader_info.h compiler: add additional cs metadata fields to shader info 2016-10-26 14:29:36 +11:00