[Mesa-dev] [PATCH 5/8] dri: propagate extra dma_buf import attributes to the drivers

Topi Pohjolainen topi.pohjolainen at intel.com
Tue Apr 16 03:45:04 PDT 2013


Signed-off-by: Topi Pohjolainen <topi.pohjolainen at 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);
 };
 
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 06a21d7..5302c0a 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 8716688..93845ce 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -697,6 +697,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;
@@ -731,6 +735,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;
 }
 
-- 
1.8.1.2



More information about the mesa-dev mailing list