nv50,nvc0: fix shader eviction

This commit is contained in:
Christoph Bumiller
2012-12-07 22:43:10 +01:00
parent f7599b2c32
commit cfa752cd33
2 changed files with 19 additions and 2 deletions
+5
View File
@@ -396,6 +396,11 @@ nv50_program_upload_code(struct nv50_context *nv50, struct nv50_program *prog)
nouveau_heap_free(&evict->mem);
}
debug_printf("WARNING: out of code space, evicting all shaders.\n");
ret = nouveau_heap_alloc(heap, size, prog, &prog->mem);
if (ret) {
NOUVEAU_ERR("shader too large (0x%x) to fit in code space ?\n", size);
return FALSE;
}
}
prog->code_base = prog->mem->start;
+14 -2
View File
@@ -670,8 +670,20 @@ nvc0_program_upload_code(struct nvc0_context *nvc0, struct nvc0_program *prog)
ret = nouveau_heap_alloc(screen->text_heap, size, prog, &prog->mem);
if (ret) {
NOUVEAU_ERR("out of code space\n");
return FALSE;
struct nouveau_heap *heap = screen->text_heap;
struct nouveau_heap *iter;
for (iter = heap; iter && iter->next != heap; iter = iter->next) {
struct nvc0_program *evict = iter->priv;
if (evict)
nouveau_heap_free(&evict->mem);
}
debug_printf("WARNING: out of code space, evicting all shaders.\n");
ret = nouveau_heap_alloc(heap, size, prog, &prog->mem);
if (ret) {
NOUVEAU_ERR("shader too large (0x%x) to fit in code space ?\n", size);
return FALSE;
}
IMMED_NVC0(nvc0->base.pushbuf, NVC0_3D(SERIALIZE), 0);
}
prog->code_base = prog->mem->start;
prog->immd_base = align(prog->mem->start + prog->immd_base, 0x100);