[Mesa-dev] [v8 7/9] intel: restrict dma-buf-import images to external sampling only

Topi Pohjolainen topi.pohjolainen at intel.com
Wed Jul 24 03:23:39 PDT 2013


Memory originating outside mesa stack is meant to be for reading
only. In addition, the restrictions imposed by the image external
extension should apply. For example, users shouldn't be allowed
to generare mip-trees based on these images.

v2 (Chad): document using full extension names, fix the comment
           style itself and emit description of error

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 src/mesa/drivers/dri/i965/intel_fbo.c       |  7 +++++++
 src/mesa/drivers/dri/i965/intel_regions.h   |  9 ++++++++-
 src/mesa/drivers/dri/i965/intel_screen.c    |  1 +
 src/mesa/drivers/dri/i965/intel_tex_image.c | 11 +++++++++++
 4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c
index 059b3ea..4540904 100644
--- a/src/mesa/drivers/dri/i965/intel_fbo.c
+++ b/src/mesa/drivers/dri/i965/intel_fbo.c
@@ -268,6 +268,13 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx,
       return;
    }
 
+   /* Buffers originating from outside are for read-only. */
+   if (image->dma_buf_imported) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+            "glEGLImageTargetRenderbufferStorage(dma buffers are read-only)");
+      return;
+   }
+
    /* __DRIimage is opaque to the core so it has to be checked here */
    switch (image->format) {
    case MESA_FORMAT_RGBA8888_REV:
diff --git a/src/mesa/drivers/dri/i965/intel_regions.h b/src/mesa/drivers/dri/i965/intel_regions.h
index ebb5488..f08a113 100644
--- a/src/mesa/drivers/dri/i965/intel_regions.h
+++ b/src/mesa/drivers/dri/i965/intel_regions.h
@@ -150,7 +150,14 @@ struct __DRIimageRec {
    GLuint tile_y;
    bool has_depthstencil;
 
-   /* Provided by EGL_EXT_image_dma_buf_import */
+   /**
+    * Provided by EGL_EXT_image_dma_buf_import.
+    * 
+    * The flag is set in order to restrict the use of the image later on.
+    *
+    * See intel_image_target_texture_2d()
+    */
+   bool dma_buf_imported;
    enum __DRIYUVColorSpace yuv_color_space;
    enum __DRISampleRange sample_range;
    enum __DRIChromaSiting horizontal_siting;
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 12a96c0..4ee8602 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -719,6 +719,7 @@ intel_create_image_from_dma_bufs(__DRIscreen *screen,
       return NULL;
    }
 
+   image->dma_buf_imported = true;
    image->yuv_color_space = yuv_color_space;
    image->sample_range = sample_range;
    image->horizontal_siting = horizontal_siting;
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 9c5d234..7d478d1 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -367,6 +367,17 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
    if (image == NULL)
       return;
 
+   /**
+    * Images originating via EGL_EXT_image_dma_buf_import can be used only
+    * with GL_OES_EGL_image_external only.
+    */
+   if (image->dma_buf_imported && target != GL_TEXTURE_EXTERNAL_OES) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+            "glEGLImageTargetTexture2DOES(dma buffers can be used with "
+               "GL_OES_EGL_image_external only");
+      return;
+   }
+
    /* Disallow depth/stencil textures: we don't have a way to pass the
     * separate stencil miptree of a GL_DEPTH_STENCIL texture through.
     */
-- 
1.8.1.2



More information about the mesa-dev mailing list