[Mesa-dev] [v2 07/10] dri: propagate extra dma_buf import attributes to the drivers

Ian Romanick idr at freedesktop.org
Tue Apr 30 11:03:20 PDT 2013


On 04/29/2013 04:08 AM, Topi Pohjolainen wrote:
> 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);

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;
>   }
>
>



More information about the mesa-dev mailing list