summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_context.h
diff options
context:
space:
mode:
authorRoland Scheidegger <sroland@vmware.com>2010-06-18 13:52:17 +0100
committerRoland Scheidegger <sroland@vmware.com>2010-06-18 13:52:17 +0100
commit17c9d7eea7b3365c59455a731fcb81e69bb86ce2 (patch)
treedf310fae3d03ba8f7f4dbc8bedbb6a74709b45a9 /src/gallium/drivers/llvmpipe/lp_context.h
parentff8e1452df5c86e745aea0490e9c6afdf166407b (diff)
llvmpipe: limit the number of fragment shader variants kept around
llvmpipe can create a large number of shader variants for a single shader (which are quite big), and they were only ever deleted if the shader itself was deleted. This is especially apparent in things like glean blendFunc where a new variant is created for every different subtest, chewing up all memory. This change limits the numbers of fragment shader variants (for all shaders) which are kept around to a fixed number. If that would be exceeded a fixed portion of the cached variants is deleted (since without tracking the used variants this involves flushing we don't want to delete only one). Always the least recently used variants (from all shaders together) are deleted. For now this is all per-context. Both the number of how many variants are cached (1024) as well as how many will be deleted at once (1/4 of the cache size) are just rough guesses and subject to further optimization.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_context.h')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_context.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_context.h b/src/gallium/drivers/llvmpipe/lp_context.h
index cb04d4a4d5..1bdd0f79e1 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.h
+++ b/src/gallium/drivers/llvmpipe/lp_context.h
@@ -38,6 +38,7 @@
#include "lp_tex_sample.h"
#include "lp_jit.h"
#include "lp_setup.h"
+#include "lp_state_fs.h"
struct llvmpipe_vbuf_render;
@@ -105,6 +106,8 @@ struct llvmpipe_context {
unsigned tex_timestamp;
boolean no_rast;
+ struct lp_fs_variant_list_item fs_variants_list;
+ unsigned nr_fs_variants;
};