xf86-video-intel: 2 commits - src/sna/gen3_render.c src/sna/sna_dri2.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Jun 25 03:49:28 PDT 2015
src/sna/gen3_render.c | 73 +++++++++++++++++++++++++++++++++++++++++++++-----
src/sna/sna_dri2.c | 25 +++++++++++++----
2 files changed, 86 insertions(+), 12 deletions(-)
New commits:
commit f97c6ba9dcb4488615a8f8cc7ad5790cc61f5a9e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 25 11:47:25 2015 +0100
sna/dri2: Track original allocated size for copies
When we record the next scanout for display after the following vblank,
note the size of the allocation as well as its name and bo et al.
References: https://bugs.freedesktop.org/show_bug.cgi?id=70461#c105
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 54acdbf..8edc381 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -73,6 +73,7 @@ struct sna_dri2_private {
struct copy {
struct kgem_bo *bo;
uint32_t name;
+ uint32_t size;
uint32_t flags;
} copy;
DRI2Buffer2Ptr proxy;
@@ -205,9 +206,9 @@ static struct dri2_window *dri2_window(WindowPtr win)
static void
sna_dri2_cache_bo(struct sna *sna,
DrawablePtr draw,
- DRI2BufferPtr buffer,
struct kgem_bo *bo,
uint32_t name,
+ uint32_t size,
uint32_t flags)
{
struct dri_bo *c;
@@ -224,10 +225,10 @@ sna_dri2_cache_bo(struct sna *sna,
goto err;
}
- if ((draw->height << 16 | draw->width) != get_private(buffer)->size) {
+ if ((draw->height << 16 | draw->width) != size) {
DBG(("%s: wrong size [%dx%d], releasing handle\n",
__FUNCTION__,
- get_private(buffer)->size & 0xffff, get_private(buffer)->size >> 16,
+ size & 0xffff, size >> 16,
bo->handle));
goto err;
}
@@ -822,9 +823,10 @@ static void _sna_dri2_destroy_buffer(struct sna *sna,
if (private->copy.bo) {
assert(private->copy.bo->active_scanout);
private->copy.bo->active_scanout--;
- sna_dri2_cache_bo(sna, draw, buffer,
+ sna_dri2_cache_bo(sna, draw,
private->copy.bo,
private->copy.name,
+ private->copy.size,
private->copy.flags);
}
@@ -1720,6 +1722,7 @@ sna_dri2_flip(struct sna_dri2_event *info)
assert(sna_pixmap_get_buffer(info->sna->front) == info->front);
assert(get_drawable_pixmap(info->draw)->drawable.height * bo->pitch <= kgem_bo_size(bo));
+ assert(get_private(info->front)->size == get_private(info->back)->size);
assert(bo->refcnt);
if (info->sna->mode.flip_active) {
@@ -2125,6 +2128,7 @@ sna_dri2_xchg(DrawablePtr draw, DRI2BufferPtr front, DRI2BufferPtr back)
__FUNCTION__, back_bo->handle, back_bo->pitch, kgem_bo_size(back_bo), back_bo->refcnt, back_bo->active_scanout));
DBG(("%s: front_bo handle=%d, pitch=%d, size=%d, ref=%d, active_scanout?=%d\n",
__FUNCTION__, front_bo->handle, front_bo->pitch, kgem_bo_size(front_bo), front_bo->refcnt, front_bo->active_scanout));
+ assert(can_xchg(to_sna_from_drawable(draw), draw, front, back));
assert(front_bo != back_bo);
assert(front_bo->refcnt);
@@ -2156,6 +2160,9 @@ sna_dri2_xchg(DrawablePtr draw, DRI2BufferPtr front, DRI2BufferPtr back)
assert(front_bo->refcnt);
assert(back_bo->refcnt);
+ assert(front_bo->pitch == get_private(front)->bo->pitch);
+ assert(back_bo->pitch == get_private(back)->bo->pitch);
+
assert(get_private(front)->bo == sna_pixmap(pixmap)->gpu_bo);
}
@@ -2174,6 +2181,7 @@ static void sna_dri2_xchg_crtc(struct sna *sna, DrawablePtr draw, xf86CrtcPtr cr
get_window_pixmap(win)->drawable.serialNumber,
get_window_pixmap(win)->drawable.width,
get_window_pixmap(win)->drawable.height));
+ assert(can_xchg_crtc(to_sna_from_drawable(draw), draw, crtc, front, back));
if (APPLY_DAMAGE) {
DBG(("%s: marking drawable as damaged\n", __FUNCTION__));
@@ -2240,6 +2248,7 @@ static void sna_dri2_xchg_crtc(struct sna *sna, DrawablePtr draw, xf86CrtcPtr cr
if (bo != NULL) {
get_private(back)->bo = bo;
back->pitch = bo->pitch;
+ get_private(back)->size = draw->height << 16 | draw->width;
back->name = kgem_bo_flink(&sna->kgem, bo);
}
if (back->name == 0) {
@@ -2347,10 +2356,12 @@ static void chain_swap(struct sna_dri2_event *chain)
tmp.bo = get_private(chain->back)->bo;
tmp.name = chain->back->name;
+ tmp.size = get_private(chain->back)->size;
tmp.flags = chain->back->flags;
get_private(chain->back)->bo = get_private(chain->back)->copy.bo;
chain->back->name = get_private(chain->back)->copy.name;
+ get_private(chain->back)->size = get_private(chain->back)->copy.size;
chain->back->flags = get_private(chain->back)->copy.flags;
chain->back->pitch = get_private(chain->back)->copy.bo->pitch;
}
@@ -2370,6 +2381,7 @@ static void chain_swap(struct sna_dri2_event *chain)
if (get_private(chain->back)->copy.bo == get_private(chain->back)->bo) {
get_private(chain->back)->bo = tmp.bo;
chain->back->name = tmp.name;
+ get_private(chain->back)->size = tmp.size;
chain->back->flags = tmp.flags;
chain->back->pitch = tmp.bo->pitch;
@@ -2380,6 +2392,7 @@ static void chain_swap(struct sna_dri2_event *chain)
get_private(chain->back)->copy.bo = ref(get_private(chain->back)->bo);
get_private(chain->back)->copy.name = chain->back->name;
+ get_private(chain->back)->copy.size = get_private(chain->back)->size;
get_private(chain->back)->copy.flags = chain->back->flags;
DBG(("%s: adding active marker [%d] to handle=%d\n",
__FUNCTION__,
@@ -2636,13 +2649,15 @@ sna_dri2_immediate_blit(struct sna *sna,
if (get_private(info->back)->copy.bo) {
assert(get_private(info->back)->copy.bo->active_scanout);
get_private(info->back)->copy.bo->active_scanout--;
- sna_dri2_cache_bo(sna, info->draw, info->back,
+ sna_dri2_cache_bo(sna, info->draw,
get_private(info->back)->copy.bo,
get_private(info->back)->copy.name,
+ get_private(info->back)->copy.size,
get_private(info->back)->copy.flags);
}
get_private(info->back)->copy.bo = ref(get_private(info->back)->bo);
get_private(info->back)->copy.name = info->back->name;
+ get_private(info->back)->copy.size = get_private(info->back)->size;
get_private(info->back)->copy.flags = info->back->flags;
get_private(info->back)->bo->active_scanout++;
}
commit 990499c6d98306b4eafeb6405ed209988da301a6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jun 24 14:36:32 2015 +0100
sna/gen3: Allow gen3 to use smaller vbo if already available in cache
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index c3134f4..3c87b36 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -531,6 +531,7 @@ gen3_emit_composite_primitive_affine_gradient(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + r->width;
v[1] = dst_y + r->height;
@@ -596,6 +597,7 @@ gen3_emit_composite_primitive_identity_source(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x + op->dst.x;
v[0] = v[4] + w;
@@ -643,6 +645,7 @@ gen3_emit_composite_primitive_identity_source_no_offset(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x;
v[9] = r->dst.y;
@@ -693,6 +696,7 @@ gen3_emit_composite_primitive_affine_source(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + r->width;
v[5] = v[1] = dst_y + r->height;
@@ -756,6 +760,7 @@ gen3_emit_composite_primitive_constant_identity_mask(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x + op->dst.x;
v[0] = v[4] + w;
@@ -781,6 +786,7 @@ gen3_emit_composite_primitive_constant_identity_mask_no_offset(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x;
v[9] = r->dst.y;
@@ -817,6 +823,7 @@ gen3_emit_composite_primitive_identity_source_mask(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 18;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + w;
v[1] = dst_y + h;
@@ -862,6 +869,7 @@ gen3_emit_composite_primitive_affine_source_mask(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 18;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + w;
v[1] = dst_y + h;
@@ -978,6 +986,7 @@ gen3_emit_composite_primitive_constant__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 6;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[4] = v[2] = r->dst.x + op->dst.x;
v[5] = r->dst.y + op->dst.y;
@@ -1013,6 +1022,7 @@ gen3_emit_composite_primitive_identity_gradient__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
x = r->dst.x + op->dst.x;
y = r->dst.y + op->dst.y;
@@ -1067,6 +1077,7 @@ gen3_emit_composite_primitive_affine_gradient__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + r->width;
v[1] = dst_y + r->height;
@@ -1132,6 +1143,7 @@ gen3_emit_composite_primitive_identity_source__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x + op->dst.x;
v[0] = v[4] + w;
@@ -1179,6 +1191,7 @@ gen3_emit_composite_primitive_identity_source_no_offset__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x;
v[9] = r->dst.y;
@@ -1229,6 +1242,7 @@ gen3_emit_composite_primitive_affine_source__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + r->width;
v[5] = v[1] = dst_y + r->height;
@@ -1292,6 +1306,7 @@ gen3_emit_composite_primitive_constant_identity_mask__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x + op->dst.x;
v[0] = v[4] + w;
@@ -1317,6 +1332,7 @@ gen3_emit_composite_primitive_constant_identity_mask_no_offset__sse2(struct sna
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 12;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[8] = v[4] = r->dst.x;
v[9] = r->dst.y;
@@ -1353,6 +1369,7 @@ gen3_emit_composite_primitive_identity_source_mask__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 18;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + w;
v[1] = dst_y + h;
@@ -1398,6 +1415,7 @@ gen3_emit_composite_primitive_affine_source_mask__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 18;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = dst_x + w;
v[1] = dst_y + h;
@@ -2233,6 +2251,7 @@ static void gen3_vertex_flush(struct sna *sna)
static int gen3_vertex_finish(struct sna *sna)
{
struct kgem_bo *bo;
+ unsigned hint, size;
DBG(("%s: used=%d/%d, vbo active? %d\n",
__FUNCTION__, sna->render.vertex_used, sna->render.vertex_size,
@@ -2243,6 +2262,7 @@ static int gen3_vertex_finish(struct sna *sna)
sna_vertex_wait__locked(&sna->render);
+ hint = CREATE_GTT_MAP;
bo = sna->render.vbo;
if (bo) {
DBG(("%s: reloc = %d\n", __FUNCTION__,
@@ -2260,17 +2280,29 @@ static int gen3_vertex_finish(struct sna *sna)
sna->render.vbo = NULL;
kgem_bo_destroy(&sna->kgem, bo);
+ hint |= CREATE_CACHED | CREATE_NO_THROTTLE;
}
+ size = 256*1024;
sna->render.vertices = NULL;
- sna->render.vbo = kgem_create_linear(&sna->kgem,
- 256*1024, CREATE_GTT_MAP);
- if (sna->render.vbo)
+ sna->render.vbo = kgem_create_linear(&sna->kgem, size, hint);
+ while (sna->render.vbo == NULL && size > sizeof(sna->render.vertex_data)) {
+ size /= 2;
+ sna->render.vbo = kgem_create_linear(&sna->kgem, size, hint);
+ }
+ if (sna->render.vbo == NULL)
+ sna->render.vbo = kgem_create_linear(&sna->kgem,
+ 256*1024, CREATE_GTT_MAP);
+ if (sna->render.vbo &&
+ kgem_check_bo(&sna->kgem, sna->render.vbo, NULL))
sna->render.vertices = kgem_bo_map(&sna->kgem, sna->render.vbo);
if (sna->render.vertices == NULL) {
- if (sna->render.vbo)
+ if (sna->render.vbo) {
kgem_bo_destroy(&sna->kgem, sna->render.vbo);
- sna->render.vbo = NULL;
+ sna->render.vbo = NULL;
+ }
+ sna->render.vertices = sna->render.vertex_data;
+ sna->render.vertex_size = ARRAY_SIZE(sna->render.vertex_data);
return 0;
}
assert(sna->render.vbo->snoop == false);
@@ -2280,8 +2312,14 @@ static int gen3_vertex_finish(struct sna *sna)
sna->render.vertex_data,
sizeof(float)*sna->render.vertex_used);
}
- sna->render.vertex_size = 64 * 1024 - 1;
- return sna->render.vertex_size - sna->render.vertex_used;
+
+ size = __kgem_bo_size(sna->render.vbo)/4;
+ if (size >= UINT16_MAX)
+ size = UINT16_MAX - 1;
+ assert(size > sna->render.vertex_used);
+
+ sna->render.vertex_size = size;
+ return size - sna->render.vertex_used;
}
static void gen3_vertex_close(struct sna *sna)
@@ -2580,6 +2618,7 @@ gen3_render_composite_boxes(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += nbox_this_time * op->floats_per_rect;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
op->emit_boxes(op, box, nbox_this_time, v);
box += nbox_this_time;
@@ -2604,6 +2643,7 @@ gen3_render_composite_boxes__thread(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += nbox_this_time * op->floats_per_rect;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
sna_vertex_acquire__locked(&sna->render);
sna_vertex_unlock(&sna->render);
@@ -3862,6 +3902,7 @@ gen3_emit_composite_spans_primitive_zero(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 6;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -3901,6 +3942,7 @@ gen3_emit_composite_spans_primitive_zero_no_offset(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 6;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = box->x2;
v[3] = v[1] = box->y2;
@@ -3932,6 +3974,7 @@ gen3_emit_composite_spans_primitive_constant(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[6] = v[3] = op->base.dst.x + box->x1;
@@ -3966,6 +4009,7 @@ gen3_emit_composite_spans_primitive_constant_no_offset(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = box->x2;
v[6] = v[3] = box->x1;
@@ -3999,6 +4043,7 @@ gen3_emit_composite_spans_primitive_identity_source(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4060,6 +4105,7 @@ gen3_emit_composite_spans_primitive_affine_source(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[6] = v[1] = op->base.dst.y + box->y2;
@@ -4125,6 +4171,7 @@ gen3_emit_composite_spans_primitive_identity_gradient(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4184,6 +4231,7 @@ gen3_emit_composite_spans_primitive_constant__sse2(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[6] = v[3] = op->base.dst.x + box->x1;
@@ -4229,6 +4277,7 @@ gen3_render_composite_spans_constant_box__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = box->x2;
v[6] = v[3] = box->x1;
@@ -4259,6 +4308,7 @@ gen3_render_composite_spans_constant_thread__sse2__boxes(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += nbox_this_time * 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
sna_vertex_acquire__locked(&sna->render);
sna_vertex_unlock(&sna->render);
@@ -4287,6 +4337,7 @@ gen3_emit_composite_spans_primitive_constant__sse2__no_offset(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = box->x2;
v[6] = v[3] = box->x1;
@@ -4320,6 +4371,7 @@ gen3_emit_composite_spans_primitive_identity_source__sse2(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4380,6 +4432,7 @@ gen3_emit_composite_spans_primitive_affine_source__sse2(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[6] = v[1] = op->base.dst.y + box->y2;
@@ -4445,6 +4498,7 @@ gen3_emit_composite_spans_primitive_identity_gradient__sse2(struct sna *sna,
{
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4504,6 +4558,7 @@ gen3_emit_composite_spans_primitive_affine_gradient__sse2(struct sna *sna,
PictTransform *transform = op->base.src.transform;
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4577,6 +4632,7 @@ gen3_emit_composite_spans_primitive_affine_gradient(struct sna *sna,
PictTransform *transform = op->base.src.transform;
float *v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 15;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = op->base.dst.x + box->x2;
v[1] = op->base.dst.y + box->y2;
@@ -4676,6 +4732,7 @@ gen3_render_composite_spans_constant_box(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
v[0] = box->x2;
v[6] = v[3] = box->x1;
@@ -4706,6 +4763,7 @@ gen3_render_composite_spans_constant_thread_boxes(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += nbox_this_time * 9;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
sna_vertex_acquire__locked(&sna->render);
sna_vertex_unlock(&sna->render);
@@ -4795,6 +4853,7 @@ gen3_render_composite_spans_boxes__thread(struct sna *sna,
v = sna->render.vertices + sna->render.vertex_used;
sna->render.vertex_used += nbox_this_time * op->base.floats_per_rect;
+ assert(sna->render.vertex_used <= sna->render.vertex_size);
sna_vertex_acquire__locked(&sna->render);
sna_vertex_unlock(&sna->render);
More information about the xorg-commit
mailing list