Commit 9c5a2eb3 authored by Geoff Lang's avatar Geoff Lang Committed by Commit Bot

Support P010 IOSurfaces with ANGLE

Bug: chromium:1115621
Change-Id: I00580d92c3b33ac84d3a9509bb94fc76f810cf70
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2378753Reviewed-by: default avatarccameron <ccameron@chromium.org>
Reviewed-by: default avatarDale Curtis <dalecurtis@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#803195}
parent 8aa1ec8b
......@@ -250,9 +250,9 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
return false;
}
// TODO(crbug.com/1115621): We should support gfx::BufferFormat::P010 here,
// but EGL doesn't seem to be able to sample from the P010 Y and UV textures.
if (format_ != gfx::BufferFormat::YUV_420_BIPLANAR) {
if (format_ != gfx::BufferFormat::YUV_420_BIPLANAR &&
format_ != gfx::BufferFormat::P010) {
LOG(ERROR) << "non-YUV buffer format passed to CopyTexImage";
return false;
}
......@@ -302,6 +302,9 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
return false;
}
const EGLint texture_type =
format_ == gfx::BufferFormat::P010 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE;
// clang-format off
const EGLint yAttribs[] = {
EGL_WIDTH, size_.width(),
......@@ -310,7 +313,7 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
EGL_TEXTURE_TARGET, texture_target_,
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE, GL_RED,
EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA,
EGL_TEXTURE_TYPE_ANGLE, GL_UNSIGNED_BYTE,
EGL_TEXTURE_TYPE_ANGLE, texture_type,
EGL_NONE, EGL_NONE,
};
// clang-format on
......@@ -344,7 +347,7 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
EGL_TEXTURE_TARGET, texture_target_,
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE, GL_RG,
EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA,
EGL_TEXTURE_TYPE_ANGLE, GL_UNSIGNED_BYTE,
EGL_TEXTURE_TYPE_ANGLE, texture_type,
EGL_NONE, EGL_NONE,
};
// clang-format on
......@@ -365,7 +368,7 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
}
yuv_to_rgb_converter->CopyYUV420ToRGB(target, size_, rgb_texture,
GL_UNSIGNED_BYTE);
texture_type);
if (glGetError() != GL_NO_ERROR) {
LOG(ERROR) << "Failed converting from YUV to RGB";
return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment