diff options
author | Boris Brezillon <[email protected]> | 2019-10-07 12:24:51 +0200 |
---|---|---|
committer | Boris Brezillon <[email protected]> | 2019-10-07 12:24:51 +0200 |
commit | 8d0830de05e5d6212a6a0e1b26ea52b0748b0264 (patch) | |
tree | 7a214d34287278667f3006470ee7f98fdea11bb5 /src/gallium/state_trackers | |
parent | 19546108d3dd5541a189e36df4ea83b3f519e48f (diff) |
Revert "Revert "st/dri2: Implement DRI2bufferDamageExtension""
This reverts commit 19546108d3dd5541a189e36df4ea83b3f519e48f.
This commit breaks the build because lima implements
->set_damage_region(). I guess we'll need more discussion before
removing the ->set_damage_region() hook.
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index d42727c6cd6..574ddaea5c7 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1873,6 +1873,36 @@ static const __DRI2interopExtension dri2InteropExtension = { }; /** + * \brief the DRI2bufferDamageExtension set_damage_region method + */ +static void +dri2_set_damage_region(__DRIdrawable *dPriv, unsigned int nrects, int *rects) +{ + struct dri_drawable *drawable = dri_drawable(dPriv); + struct pipe_resource *resource = drawable->textures[ST_ATTACHMENT_BACK_LEFT]; + struct pipe_screen *screen = resource->screen; + struct pipe_box *boxes = NULL; + + if (nrects) { + boxes = CALLOC(nrects, sizeof(*boxes)); + assert(boxes); + + for (unsigned int i = 0; i < nrects; i++) { + int *rect = &rects[i * 4]; + + u_box_2d(rect[0], rect[1], rect[2], rect[3], &boxes[i]); + } + } + + screen->set_damage_region(screen, resource, nrects, boxes); + FREE(boxes); +} + +static __DRI2bufferDamageExtension dri2BufferDamageExtension = { + .base = { __DRI2_BUFFER_DAMAGE, 1 }, +}; + +/** * \brief the DRI2ConfigQueryExtension configQueryb method */ static int @@ -1973,6 +2003,7 @@ static const __DRIextension *dri_screen_extensions[] = { &dri2GalliumConfigQueryExtension.base, &dri2ThrottleExtension.base, &dri2FenceExtension.base, + &dri2BufferDamageExtension.base, &dri2InteropExtension.base, &dri2NoErrorExtension.base, &driBlobExtension.base, @@ -1988,6 +2019,7 @@ static const __DRIextension *dri_robust_screen_extensions[] = { &dri2ThrottleExtension.base, &dri2FenceExtension.base, &dri2InteropExtension.base, + &dri2BufferDamageExtension.base, &dri2Robustness.base, &dri2NoErrorExtension.base, &driBlobExtension.base, @@ -2050,6 +2082,9 @@ dri2_init_screen(__DRIscreen * sPriv) } } + if (pscreen->set_damage_region) + dri2BufferDamageExtension.set_damage_region = dri2_set_damage_region; + if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) { sPriv->extensions = dri_robust_screen_extensions; screen->has_reset_status_query = true; |