compiler: Save a single copy of the softfp64 shader in the context.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 9 Jul 2019 07:32:42 +0000 (00:32 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 11 Jul 2019 05:14:36 +0000 (22:14 -0700)
commitce93bf18767921dbcba4be0039d912e2fe7b276d
tree7331d7a5c1fb99eb6b4df7d00b5f7de9fee2b249
parentae4ccb67be29b9bca5c3ba8e5ed175901e1645b6
compiler: Save a single copy of the softfp64 shader in the context.

We were recompiling the softfp64 library of functions from GLSL to NIR
every time we compiled a shader that used fp64.  Worse, we were ralloc
stealing it to the GL context.  This meant that we'd accumulate lots of
copies for the lifetime of the context, which was a big space leak.

Instead, we can simply stash a single copy in the GL context, and use
it for subsequent compiles.  Having a single copy should be fine from
a memory context point of view: nir_inline_function_impl already clones
the necessary nir_function_impl's as it inlines.

KHR-GL45.enhanced_layouts.ssb_member_align_non_power_of_2 was previously
OOM'ing a system with 16GB of RAM when using softfp64.  Now it finishes
much more quickly and uses only ~200MB of RAM.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_program.c
src/mesa/main/context.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_glsl_to_nir.cpp