sna/kgem: Check all operation bo in a single amalgamation
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
ccf6547a8f
commit
46fedf0cf1
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue