summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-09-25 09:38:43 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-09-25 09:38:43 +0100
commit46fedf0cf1a413381109c1de34619e84ad614b8a (patch)
tree1c10f9148c7e051dc45f1485ace2735d55734f2d
parentccf6547a8f1b77ddf4e79bdefe2a0878c0e9b256 (diff)
sna/kgem: Check all operation bo in a single amalgamation
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen2_render.c26
-rw-r--r--src/sna/gen3_render.c26
-rw-r--r--src/sna/gen4_render.c24
-rw-r--r--src/sna/gen5_render.c37
-rw-r--r--src/sna/gen6_render.c24
-rw-r--r--src/sna/gen7_render.c24
-rw-r--r--src/sna/kgem.c27
-rw-r--r--src/sna/kgem.h2
8 files changed, 77 insertions, 113 deletions
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 981f6af7..43a7cad1 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1347,11 +1347,9 @@ gen2_render_composite(struct sna *sna,
tmp->boxes = gen2_render_composite_boxes;
tmp->done = gen2_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo)) {
@@ -1720,9 +1718,9 @@ gen2_render_composite_spans(struct sna *sna,
tmp->boxes = gen2_render_composite_spans_boxes;
tmp->done = gen2_render_composite_spans_done;
- if (!kgem_check_bo(&sna->kgem, tmp->base.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->base.src.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->base.dst.bo, tmp->base.src.bo,
+ NULL))
kgem_submit(&sna->kgem);
gen2_emit_composite_spans_state(sna, tmp);
@@ -1876,7 +1874,7 @@ gen2_render_fill_boxes(struct sna *sna,
tmp.dst.bo = dst_bo;
tmp.floats_per_vertex = 2;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen2_emit_fill_composite_state(sna, &tmp, pixel);
@@ -1995,7 +1993,7 @@ gen2_render_fill(struct sna *sna, uint8_t alu,
tmp->base.u.gen2.pixel =
sna_rgba_for_color(color, dst->drawable.depth);
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
tmp->blt = gen2_render_fill_blt;
@@ -2119,9 +2117,7 @@ gen2_render_copy_boxes(struct sna *sna, uint8_t alu,
box, n);
}
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2263,9 +2259,7 @@ gen2_render_copy(struct sna *sna, uint8_t alu,
tmp->base.floats_per_vertex = 4;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 2383e782..bac03533 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2338,11 +2338,9 @@ gen3_render_composite(struct sna *sna,
tmp->boxes = gen3_render_composite_boxes;
tmp->done = gen3_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo)) {
@@ -2743,9 +2741,9 @@ gen3_render_composite_spans(struct sna *sna,
tmp->boxes = gen3_render_composite_spans_boxes;
tmp->done = gen3_render_composite_spans_done;
- if (!kgem_check_bo(&sna->kgem, tmp->base.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->base.src.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->base.dst.bo, tmp->base.src.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->base.src.bo)) {
@@ -3283,9 +3281,7 @@ gen3_render_copy_boxes(struct sna *sna, uint8_t alu,
box, n);
}
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -3433,9 +3429,7 @@ gen3_render_copy(struct sna *sna, uint8_t alu,
tmp->base.floats_per_vertex = 4;
tmp->base.mask.u.gen3.type = SHADER_NONE;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -3552,7 +3546,7 @@ gen3_render_fill_boxes(struct sna *sna,
tmp.src.u.gen3.type = op == PictOpClear ? SHADER_ZERO : SHADER_CONSTANT;
tmp.src.u.gen3.mode = pixel;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen3_emit_composite_state(sna, &tmp);
@@ -3654,7 +3648,7 @@ gen3_render_fill(struct sna *sna, uint8_t alu,
tmp->base.src.u.gen3.mode =
sna_rgba_for_color(color, dst->drawable.depth);
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
tmp->blt = gen3_render_fill_blt;
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 5d115a59..3c133be2 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1637,9 +1637,7 @@ gen4_render_video(struct sna *sna,
tmp.floats_per_vertex = 3;
tmp.u.gen4.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, tmp.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, frame->bo))
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
kgem_submit(&sna->kgem);
if (!kgem_bo_is_dirty(frame->bo))
@@ -2034,11 +2032,9 @@ gen4_render_composite(struct sna *sna,
tmp->boxes = gen4_render_composite_boxes;
tmp->done = gen4_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo))
@@ -2209,9 +2205,7 @@ gen4_render_copy_boxes(struct sna *sna, uint8_t alu,
tmp.u.gen4.wm_kernel = WM_KERNEL;
tmp.u.gen4.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2309,9 +2303,7 @@ gen4_render_copy(struct sna *sna, uint8_t alu,
op->base.u.gen4.wm_kernel = WM_KERNEL;
op->base.u.gen4.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2464,7 +2456,7 @@ gen4_render_fill_boxes(struct sna *sna,
tmp.u.gen4.wm_kernel = WM_KERNEL;
tmp.u.gen4.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen4_fill_bind_surfaces(sna, &tmp);
@@ -2547,7 +2539,7 @@ gen4_render_fill(struct sna *sna, uint8_t alu,
op->base.u.gen4.wm_kernel = WM_KERNEL;
op->base.u.gen4.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen4_fill_bind_surfaces(sna, &op->base);
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index a4b08d0a..ad27d908 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -720,7 +720,7 @@ gen5_bind_bo(struct sna *sna,
DBG(("[%x] bind bo(handle=%d, addr=%d), format=%d, width=%d, height=%d, pitch=%d, tiling=%d -> %s\n",
offset, bo->handle, ss[1],
- format, width, height, bo->pitch, bo->tiling,
+ format, width, height, bo->pitch, bo->tiling,
domains & 0xffff ? "render" : "sampler"));
return offset;
@@ -1664,9 +1664,7 @@ gen5_render_video(struct sna *sna,
tmp.is_affine = TRUE;
tmp.floats_per_vertex = 3;
- if (!kgem_check_bo(&sna->kgem, tmp.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, frame->bo))
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
kgem_submit(&sna->kgem);
if (!kgem_bo_is_dirty(frame->bo))
@@ -2045,11 +2043,8 @@ gen5_render_composite(struct sna *sna,
tmp->boxes = gen5_render_composite_boxes;
tmp->done = gen5_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo))
@@ -2159,9 +2154,7 @@ gen5_render_copy_boxes(struct sna *sna, uint8_t alu,
tmp.u.gen5.wm_kernel = WM_KERNEL;
tmp.u.gen5.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2295,9 +2288,7 @@ gen5_render_copy(struct sna *sna, uint8_t alu,
op->base.u.gen5.wm_kernel = WM_KERNEL;
op->base.u.gen5.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2368,17 +2359,17 @@ gen5_render_fill_boxes(struct sna *sna,
dst->drawable.height > 8192 ||
!gen5_check_dst_format(format)) {
uint8_t alu = GXcopy;
+ uint8_t _op = op;
- if (op == PictOpClear) {
+ if (_op == PictOpClear) {
alu = GXclear;
- pixel = 0;
- op = PictOpSrc;
+ _op = PictOpSrc;
}
- if (op == PictOpOver && color->alpha >= 0xff00)
- op = PictOpSrc;
+ if (_op == PictOpOver && color->alpha >= 0xff00)
+ _op = PictOpSrc;
- if (op == PictOpSrc &&
+ if (_op == PictOpSrc &&
sna_get_pixel_from_rgba(&pixel,
color->red,
color->green,
@@ -2423,7 +2414,7 @@ gen5_render_fill_boxes(struct sna *sna,
tmp.u.gen5.wm_kernel = WM_KERNEL;
tmp.u.gen5.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen5_fill_bind_surfaces(sna, &tmp);
@@ -2542,7 +2533,7 @@ gen5_render_fill(struct sna *sna, uint8_t alu,
op->base.u.gen5.wm_kernel = WM_KERNEL;
op->base.u.gen5.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen5_fill_bind_surfaces(sna, &op->base);
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 91f59002..044704d3 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1838,9 +1838,7 @@ gen6_render_video(struct sna *sna,
tmp.u.gen6.nr_inputs = 1;
tmp.u.gen6.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, tmp.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, frame->bo))
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(frame->bo))
@@ -2222,11 +2220,9 @@ gen6_render_composite(struct sna *sna,
tmp->boxes = gen6_render_composite_boxes;
tmp->done = gen6_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo))
@@ -2355,9 +2351,7 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
tmp.u.gen6.nr_inputs = 1;
tmp.u.gen6.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2503,9 +2497,7 @@ gen6_render_copy(struct sna *sna, uint8_t alu,
op->base.u.gen6.nr_inputs = 1;
op->base.u.gen6.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2642,7 +2634,7 @@ gen6_render_fill_boxes(struct sna *sna,
tmp.u.gen6.nr_inputs = 1;
tmp.u.gen6.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen6_emit_fill_state(sna, &tmp);
@@ -2768,7 +2760,7 @@ gen6_render_fill(struct sna *sna, uint8_t alu,
op->base.u.gen6.nr_inputs = 1;
op->base.u.gen6.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen6_emit_fill_state(sna, &op->base);
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 709b02ea..a7bfc81f 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1970,9 +1970,7 @@ gen7_render_video(struct sna *sna,
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, tmp.dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, frame->bo))
+ if (!kgem_check_bo(&sna->kgem, tmp.dst.bo, frame->bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(frame->bo))
@@ -2355,11 +2353,9 @@ gen7_render_composite(struct sna *sna,
tmp->boxes = gen7_render_composite_boxes;
tmp->done = gen7_render_composite_done;
- if (!kgem_check_bo(&sna->kgem, tmp->dst.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->src.bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, tmp->mask.bo))
+ if (!kgem_check_bo(&sna->kgem,
+ tmp->dst.bo, tmp->src.bo, tmp->mask.bo,
+ NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(tmp->src.bo) || kgem_bo_is_dirty(tmp->mask.bo))
@@ -2490,9 +2486,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2640,9 +2634,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
op->base.u.gen7.nr_inputs = 1;
op->base.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
- kgem_submit(&sna->kgem);
- if (!kgem_check_bo(&sna->kgem, src_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
kgem_submit(&sna->kgem);
if (kgem_bo_is_dirty(src_bo))
@@ -2785,7 +2777,7 @@ gen7_render_fill_boxes(struct sna *sna,
tmp.u.gen7.nr_inputs = 1;
tmp.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen7_emit_fill_state(sna, &tmp);
@@ -2912,7 +2904,7 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
op->base.u.gen7.nr_inputs = 1;
op->base.u.gen7.ve_id = 1;
- if (!kgem_check_bo(&sna->kgem, dst_bo))
+ if (!kgem_check_bo(&sna->kgem, dst_bo, NULL))
kgem_submit(&sna->kgem);
gen7_emit_fill_state(sna, &op->base);
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index dcfcbbd8..50374250 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1209,7 +1209,7 @@ search_linear_cache(struct kgem *kgem, unsigned int size, bool use_active)
use_active ? "active" : "inactive"));
assert(bo->refcnt == 0);
assert(bo->reusable);
- assert(use_active || !kgem_busy(kgem, bo->handle));
+ //assert(use_active || !kgem_busy(kgem, bo->handle));
return bo;
}
@@ -1562,21 +1562,30 @@ void __kgem_flush(struct kgem *kgem, struct kgem_bo *bo)
kgem_busy(kgem, bo->handle);
}
-bool kgem_check_bo(struct kgem *kgem, struct kgem_bo *bo)
+bool kgem_check_bo(struct kgem *kgem, ...)
{
- if (bo == NULL)
- return true;
-
- if (bo->exec)
- return true;
+ va_list ap;
+ struct kgem_bo *bo;
+ int num_exec = 0;
+ int size = 0;
if (kgem->aperture > kgem->aperture_low)
return false;
- if (bo->size + kgem->aperture > kgem->aperture_high)
+ va_start(ap, kgem);
+ while ((bo = va_arg(ap, struct kgem_bo *))) {
+ if (bo->exec)
+ continue;
+
+ size += bo->size;
+ num_exec++;
+ }
+ va_end(ap);
+
+ if (size + kgem->aperture > kgem->aperture_high)
return false;
- if (kgem->nexec == KGEM_EXEC_SIZE(kgem))
+ if (kgem->nexec + num_exec >= KGEM_EXEC_SIZE(kgem))
return false;
return true;
diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 6c8883c9..8f0c8382 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -271,7 +271,7 @@ static inline void kgem_advance_batch(struct kgem *kgem, int num_dwords)
kgem->nbatch += num_dwords;
}
-bool kgem_check_bo(struct kgem *kgem, struct kgem_bo *bo);
+bool kgem_check_bo(struct kgem *kgem, ...) __attribute__((sentinel(NULL)));
bool kgem_check_bo_fenced(struct kgem *kgem, ...) __attribute__((sentinel(NULL)));
void _kgem_add_bo(struct kgem *kgem, struct kgem_bo *bo);