crocus: batch pinlemesini opsiyonel yap, gonderim hatasini susturma

recreate_growing_buffer() batch tamponlarina statik, monoton artan bir GTT
adresi verip EXEC_OBJECT_PINNED ile sabitliyordu (7e82b85). Amac
EXEC_OBJECT_CAPTURE ile birlikte GPU hata dokumlerinde adreslerin sabit
kalmasiydi, ama adres asla geri donusturulmuyordu.

create_batch() her flush'ta iki tampon yaratiyor (command ~20K + state
16K), yani her flush ~36K adres alani yakiyor. IVB'nin PPGTT'si 2 GB;
0x20000000'den baslayinca ~43 bin flush sonra alan bitiyor ve execbuf
ENOSPC donuyor. 60 fps'te birkac dakika: Witcher EE ve Fallout NV'de
oynanisin ortasinda tekrarlanabilir cokme.

Varsayilan artik upstream davranisi (adresi cekirdek secer).
CROCUS_PIN_BATCH=1 ile eski davranis geri gelir.

Ayrica: gonderim hatasi mesaji upstream'de MESA_DEBUG arkasinda. Release
derlemesinde hata tek satir aciklama birakmadan abort() olarak goruluyor
ve teshis edilemiyordu -- yukaridaki ENOSPC'yi bulmak bu yuzden zor oldu.
abort() zaten olumcul; sebebi artik her zaman yaziliyor.

crocus_context.c'deki gecici fprintf teshisi de kaldirildi.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
elwrclandClaude Opus 5 committed 2026-09-21 22:56:29 +03:00
1 parent 6000949371
commit e004b50acd
2 files changed
+46 -15

No files matched your search

+1 -6
View File
@@ -331,18 +331,13 @@ crocus_create_context(struct pipe_screen *pscreen, void *priv, unsigned flags)
if (ice->batch_count > 1)
screen->vtbl.init_compute_context(&ice->batches[CROCUS_BATCH_COMPUTE]);
if (!(flags & PIPE_CONTEXT_PREFER_THREADED)) {
fprintf(stderr, "CROCUS unthreaded context: get_compute_state_info=%p, set_global_binding=%p\n",
ctx->get_compute_state_info, ctx->set_global_binding);
if (!(flags & PIPE_CONTEXT_PREFER_THREADED))
return ctx;
}
struct pipe_context *tc = threaded_context_create(ctx, &screen->transfer_pool,
crocus_replace_buffer_storage,
NULL, /* TODO: asynchronous flushes? */
&ice->thrctx);
fprintf(stderr, "CROCUS threaded context: get_compute_state_info=%p, set_global_binding=%p\n",
tc->get_compute_state_info, tc->set_global_binding);
return tc;
}