[v5,2/5] dri_interface: add DRI2_BufferDamage interface

Submitted by Boris Brezillon on July 2, 2019, 1:49 p.m.

Details

Message ID 20190702135002.23852-3-boris.brezillon@collabora.com
State New
Headers show
Series "EGL_KHR_partial_update support" ( rev: 2 ) in Mesa

Not browsing as part of any series.

Commit Message

Boris Brezillon July 2, 2019, 1:49 p.m.
From: Daniel Stone <daniels@collabora.com>

Add a new DRI2_BufferDamage interface to support the
EGL_KHR_partial_update extension, informing the driver of an overriding
scissor region for a particular drawable.

Based on a commit originally authored by:
Harish Krupo <harish.krupo.kps@intel.com>
renamed extension, retargeted at DRI drawable instead of context,
rewritten description

Signed-off-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
---
Changes in v5:
* Add Alyssa's a-b
* Add Daniel's SoB
---
 include/GL/internal/dri_interface.h | 43 +++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

Patch hide | download patch | download mbox

diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
index af0ee9c56670..ada78c5d53d6 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -85,6 +85,7 @@  typedef struct __DRI2throttleExtensionRec	__DRI2throttleExtension;
 typedef struct __DRI2fenceExtensionRec          __DRI2fenceExtension;
 typedef struct __DRI2interopExtensionRec	__DRI2interopExtension;
 typedef struct __DRI2blobExtensionRec           __DRI2blobExtension;
+typedef struct __DRI2bufferDamageExtensionRec   __DRI2bufferDamageExtension;
 
 typedef struct __DRIimageLoaderExtensionRec     __DRIimageLoaderExtension;
 typedef struct __DRIimageDriverExtensionRec     __DRIimageDriverExtension;
@@ -488,6 +489,48 @@  struct __DRI2interopExtensionRec {
                         struct mesa_glinterop_export_out *out);
 };
 
+
+/**
+ * Extension for limiting window system back buffer rendering to user-defined
+ * scissor region.
+ */
+
+#define __DRI2_BUFFER_DAMAGE "DRI2_BufferDamage"
+#define __DRI2_BUFFER_DAMAGE_VERSION 1
+
+struct __DRI2bufferDamageExtensionRec {
+   __DRIextension base;
+
+   /**
+    * Provides an array of rectangles representing an overriding scissor region
+    * for rendering operations performed to the specified drawable. These
+    * rectangles do not replace client API scissor regions or draw
+    * co-ordinates, but instead inform the driver of the overall bounds of all
+    * operations which will be issued before the next flush.
+    *
+    * Any rendering operations writing pixels outside this region to the
+    * drawable will have an undefined effect on the entire drawable.
+    *
+    * This entrypoint may only be called after the drawable has been either been
+    * newly created or flushed, and before any rendering operations which write
+    * pixels to the drawable. Calling this entrypoint at any other time will
+    * have an undefined effect on the entire drawable.
+    *
+    * Calling this entrypoint with @size 0 and @rects NULL will reset the
+    * region to the buffer's full size. This entrypoint may be called once to
+    * reset the region, followed by a second call with a populated region,
+    * before a rendering call is made.
+    *
+    * Used to implement EGL_KHR_partial_update.
+    *
+    * \param drawable affected drawable
+    * \param size     number of rectangles provided
+    * \param rects    the array of rectangles, lower-left origin
+    */
+   void (*set_damage_region)(__DRIdrawable *drawable, unsigned int nrects,
+                             int *rects);
+};
+
 /*@}*/
 
 /**