Browse Source

llvmpipe: Prevent segfault during fs variant cache shrinking.

tags/mesa-8.0-rc1
José Fonseca 14 years ago
parent
commit
b8d1242c0b
1 changed files with 15 additions and 4 deletions
  1. 15
    4
      src/gallium/drivers/llvmpipe/lp_state_fs.c

+ 15
- 4
src/gallium/drivers/llvmpipe/lp_state_fs.c View File

@@ -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…
Cancel
Save