dri: add __DRI_IMAGE_FORMAT_SXRGB8
[mesa.git] / include / GL / internal / dri_interface.h
index 6f9c2c8b8cfb8cdbdc2573b02c5a4e55156df341..09782c8baeb84296432614d3f63604312e234870 100644 (file)
@@ -48,6 +48,8 @@ typedef unsigned int drm_drawable_t;
 typedef struct drm_clip_rect drm_clip_rect_t;
 #endif
 
+#include <GL/gl.h>
+
 #include <stdint.h>
 
 /**
@@ -83,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;
@@ -486,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 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 @nrects 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 nrects   number of rectangles provided
+    * \param rects    the array of rectangles, lower-left origin
+    */
+   void (*set_damage_region)(__DRIdrawable *drawable, unsigned int nrects,
+                             int *rects);
+};
+
 /*@}*/
 
 /**
@@ -589,7 +634,7 @@ struct __DRIdamageExtensionRec {
  * SWRast Loader extension.
  */
 #define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
-#define __DRI_SWRAST_LOADER_VERSION 4
+#define __DRI_SWRAST_LOADER_VERSION 5
 struct __DRIswrastLoaderExtensionRec {
     __DRIextension base;
 
@@ -649,6 +694,23 @@ struct __DRIswrastLoaderExtensionRec {
     void (*getImageShm)(__DRIdrawable *readable,
                         int x, int y, int width, int height,
                         int shmid, void *loaderPrivate);
+
+   /**
+     * Put shm image to drawable (v2)
+     *
+     * The original version fixes srcx/y to 0, and expected
+     * the offset to be adjusted. This version allows src x,y
+     * to not be included in the offset. This is needed to
+     * avoid certain overflow checks in the X server, that
+     * result in lost rendering.
+     *
+     * \since 5
+     */
+    void (*putImageShm2)(__DRIdrawable *drawable, int op,
+                         int x, int y,
+                         int width, int height, int stride,
+                         int shmid, char *shmaddr, unsigned offset,
+                         void *loaderPrivate);
 };
 
 /**
@@ -747,7 +809,11 @@ struct __DRIuseInvalidateExtensionRec {
 #define __DRI_ATTRIB_YINVERTED                 47
 #define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE  48
 #define __DRI_ATTRIB_MUTABLE_RENDER_BUFFER     49 /* EGL_MUTABLE_RENDER_BUFFER_BIT_KHR */
-#define __DRI_ATTRIB_MAX                       50
+#define __DRI_ATTRIB_RED_SHIFT                 50
+#define __DRI_ATTRIB_GREEN_SHIFT               51
+#define __DRI_ATTRIB_BLUE_SHIFT                        52
+#define __DRI_ATTRIB_ALPHA_SHIFT               53
+#define __DRI_ATTRIB_MAX                       54
 
 /* __DRI_ATTRIB_RENDER_TYPE */
 #define __DRI_ATTRIB_RGBA_BIT                  0x01    
@@ -1034,6 +1100,7 @@ enum dri_loader_cap {
     * only BGRA ordering can be exposed.
     */
    DRI_LOADER_CAP_RGBA_ORDERING,
+   DRI_LOADER_CAP_FP16,
 };
 
 struct __DRIdri2LoaderExtensionRec {
@@ -1273,6 +1340,10 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_FORMAT_XBGR2101010  0x1010
 #define __DRI_IMAGE_FORMAT_ABGR2101010  0x1011
 #define __DRI_IMAGE_FORMAT_SABGR8       0x1012
+#define __DRI_IMAGE_FORMAT_UYVY         0x1013
+#define __DRI_IMAGE_FORMAT_XBGR16161616F 0x1014
+#define __DRI_IMAGE_FORMAT_ABGR16161616F 0x1015
+#define __DRI_IMAGE_FORMAT_SXRGB8       0x1016
 
 #define __DRI_IMAGE_USE_SHARE          0x0001
 #define __DRI_IMAGE_USE_SCANOUT                0x0002
@@ -1291,48 +1362,16 @@ struct __DRIdri2ExtensionRec {
         (__DRI_IMAGE_TRANSFER_READ | __DRI_IMAGE_TRANSFER_WRITE)
 
 /**
- * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h,
- * GBM_FORMAT_* from gbm.h, and DRM_FORMAT_* from drm_fourcc.h. Used with
- * createImageFromNames.
+ * Extra fourcc formats used internally to Mesa with createImageFromNames.
+ * The externally-available fourccs are defined by drm_fourcc.h (DRM_FORMAT_*)
+ * and WL_DRM_FORMAT_* from wayland_drm.h.
  *
  * \since 5
  */
 
-#define __DRI_IMAGE_FOURCC_R8          0x20203852
-#define __DRI_IMAGE_FOURCC_GR88                0x38385247
-#define __DRI_IMAGE_FOURCC_ARGB1555    0x35315241
-#define __DRI_IMAGE_FOURCC_R16         0x20363152
-#define __DRI_IMAGE_FOURCC_GR1616      0x32335247
-#define __DRI_IMAGE_FOURCC_RGB565      0x36314752
-#define __DRI_IMAGE_FOURCC_ARGB8888    0x34325241
-#define __DRI_IMAGE_FOURCC_XRGB8888    0x34325258
-#define __DRI_IMAGE_FOURCC_ABGR8888    0x34324241
-#define __DRI_IMAGE_FOURCC_XBGR8888    0x34324258
 #define __DRI_IMAGE_FOURCC_SARGB8888   0x83324258
 #define __DRI_IMAGE_FOURCC_SABGR8888   0x84324258
-#define __DRI_IMAGE_FOURCC_ARGB2101010 0x30335241
-#define __DRI_IMAGE_FOURCC_XRGB2101010 0x30335258
-#define __DRI_IMAGE_FOURCC_ABGR2101010 0x30334241
-#define __DRI_IMAGE_FOURCC_XBGR2101010 0x30334258
-#define __DRI_IMAGE_FOURCC_RGBA1010102 0x30334152
-#define __DRI_IMAGE_FOURCC_RGBX1010102 0x30335852
-#define __DRI_IMAGE_FOURCC_BGRA1010102 0x30334142
-#define __DRI_IMAGE_FOURCC_BGRX1010102 0x30335842
-#define __DRI_IMAGE_FOURCC_YUV410      0x39565559
-#define __DRI_IMAGE_FOURCC_YUV411      0x31315559
-#define __DRI_IMAGE_FOURCC_YUV420      0x32315559
-#define __DRI_IMAGE_FOURCC_YUV422      0x36315559
-#define __DRI_IMAGE_FOURCC_YUV444      0x34325559
-#define __DRI_IMAGE_FOURCC_NV12                0x3231564e
-#define __DRI_IMAGE_FOURCC_NV16                0x3631564e
-#define __DRI_IMAGE_FOURCC_YUYV                0x56595559
-#define __DRI_IMAGE_FOURCC_UYVY                0x59565955
-
-#define __DRI_IMAGE_FOURCC_YVU410      0x39555659
-#define __DRI_IMAGE_FOURCC_YVU411      0x31315659
-#define __DRI_IMAGE_FOURCC_YVU420      0x32315659
-#define __DRI_IMAGE_FOURCC_YVU422      0x36315659
-#define __DRI_IMAGE_FOURCC_YVU444      0x34325659
+#define __DRI_IMAGE_FOURCC_SXRGB8888   0x85324258
 
 /**
  * Queryable on images created by createImageFromNames.
@@ -1353,6 +1392,8 @@ struct __DRIdri2ExtensionRec {
 #define __DRI_IMAGE_COMPONENTS_Y_UV    0x3004
 #define __DRI_IMAGE_COMPONENTS_Y_XUXV  0x3005
 #define __DRI_IMAGE_COMPONENTS_Y_UXVX  0x3008
+#define __DRI_IMAGE_COMPONENTS_AYUV    0x3009
+#define __DRI_IMAGE_COMPONENTS_XYUV    0x300A
 #define __DRI_IMAGE_COMPONENTS_R       0x3006
 #define __DRI_IMAGE_COMPONENTS_RG      0x3007
 
@@ -1476,8 +1517,8 @@ struct __DRIimageExtensionRec {
    GLboolean (*validateUsage)(__DRIimage *image, unsigned int use);
 
    /**
-    * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead
-    * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is
+    * Unlike createImageFromName __DRI_IMAGE_FORMAT is not used but instead
+    * DRM_FORMAT_*, and strides are in bytes not pixels. Stride is
     * also per block and not per pixel (for non-RGB, see gallium blocks).
     *
     * \since 5