glsl: delay optimisations on individual shaders when cache is available
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 10 Apr 2017 01:48:48 +0000 (11:48 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sat, 15 Apr 2017 01:36:44 +0000 (11:36 +1000)
commitc2bc0aa7b188708e702bc3eaac5389793cbb85a8
treefd6eb5b1729e50ba6fe9593a539587a0b9bd2968
parentd2d6cf6c8387ac06c8559027f57683a61b48671b
glsl: delay optimisations on individual shaders when cache is available

Due to a max limit of 65,536 entries on the index table that we use to
decide if we can skip compiling individual shaders, it is very likely
we will have collisions.

To avoid doing too much work when the linked program may be in the
cache this patch delays calling the optimisations until link time.

Improves cold cache start-up times on Deus Ex by ~20 seconds.

When deleting the cache index to simulate a worst case scenario
of collisions in the index, warm cache start-up time improves by
~45 seconds.

V2: fix indentation, make sure to call optimisations on cache
fallback, make sure optimisations get called for XFB.

Tested-by: Grazvydas Ignotas <notasas@gmail.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/compiler/glsl/glsl_parser_extras.cpp
src/compiler/glsl/linker.cpp
src/compiler/glsl/shader_cache.cpp
src/mesa/main/mtypes.h