mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
intel: restrict dma-buf-import images to external sampling only
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@intel.com>
Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
0de013b619
commit
3a52cd351a
4 changed files with 27 additions and 1 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -368,6 +368,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.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue