llvmpipe: Prevent segfault during fs variant cache shrinking.
This commit is contained in:
parent
47ff3f7cc5
commit
b8d1242c0b
|
@ -1366,10 +1366,21 @@ llvmpipe_update_fs(struct llvmpipe_context *lp)
|
|||
*/
|
||||
llvmpipe_finish(pipe, __FUNCTION__);
|
||||
|
||||
for (i = 0; i < LP_MAX_SHADER_VARIANTS / 4; i++) {
|
||||
struct lp_fs_variant_list_item *item;
|
||||
item = last_elem(&lp->fs_variants_list);
|
||||
llvmpipe_remove_shader_variant(lp, item->base);
|
||||
/*
|
||||
* We need to re-check lp->nr_fs_variants because an arbitrarliy large
|
||||
* number of shader variants (potentially all of them) could be
|
||||
* pending for destruction on flush.
|
||||
*/
|
||||
|
||||
if (lp->nr_fs_variants >= LP_MAX_SHADER_VARIANTS) {
|
||||
for (i = 0; i < LP_MAX_SHADER_VARIANTS / 4; i++) {
|
||||
struct lp_fs_variant_list_item *item;
|
||||
item = last_elem(&lp->fs_variants_list);
|
||||
if (!item) {
|
||||
break;
|
||||
}
|
||||
llvmpipe_remove_shader_variant(lp, item->base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue