mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 02:20:11 +01:00
radv/winsys: Fail early on overgrown cs.
When !use_ib_bos, we can't easily chain ibs one to another. If the required cs size grows over 1Mi - 8 dwords just fail the cs so that we won't assert-fail in radv_amdgpu_winsys_cs_submit later on. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
493237d4ee
commit
36cb5508e8
1 changed files with 14 additions and 4 deletions
|
|
@ -187,12 +187,22 @@ static void radv_amdgpu_cs_grow(struct radeon_winsys_cs *_cs, size_t min_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cs->ws->use_ib_bos) {
|
if (!cs->ws->use_ib_bos) {
|
||||||
uint64_t ib_size = MAX2((cs->base.cdw + min_size) * 4 + 16,
|
const uint64_t limit_dws = 0xffff8;
|
||||||
cs->base.max_dw * 4 * 2);
|
uint64_t ib_dws = MAX2(cs->base.cdw + min_size,
|
||||||
uint32_t *new_buf = realloc(cs->base.buf, ib_size);
|
MIN2(cs->base.max_dw * 2, limit_dws));
|
||||||
|
|
||||||
|
/* The total ib size cannot exceed limit_dws dwords. */
|
||||||
|
if (ib_dws > limit_dws)
|
||||||
|
{
|
||||||
|
cs->failed = true;
|
||||||
|
cs->base.cdw = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t *new_buf = realloc(cs->base.buf, ib_dws * 4);
|
||||||
if (new_buf) {
|
if (new_buf) {
|
||||||
cs->base.buf = new_buf;
|
cs->base.buf = new_buf;
|
||||||
cs->base.max_dw = ib_size / 4;
|
cs->base.max_dw = ib_dws;
|
||||||
} else {
|
} else {
|
||||||
cs->failed = true;
|
cs->failed = true;
|
||||||
cs->base.cdw = 0;
|
cs->base.cdw = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue