diff options
Diffstat (limited to 'src/gallium/drivers/panfrost')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_job.c | 19 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.h | 3 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index 3df1cc226ee..ea6bd022511 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -940,6 +940,25 @@ panfrost_batch_submit(struct panfrost_batch *batch) if (ret) fprintf(stderr, "panfrost_batch_submit failed: %d\n", ret); + /* We must reset the damage info of our render targets here even + * though a damage reset normally happens when the DRI layer swaps + * buffers. That's because there can be implicit flushes the GL + * app is not aware of, and those might impact the damage region: if + * part of the damaged portion is drawn during those implicit flushes, + * you have to reload those areas before next draws are pushed, and + * since the driver can't easily know what's been modified by the draws + * it flushed, the easiest solution is to reload everything. + */ + for (unsigned i = 0; i < batch->key.nr_cbufs; i++) { + struct panfrost_resource *res; + + if (!batch->key.cbufs[i]) + continue; + + res = pan_resource(batch->key.cbufs[i]->texture); + panfrost_resource_reset_damage(res); + } + out: panfrost_freeze_batch(batch); panfrost_free_batch(batch); diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index c3fb12777b7..df0fc9e5cac 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -48,7 +48,7 @@ #include "pan_util.h" #include "pan_tiling.h" -static void +void panfrost_resource_reset_damage(struct panfrost_resource *pres) { /* We set the damage extent to the full resource size but keep the diff --git a/src/gallium/drivers/panfrost/pan_resource.h b/src/gallium/drivers/panfrost/pan_resource.h index 22404a609e1..a9c4d7cc539 100644 --- a/src/gallium/drivers/panfrost/pan_resource.h +++ b/src/gallium/drivers/panfrost/pan_resource.h @@ -136,6 +136,9 @@ panfrost_blit_wallpaper(struct panfrost_context *ctx, struct pipe_box *box); void +panfrost_resource_reset_damage(struct panfrost_resource *pres); + +void panfrost_resource_set_damage_region(struct pipe_screen *screen, struct pipe_resource *res, unsigned int nrects, |