sna: Fix off-by-one in checking available execbuffer slots
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
663e387b35
commit
613902b60e
|
|
@ -524,7 +524,7 @@ gen2_get_batch(struct sna *sna)
|
|||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
}
|
||||
|
||||
if (sna->kgem.nreloc + 3 > KGEM_RELOC_SIZE(&sna->kgem)) {
|
||||
if (!kgem_check_reloc(&sna->kgem, 3)) {
|
||||
DBG(("%s: flushing batch: reloc %d >= %d\n",
|
||||
__FUNCTION__,
|
||||
sna->kgem.nreloc + 3,
|
||||
|
|
@ -533,7 +533,7 @@ gen2_get_batch(struct sna *sna)
|
|||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
}
|
||||
|
||||
if (sna->kgem.nexec + 3 > KGEM_EXEC_SIZE(&sna->kgem)) {
|
||||
if (!kgem_check_exec(&sna->kgem, 3)) {
|
||||
DBG(("%s: flushing batch: exec %d >= %d\n",
|
||||
__FUNCTION__,
|
||||
sna->kgem.nexec + 1,
|
||||
|
|
|
|||
|
|
@ -1314,7 +1314,7 @@ gen3_get_batch(struct sna *sna)
|
|||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
}
|
||||
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - MAX_OBJECTS) {
|
||||
if (!kgem_check_reloc(&sna->kgem, MAX_OBJECTS)) {
|
||||
DBG(("%s: flushing batch: reloc %d >= %d\n",
|
||||
__FUNCTION__,
|
||||
sna->kgem.nreloc,
|
||||
|
|
@ -1323,7 +1323,7 @@ gen3_get_batch(struct sna *sna)
|
|||
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
|
||||
}
|
||||
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - MAX_OBJECTS - 1) {
|
||||
if (!kgem_check_exec(&sna->kgem, MAX_OBJECTS)) {
|
||||
DBG(("%s: flushing batch: exec %d >= %d\n",
|
||||
__FUNCTION__,
|
||||
sna->kgem.nexec,
|
||||
|
|
@ -1792,9 +1792,9 @@ static int gen3_get_rectangles__flush(struct sna *sna,
|
|||
{
|
||||
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 105: 5))
|
||||
return 0;
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 2)
|
||||
if (!kgem_check_exec(&sna->kgem, 1))
|
||||
return 0;
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_reloc(&sna->kgem, 1))
|
||||
return 0;
|
||||
|
||||
if (op->need_magic_ca_pass && sna->render.vbo)
|
||||
|
|
|
|||
|
|
@ -1157,9 +1157,9 @@ static int gen4_get_rectangles__flush(struct sna *sna,
|
|||
{
|
||||
if (!kgem_check_batch(&sna->kgem, 25))
|
||||
return 0;
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_exec(&sna->kgem, 1))
|
||||
return 0;
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_reloc(&sna->kgem, 1))
|
||||
return 0;
|
||||
|
||||
if (op->need_magic_ca_pass && sna->render.vbo)
|
||||
|
|
|
|||
|
|
@ -1161,9 +1161,9 @@ static int gen5_get_rectangles__flush(struct sna *sna,
|
|||
{
|
||||
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 20 : 6))
|
||||
return 0;
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_exec(&sna->kgem, 1))
|
||||
return 0;
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
|
||||
if (!kgem_check_reloc(&sna->kgem, 2))
|
||||
return 0;
|
||||
|
||||
if (op->need_magic_ca_pass && sna->render.vbo)
|
||||
|
|
|
|||
|
|
@ -1543,9 +1543,9 @@ static int gen6_get_rectangles__flush(struct sna *sna,
|
|||
{
|
||||
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 65 : 5))
|
||||
return 0;
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_exec(&sna->kgem, 1))
|
||||
return 0;
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
|
||||
if (!kgem_check_reloc(&sna->kgem, 2))
|
||||
return 0;
|
||||
|
||||
if (op->need_magic_ca_pass && sna->render.vbo)
|
||||
|
|
|
|||
|
|
@ -1647,9 +1647,9 @@ static int gen7_get_rectangles__flush(struct sna *sna,
|
|||
{
|
||||
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 65 : 6))
|
||||
return 0;
|
||||
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
|
||||
if (!kgem_check_exec(&sna->kgem, 1))
|
||||
return 0;
|
||||
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
|
||||
if (!kgem_check_reloc(&sna->kgem, 2))
|
||||
return 0;
|
||||
|
||||
if (op->need_magic_ca_pass && sna->render.vbo)
|
||||
|
|
|
|||
|
|
@ -330,7 +330,8 @@ static inline bool kgem_check_batch_with_surfaces(struct kgem *kgem,
|
|||
int num_surfaces)
|
||||
{
|
||||
return (int)(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED) <= (int)(kgem->surface - num_surfaces*8) &&
|
||||
kgem_check_reloc(kgem, num_surfaces);
|
||||
kgem_check_reloc(kgem, num_surfaces) &&
|
||||
kgem_check_exec(kgem, num_surfaces);
|
||||
}
|
||||
|
||||
static inline uint32_t *kgem_get_batch(struct kgem *kgem, int num_dwords)
|
||||
|
|
|
|||
Loading…
Reference in New Issue