v2: - do not break ABI, but instead introduce new entry point for dma buffers and bump up the dri-interface version to eight
Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- include/GL/internal/dri_interface.h | 36 +++++++++++++++++++++++++++++- src/mesa/drivers/dri/intel/intel_regions.h | 7 ++++++ src/mesa/drivers/dri/intel/intel_screen.c | 31 +++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 30ce175..a097396 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -938,7 +938,7 @@ struct __DRIdri2ExtensionRec { * extensions. */ #define __DRI_IMAGE "DRI_IMAGE" -#define __DRI_IMAGE_VERSION 7 +#define __DRI_IMAGE_VERSION 8 /** * These formats correspond to the similarly named MESA_FORMAT_* @@ -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 */ @@ -1130,6 +1149,21 @@ struct __DRIimageExtensionRec { int *fds, int num_fds, int *strides, int *offsets, void *loaderPrivate); + + /** + * Like createImageFromFds, but takes additional attributes + * + * \since 8 + */ + __DRIimage *(*createImageFromDmaBufs)(__DRIscreen *screen, + int width, int height, int fourcc, + int *fds, int num_fds, + int *strides, int *offsets, + enum __DRIYUVColorSpace color_space, + enum __DRISampleRange sample_range, + enum __DRIChromaSiting horiz_siting, + enum __DRIChromaSiting vert_siting, + void *loaderPrivate); }; 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 d822b1c..f2aa8c1 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -732,6 +732,32 @@ intel_create_image_from_fds(__DRIscreen *screen, return image; } +static __DRIimage * +intel_create_image_from_dma_bufs(__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) +{ + __DRIimage *image = intel_create_image_from_fds(screen, width, height, + fourcc, fds, num_fds, + strides, offsets, + loaderPrivate); + + if (!image) + return NULL; + + image->yuv_color_space = yuv_color_space; + image->sample_range = sample_range; + image->horizontal_siting = horizontal_siting; + image->vertical_siting = vertical_siting; + + return image; +} static __DRIimage * intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) @@ -792,7 +818,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static struct __DRIimageExtensionRec intelImageExtension = { - .base = { __DRI_IMAGE, 7 }, + .base = { __DRI_IMAGE, 8 }, .createImageFromName = intel_create_image_from_name, .createImageFromRenderbuffer = intel_create_image_from_renderbuffer, @@ -804,7 +830,8 @@ static struct __DRIimageExtensionRec intelImageExtension = { .createImageFromNames = intel_create_image_from_names, .fromPlanar = intel_from_planar, .createImageFromTexture = intel_create_image_from_texture, - .createImageFromFds = intel_create_image_from_fds + .createImageFromFds = intel_create_image_from_fds, + .createImageFromDmaBufs = intel_create_image_from_dma_bufs }; static const __DRIextension *intelScreenExtensions[] = { -- 1.8.1.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev