mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 11:40:10 +01:00
i965: Lift some restrictions on dma_buf EGLImages
Allow glEGLImageTargetRenderbufferStorageOES and
glEGLImageTargetTexture2DOES for dma_buf EGLImages if the image is
a single RGBA8 unorm plane. This is safe, despite fast color clears,
because i965 disables allocation of auxiliary buffers for EGLImages.
Chrome OS needs this, because its compositor uses dma_buf EGLImages for
its scanout buffers.
Testing:
- Tested on Ivybridge Chromebook Pixel with WebGL Aquarium and
YouTube.
- No Piglit regressions on Broadwell with `piglit run -p gbm
tests/quick.py`, with my Piglit patches that update the
EGL_EXT_image_dma_buf_import tests.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
2943b15ce7
commit
a76dc15b2b
3 changed files with 7 additions and 22 deletions
|
|
@ -363,13 +363,6 @@ 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_R8G8B8A8_UNORM:
|
||||
|
|
|
|||
|
|
@ -89,18 +89,18 @@ struct __DRIimageRec {
|
|||
GLuint tile_y;
|
||||
bool has_depthstencil;
|
||||
|
||||
/** The image was created with EGL_EXT_image_dma_buf_import. */
|
||||
bool dma_buf_imported;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
enum __DRIChromaSiting vertical_siting;
|
||||
/* \} */
|
||||
|
||||
void *data;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -320,17 +320,9 @@ 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.
|
||||
/* We support external textures only for EGLImages created with
|
||||
* EGL_EXT_image_dma_buf_import. We may lift that restriction in the future.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
if (target == GL_TEXTURE_EXTERNAL_OES && !image->dma_buf_imported) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glEGLImageTargetTexture2DOES(external target is enabled only "
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue