diff options
author | José Fonseca <[email protected]> | 2011-11-30 17:12:00 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2011-12-08 17:59:33 +0000 |
commit | 6cf7245f6938e27c9b8a1742f27659aec017bbdc (patch) | |
tree | 79397228a7f7408efd756f6e58298ff9977204f7 /src/gallium/auxiliary/gallivm | |
parent | f32c7232a8a16887af710a11f025381bc73640f0 (diff) |
llvmpipe: Trim the fragment shader cached based on LLVM IR instruction count.
Number of fragment shader variants is not very representative of the
memory used by LLVM, neither is number of shader instructions, as often
texture sampling constitutes most of the generated code.
This change adds an additional trim criteria: least recently used
fragment shader variants will be freed until the total number of LLVM IR
instruction falls below a specified threshold.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_type.c | 25 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_type.h | 4 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c b/src/gallium/auxiliary/gallivm/lp_bld_type.c index efd159f8869..413e69bedac 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c @@ -411,3 +411,28 @@ lp_build_context_init(struct lp_build_context *bld, bld->zero = LLVMConstNull(bld->vec_type); bld->one = lp_build_one(gallivm, type); } + + +/** + * Count the number of instructions in a function. + */ +unsigned +lp_build_count_instructions(LLVMValueRef function) +{ + unsigned num_instrs = 0; + LLVMBasicBlockRef block; + + block = LLVMGetFirstBasicBlock(function); + while (block) { + LLVMValueRef instr; + instr = LLVMGetFirstInstruction(block); + while (instr) { + ++num_instrs; + + instr = LLVMGetNextInstruction(instr); + } + block = LLVMGetNextBasicBlock(block); + } + + return num_instrs; +} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h index 5007e83ac5f..f11a190e7cc 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_type.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h @@ -398,4 +398,8 @@ lp_build_context_init(struct lp_build_context *bld, struct lp_type type); +unsigned +lp_build_count_instructions(LLVMValueRef function); + + #endif /* !LP_BLD_TYPE_H */ |