On 04/29/2013 04:08 AM, Topi Pohjolainen wrote:
Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com>
---
  include/GL/internal/dri_interface.h        | 23 +++++++++++++++++++++++
  src/egl/drivers/dri2/egl_dri2.c            |  1 +
  src/mesa/drivers/dri/intel/intel_regions.h |  7 +++++++
  src/mesa/drivers/dri/intel/intel_screen.c  |  9 +++++++++
  4 files changed, 40 insertions(+)

diff --git a/include/GL/internal/dri_interface.h 
b/include/GL/internal/dri_interface.h
index 30ce175..2691893 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -1025,6 +1025,25 @@ struct __DRIdri2ExtensionRec {
                                                  * 7+. Each query will return a
                                                  * new fd. */

+enum __DRIYUVColorSpace {
+   __DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
+   __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F,
+   __DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280,
+   __DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281
+};
+
+enum __DRISampleRange {
+   __DRI_YUV_RANGE_UNDEFINED = 0,
+   __DRI_YUV_FULL_RANGE = 0x3282,
+   __DRI_YUV_NARROW_RANGE = 0x3283
+};
+
+enum __DRIChromaSiting {
+   __DRI_YUV_CHROMA_SITING_UNDEFINED = 0,
+   __DRI_YUV_CHROMA_SITING_0 = 0x3284,
+   __DRI_YUV_CHROMA_SITING_0_5 = 0x3285
+};
+
  /**
   * \name Reasons that __DRIimageExtensionRec::createImageFromTexture might 
fail
   */
@@ -1129,6 +1148,10 @@ struct __DRIimageExtensionRec {
                                       int width, int height, int fourcc,
                                       int *fds, int num_fds,
                                       int *strides, int *offsets,
+                                     enum __DRIYUVColorSpace yuv_color_space,
+                                     enum __DRISampleRange sample_range,
+                                     enum __DRIChromaSiting horizontal_siting,
+                                     enum __DRIChromaSiting vertical_siting,
                                       void *loaderPrivate);

Uh... you absolutely cannot change existing functions. This is ABI! If you run an updated driver against an old libEGL (or vice versa), it will explode.

You need to add a new function and bump the version of DRI_IMAGE to 8. egl_dri.c can use the version of the DRI_IMAGE extension from the driver to determine whether to enable EGL_EXT_image_dma_buf_import.

  };

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 1011f27..10fdcef 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1523,6 +1523,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, 
int fd,
                                                  &fd, 1,
                                                  buffer->stride,
                                                  buffer->offset,
+                                                0, 0, 0, 0,
                                                  NULL);

     if (img == NULL)
diff --git a/src/mesa/drivers/dri/intel/intel_regions.h 
b/src/mesa/drivers/dri/intel/intel_regions.h
index e610f6b..323f834 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.h
+++ b/src/mesa/drivers/dri/intel/intel_regions.h
@@ -40,6 +40,7 @@

  #include "main/mtypes.h"
  #include "intel_bufmgr.h"
+#include <GL/internal/dri_interface.h>

  #ifdef __cplusplus
  extern "C" {
@@ -156,6 +157,12 @@ struct __DRIimageRec {
     GLuint tile_y;
     bool has_depthstencil;

+   /* Provided by dma_buf import extension */
+   enum __DRIYUVColorSpace yuv_color_space;
+   enum __DRISampleRange sample_range;
+   enum __DRIChromaSiting horizontal_siting;
+   enum __DRIChromaSiting vertical_siting;
+
     void *data;
  };

diff --git a/src/mesa/drivers/dri/intel/intel_screen.c 
b/src/mesa/drivers/dri/intel/intel_screen.c
index e912bc7..75dbb5a 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -703,6 +703,10 @@ static __DRIimage *
  intel_create_image_from_fds(__DRIscreen *screen,
                              int width, int height, int fourcc,
                              int *fds, int num_fds, int *strides, int *offsets,
+                            enum __DRIYUVColorSpace yuv_color_space,
+                            enum __DRISampleRange sample_range,
+                            enum __DRIChromaSiting horizontal_siting,
+                            enum __DRIChromaSiting vertical_siting,
                              void *loaderPrivate)
  {
     struct intel_screen *intelScreen = screen->driverPrivate;
@@ -737,6 +741,11 @@ intel_create_image_from_fds(__DRIscreen *screen,
        }
     }

+   image->yuv_color_space = yuv_color_space;
+   image->sample_range = sample_range;
+   image->horizontal_siting = horizontal_siting;
+   image->vertical_siting = vertical_siting;
+
     return image;
  }



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to