summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorChad Versace <[email protected]>2017-05-30 12:27:54 -0700
committerChad Versace <[email protected]>2017-06-27 16:56:30 -0700
commit74db56b97a65d488c38a8cfbb600b019439c2f91 (patch)
tree990fa8b809c3fbfb67ff8d349d2892947c118208 /src/mesa/drivers
parenta1983223d8839a0c9f5ca5aaf305ca6d2e01860b (diff)
i965: Add a RGBX->RGBA fallback for glEGLImageTextureTarget2D()
This enables support for importing RGBX8888 EGLImage textures on Skylake. Chrome OS needs support for RGBX8888 EGLImage textures because because the Android framework produces HAL_PIXEL_FORMAT_RGBX8888 winsys surfaces, which the Chrome OS compositor consumes as dma_bufs. On hardware for which RGBX is unsupported or disabled, normally core Mesa provides the RGBX->RGBA fallback during glTexStorage. But the DRIimage code bypasses core Mesa, so we must do the fallback in i965. Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index b1fe8dd584e..22be1149a9b 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -267,8 +267,22 @@ create_mt_for_dri_image(struct brw_context *brw,
struct gl_context *ctx = &brw->ctx;
struct intel_mipmap_tree *mt;
uint32_t draw_x, draw_y;
+ mesa_format format = image->format;
+
+ if (!ctx->TextureFormatSupported[format]) {
+ /* The texture storage paths in core Mesa detect if the driver does not
+ * support the user-requested format, and then searches for a
+ * fallback format. The DRIimage code bypasses core Mesa, though. So we
+ * do the fallbacks here for important formats.
+ *
+ * We must support DRM_FOURCC_XBGR8888 textures because the Android
+ * framework produces HAL_PIXEL_FORMAT_RGBX8888 winsys surfaces, which
+ * the Chrome OS compositor consumes as dma_buf EGLImages.
+ */
+ format = _mesa_format_fallback_rgbx_to_rgba(format);
+ }
- if (!ctx->TextureFormatSupported[image->format])
+ if (!ctx->TextureFormatSupported[format])
return NULL;
/* Disable creation of the texture's aux buffers because the driver exposes
@@ -276,7 +290,7 @@ create_mt_for_dri_image(struct brw_context *brw,
* buffer's content to the main buffer nor for invalidating the aux buffer's
* content.
*/
- mt = intel_miptree_create_for_bo(brw, image->bo, image->format,
+ mt = intel_miptree_create_for_bo(brw, image->bo, format,
0, image->width, image->height, 1,
image->pitch,
MIPTREE_LAYOUT_DISABLE_AUX);