[Mesa-dev] [PATCH v3 0/3] Make eglExportDMABUFImageMESA return corresponding offset.
This patchset makes eglExportDMABUFImageMESA return corresponding offset of EGLImage instead of 0 on intel platfrom with classic dri driver(i965). v2: Add version check of __DRIimageExtension implementation in egl loader (Suggested by Axel Davy). v3: Don't add version check of __DRIimageExtension implementation in egl loader. Set the offset only when queryImage() succeeds. (Suggested by Emil Velikov) Chuanbo Weng (3): dri: add offset attribute and bump version of EGLImage extensions. egl: return corresponding offset of EGLImage instead of 0. i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET. include/GL/internal/dri_interface.h | 4 +++- src/egl/drivers/dri2/egl_dri2.c | 8 +++- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 3 files changed, 17 insertions(+), 4 deletions(-) -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v3 2/3] egl: return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in bo. v2: Add version check of __DRIimageExtension implementation (Suggested by Axel Davy). v3: Don't add version check of __DRIimageExtension implementation. Set the offset only when queryImage() succeeds. (Suggested by Emil Velikov) Signed-off-by: Chuanbo Weng --- src/egl/drivers/dri2/egl_dri2.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index bbc457c..84687de 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2259,8 +2259,14 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im dri2_dpy->image->queryImage(dri2_img->dri_image, __DRI_IMAGE_ATTRIB_STRIDE, strides); - if (offsets) + if (offsets) { offsets[0] = 0; + EGLint img_offset = 0; + bool ret = dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, &img_offset); + if(ret == true) + offsets[0] = img_offset; + } return EGL_TRUE; } -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v3 1/3] dri: add offset attribute and bump version of EGLImage extensions.
Offset is useful for buffer sharing with other components, so add it to queryImage attributes. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..d0b1bc6 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1094,7 +1094,7 @@ struct __DRIdri2ExtensionRec { * extensions. */ #define __DRI_IMAGE "DRI_IMAGE" -#define __DRI_IMAGE_VERSION 12 +#define __DRI_IMAGE_VERSION 13 /** * These formats correspond to the similarly named MESA_FORMAT_* @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v3 3/3] i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET.
Implement querying this attribute in intelImageExtension and bump version of intelImageExtension. Signed-off-by: Chuanbo Weng --- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index a3d252d..8c75e61 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -609,6 +609,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; @@ -845,7 +848,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static const __DRIimageExtension intelImageExtension = { -.base = { __DRI_IMAGE, 11 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName= intel_create_image_from_name, .createImageFromRenderbuffer= intel_create_image_from_renderbuffer, @@ -860,7 +863,9 @@ static const __DRIimageExtension intelImageExtension = { .createImageFromFds = intel_create_image_from_fds, .createImageFromDmaBufs = intel_create_image_from_dma_bufs, .blitImage = NULL, -.getCapabilities= NULL +.getCapabilities= NULL, +.mapImage = NULL, +.unmapImage = NULL, }; static int -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2 3/3] i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET.
Implement querying this attribute in intelImageExtension and bump version of intelImageExtension. Signed-off-by: Chuanbo Weng --- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index a3d252d..8c75e61 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -609,6 +609,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; @@ -845,7 +848,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static const __DRIimageExtension intelImageExtension = { -.base = { __DRI_IMAGE, 11 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName= intel_create_image_from_name, .createImageFromRenderbuffer= intel_create_image_from_renderbuffer, @@ -860,7 +863,9 @@ static const __DRIimageExtension intelImageExtension = { .createImageFromFds = intel_create_image_from_fds, .createImageFromDmaBufs = intel_create_image_from_dma_bufs, .blitImage = NULL, -.getCapabilities= NULL +.getCapabilities= NULL, +.mapImage = NULL, +.unmapImage = NULL, }; static int -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2 2/3] egl: return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in bo. v2: Add version check of __DRIimageExtension implementation (Suggested by Axel Davy). Signed-off-by: Chuanbo Weng --- src/egl/drivers/dri2/egl_dri2.c | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 859612f..c529e55 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2249,6 +2249,7 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im struct dri2_egl_image *dri2_img = dri2_egl_image(img); (void) drv; + EGLint img_offset = 0; /* rework later to provide multiple fds/strides/offsets */ if (fds) @@ -2259,8 +2260,14 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im dri2_dpy->image->queryImage(dri2_img->dri_image, __DRI_IMAGE_ATTRIB_STRIDE, strides); - if (offsets) + if (offsets){ offsets[0] = 0; + if(dri2_dpy->image->base.version >= 13){ + dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, &img_offset); + offsets[0] = img_offset; + } + } return EGL_TRUE; } -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2 1/3] dri: add offset attribute and bump version of EGLImage extensions.
Offset is useful for buffer sharing with other components, so add it to queryImage attributes. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..d0b1bc6 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1094,7 +1094,7 @@ struct __DRIdri2ExtensionRec { * extensions. */ #define __DRI_IMAGE "DRI_IMAGE" -#define __DRI_IMAGE_VERSION 12 +#define __DRI_IMAGE_VERSION 13 /** * These formats correspond to the similarly named MESA_FORMAT_* @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2 0/3] Make eglExportDMABUFImageMESA return corresponding offset.
This patchset makes eglExportDMABUFImageMESA return corresponding offset of EGLImage instead of 0 on intel platfrom with classic dri driver(i965). v2: Add version check of __DRIimageExtension implementation in egl loader (Suggested by Axel Davy). Chuanbo Weng (3): dri: add offset attribute and bump version of EGLImage extensions. egl: return corresponding offset of EGLImage instead of 0. i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET. include/GL/internal/dri_interface.h | 4 +++- src/egl/drivers/dri2/egl_dri2.c | 9 - src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 3 files changed, 18 insertions(+), 4 deletions(-) -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] gbm: fix potential NULL deref of mapImage/unmapImage.
The mapImage/unmapImage functions of DRIimage extension can be NULL, so we should add additional check for them. Cc: Signed-off-by: Chuanbo Weng --- src/gbm/backends/dri/gbm_dri.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3626e3..b14faef 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -941,7 +941,7 @@ gbm_dri_bo_map(struct gbm_bo *_bo, return *map_data; } - if (!dri->image || dri->image->base.version < 12) { + if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { errno = ENOSYS; return NULL; } @@ -972,7 +972,8 @@ gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) return; } - if (!dri->context || !dri->image || dri->image->base.version < 12) + if (!dri->context || !dri->image || + dri->image->base.version < 12 || !dri->image->unmapImage) return; dri->image->unmapImage(dri->context, bo->image, map_data); -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] gbm: fix potential NULL deref of mapImage/unmapImage.
The mapImage/unmapImage functions of DRIimage extension can be NULL, so we should add additional check for them. Cc: Signed-off-by: Chuanbo Weng --- src/gbm/backends/dri/gbm_dri.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3626e3..b14faef 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -941,7 +941,7 @@ gbm_dri_bo_map(struct gbm_bo *_bo, return *map_data; } - if (!dri->image || dri->image->base.version < 12) { + if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { errno = ENOSYS; return NULL; } @@ -972,7 +972,8 @@ gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) return; } - if (!dri->context || !dri->image || dri->image->base.version < 12) + if (!dri->context || !dri->image || + dri->image->base.version < 12 || !dri->image->unmapImage) return; dri->image->unmapImage(dri->context, bo->image, map_data); -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] gbm: fix potential NULL deref of mapImage/unmapImage.
The mapImage/unmapImage functions of DRIimage extension can be NULL, so we should add additional check for them. Cc: Signed-off-by: Chuanbo Weng --- src/gbm/backends/dri/gbm_dri.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3626e3..b14faef 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -941,7 +941,7 @@ gbm_dri_bo_map(struct gbm_bo *_bo, return *map_data; } - if (!dri->image || dri->image->base.version < 12) { + if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { errno = ENOSYS; return NULL; } @@ -972,7 +972,8 @@ gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) return; } - if (!dri->context || !dri->image || dri->image->base.version < 12) + if (!dri->context || !dri->image || + dri->image->base.version < 12 || !dri->image->unmapImage) return; dri->image->unmapImage(dri->context, bo->image, map_data); -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 3/3] i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET.
Implement querying this attribute in intelImageExtension and bump version of intelImageExtension. Signed-off-by: Chuanbo Weng --- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index a3d252d..8c75e61 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -609,6 +609,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; @@ -845,7 +848,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static const __DRIimageExtension intelImageExtension = { -.base = { __DRI_IMAGE, 11 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName= intel_create_image_from_name, .createImageFromRenderbuffer= intel_create_image_from_renderbuffer, @@ -860,7 +863,9 @@ static const __DRIimageExtension intelImageExtension = { .createImageFromFds = intel_create_image_from_fds, .createImageFromDmaBufs = intel_create_image_from_dma_bufs, .blitImage = NULL, -.getCapabilities= NULL +.getCapabilities= NULL, +.mapImage = NULL, +.unmapImage = NULL, }; static int -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/3] dri: add offset attribute and bump version of EGLImage extensions.
Offset is useful for buffer sharing with other components, so add it to queryImage attributes. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..d0b1bc6 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1094,7 +1094,7 @@ struct __DRIdri2ExtensionRec { * extensions. */ #define __DRI_IMAGE "DRI_IMAGE" -#define __DRI_IMAGE_VERSION 12 +#define __DRI_IMAGE_VERSION 13 /** * These formats correspond to the similarly named MESA_FORMAT_* @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 2/3] egl: return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in bo. Signed-off-by: Chuanbo Weng --- src/egl/drivers/dri2/egl_dri2.c | 12 +--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 859612f..8ef0acd 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2249,6 +2249,8 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im struct dri2_egl_image *dri2_img = dri2_egl_image(img); (void) drv; + EGLBoolean ret = EGL_TRUE; + EGLint img_offset = 0; /* rework later to provide multiple fds/strides/offsets */ if (fds) @@ -2259,10 +2261,14 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im dri2_dpy->image->queryImage(dri2_img->dri_image, __DRI_IMAGE_ATTRIB_STRIDE, strides); - if (offsets) - offsets[0] = 0; + if (offsets){ + ret = dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, &img_offset); + if(ret == EGL_TRUE) +offsets[0] = img_offset; + } - return EGL_TRUE; + return ret; } #endif -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 0/3] Make eglExportDMABUFImageMESA return corresponding offset.
This patchset makes eglExportDMABUFImageMESA return corresponding offset of EGLImage instead of 0 on intel platfrom with classic dri driver(i965). Chuanbo Weng (3): dri: add offset attribute and bump version of EGLImage extensions. egl: return corresponding offset of EGLImage instead of 0. i965: implement querying __DRI_IMAGE_ATTRIB_OFFSET. include/GL/internal/dri_interface.h | 4 +++- src/egl/drivers/dri2/egl_dri2.c | 12 +--- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 3 files changed, 19 insertions(+), 6 deletions(-) -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH v2] egl: return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in drm bo. v2: version bump on the EGL image interface and add gallium pieces. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 4 +++- src/egl/drivers/dri2/egl_dri2.c | 3 ++- src/gallium/state_trackers/dri/dri2.c| 8 +++- src/gbm/backends/dri/gbm_dri.c | 5 +++-- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..d0b1bc6 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1094,7 +1094,7 @@ struct __DRIdri2ExtensionRec { * extensions. */ #define __DRI_IMAGE "DRI_IMAGE" -#define __DRI_IMAGE_VERSION 12 +#define __DRI_IMAGE_VERSION 13 /** * These formats correspond to the similarly named MESA_FORMAT_* @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index e854903..3f28efe 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2257,7 +2257,8 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im __DRI_IMAGE_ATTRIB_STRIDE, strides); if (offsets) - offsets[0] = 0; + dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, offsets); return EGL_TRUE; } diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 9803b0e..a7f20da 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1004,6 +1004,12 @@ dri2_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return GL_TRUE; + case __DRI_IMAGE_ATTRIB_OFFSET: + /*TODO: We just set the offset to 0 here. It can be set + * to corresponding value if someone has the requirement. + */ + *value = 0; + return GL_TRUE; default: return GL_FALSE; } @@ -1313,7 +1319,7 @@ dri2_get_capabilities(__DRIscreen *_screen) /* The extension is modified during runtime if DRI_PRIME is detected */ static __DRIimageExtension dri2ImageExtension = { -.base = { __DRI_IMAGE, 12 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName = dri2_create_image_from_name, .createImageFromRenderbuffer = dri2_create_image_from_renderbuffer, diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3626e3..b14faef 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -941,7 +941,7 @@ gbm_dri_bo_map(struct gbm_bo *_bo, return *map_data; } - if (!dri->image || dri->image->base.version < 12) { + if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { errno = ENOSYS; return NULL; } @@ -972,7 +972,8 @@ gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) return; } - if (!dri->context || !dri->image || dri->image->base.version < 12) + if (!dri->context || !dri->image || + dri->image->base.version < 12 || !dri->image->unmapImage) return; dri->image->unmapImage(dri->context, bo->image, map_data); diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 7876652..a16d2c5 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -609,6 +609,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; @@ -845,7 +848,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static const __DRIimageExtension intelImageExtension = { -.base = { __DRI_IMAGE, 11 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName= intel_create_image_from_name, .createImageFromRenderbuffer= intel_create_image_from_renderbuffer, @@ -860,7 +863,9 @@ static const __DRIimageExtension intelImageExtension = { .createImageFromFds = intel_create_image_fr
[Mesa-dev] [PATCH v2] egl: return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in drm bo. v2: version bump on the EGL image interface and add gallium pieces. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 2 ++ src/egl/drivers/dri2/egl_dri2.c | 3 ++- src/gallium/state_trackers/dri/dri2.c| 6 ++ src/gbm/backends/dri/gbm_dri.c | 5 +++-- src/mesa/drivers/dri/i965/intel_screen.c | 9 +++-- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..fc99d1d 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index e854903..3f28efe 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2257,7 +2257,8 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im __DRI_IMAGE_ATTRIB_STRIDE, strides); if (offsets) - offsets[0] = 0; + dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, offsets); return EGL_TRUE; } diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index 9803b0e..7cead32 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1004,6 +1004,12 @@ dri2_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return GL_TRUE; + case __DRI_IMAGE_ATTRIB_OFFSET: + /*TODO: We just set the offset to 0 here. It can be set + * to corresponding value if someone has the requirement. + */ + *value = 0; + return GL_TRUE; default: return GL_FALSE; } diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index c3626e3..b14faef 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -941,7 +941,7 @@ gbm_dri_bo_map(struct gbm_bo *_bo, return *map_data; } - if (!dri->image || dri->image->base.version < 12) { + if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { errno = ENOSYS; return NULL; } @@ -972,7 +972,8 @@ gbm_dri_bo_unmap(struct gbm_bo *_bo, void *map_data) return; } - if (!dri->context || !dri->image || dri->image->base.version < 12) + if (!dri->context || !dri->image || + dri->image->base.version < 12 || !dri->image->unmapImage) return; dri->image->unmapImage(dri->context, bo->image, map_data); diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 7876652..a16d2c5 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -609,6 +609,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; @@ -845,7 +848,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate) } static const __DRIimageExtension intelImageExtension = { -.base = { __DRI_IMAGE, 11 }, +.base = { __DRI_IMAGE, 13 }, .createImageFromName= intel_create_image_from_name, .createImageFromRenderbuffer= intel_create_image_from_renderbuffer, @@ -860,7 +863,9 @@ static const __DRIimageExtension intelImageExtension = { .createImageFromFds = intel_create_image_from_fds, .createImageFromDmaBufs = intel_create_image_from_dma_bufs, .blitImage = NULL, -.getCapabilities= NULL +.getCapabilities= NULL, +.mapImage = NULL, +.unmapImage = NULL, }; static int -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] Return corresponding offset of EGLImage instead of 0.
The offset should not always be 0. For example, if EGLImage is created from a 2D texture with EGL_GL_TEXTURE_LEVEL=1, then the offset should be the actual start of miplevel 1 in drm bo. Signed-off-by: Chuanbo Weng --- include/GL/internal/dri_interface.h | 2 ++ src/egl/drivers/dri2/egl_dri2.c | 3 ++- src/mesa/drivers/dri/i965/intel_screen.c | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 1c73cce..3d15596 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -1208,6 +1208,8 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ +#define __DRI_IMAGE_ATTRIB_OFFSET 0x200A + enum __DRIYUVColorSpace { __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 3205a36..abedafa 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2267,7 +2267,8 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im __DRI_IMAGE_ATTRIB_STRIDE, strides); if (offsets) - offsets[0] = 0; + dri2_dpy->image->queryImage(dri2_img->dri_image, + __DRI_IMAGE_ATTRIB_OFFSET, offsets); return EGL_TRUE; } diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index ae51c40..d20e463 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -613,6 +613,9 @@ intel_query_image(__DRIimage *image, int attrib, int *value) case __DRI_IMAGE_ATTRIB_NUM_PLANES: *value = 1; return true; + case __DRI_IMAGE_ATTRIB_OFFSET: + *value = image->offset; + return true; default: return false; -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev