| Index: ui/gl/gl_image_memory.cc
|
| diff --git a/ui/gl/gl_image_memory.cc b/ui/gl/gl_image_memory.cc
|
| index 902291759eb066ca741833e50f304c435582e1ee..824c197280e3b57d988a5dcef8fa88003b559dcd 100644
|
| --- a/ui/gl/gl_image_memory.cc
|
| +++ b/ui/gl/gl_image_memory.cc
|
| @@ -19,6 +19,7 @@ namespace {
|
|
|
| bool ValidInternalFormat(unsigned internalformat) {
|
| switch (internalformat) {
|
| + case GL_R8:
|
| case GL_RGBA:
|
| case GL_BGRA_EXT:
|
| return true;
|
| @@ -34,6 +35,7 @@ bool ValidFormat(gfx::GpuMemoryBuffer::Format format) {
|
| case gfx::GpuMemoryBuffer::DXT1:
|
| case gfx::GpuMemoryBuffer::DXT5:
|
| case gfx::GpuMemoryBuffer::ETC1:
|
| + case gfx::GpuMemoryBuffer::R_8:
|
| case gfx::GpuMemoryBuffer::RGBA_8888:
|
| case gfx::GpuMemoryBuffer::BGRA_8888:
|
| return true;
|
| @@ -53,6 +55,7 @@ bool IsCompressedFormat(gfx::GpuMemoryBuffer::Format format) {
|
| case gfx::GpuMemoryBuffer::DXT5:
|
| case gfx::GpuMemoryBuffer::ETC1:
|
| return true;
|
| + case gfx::GpuMemoryBuffer::R_8:
|
| case gfx::GpuMemoryBuffer::RGBA_8888:
|
| case gfx::GpuMemoryBuffer::BGRA_8888:
|
| case gfx::GpuMemoryBuffer::RGBX_8888:
|
| @@ -75,6 +78,8 @@ GLenum TextureFormat(gfx::GpuMemoryBuffer::Format format) {
|
| return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
| case gfx::GpuMemoryBuffer::ETC1:
|
| return GL_ETC1_RGB8_OES;
|
| + case gfx::GpuMemoryBuffer::R_8:
|
| + return GL_RED;
|
| case gfx::GpuMemoryBuffer::RGBA_8888:
|
| return GL_RGBA;
|
| case gfx::GpuMemoryBuffer::BGRA_8888:
|
| @@ -96,6 +101,7 @@ GLenum DataType(gfx::GpuMemoryBuffer::Format format) {
|
| switch (format) {
|
| case gfx::GpuMemoryBuffer::RGBA_8888:
|
| case gfx::GpuMemoryBuffer::BGRA_8888:
|
| + case gfx::GpuMemoryBuffer::R_8:
|
| return GL_UNSIGNED_BYTE;
|
| case gfx::GpuMemoryBuffer::ATC:
|
| case gfx::GpuMemoryBuffer::ATCIA:
|
| @@ -151,8 +157,14 @@ GLImageMemory::~GLImageMemory() {
|
| bool GLImageMemory::StrideInBytes(size_t width,
|
| gfx::GpuMemoryBuffer::Format format,
|
| size_t* stride_in_bytes) {
|
| - base::CheckedNumeric<size_t> s = width;
|
| + base::CheckedNumeric<size_t> checked_stride = width;
|
| switch (format) {
|
| + case gfx::GpuMemoryBuffer::R_8:
|
| + checked_stride += 3;
|
| + if (!checked_stride.IsValid())
|
| + return false;
|
| + *stride_in_bytes = checked_stride.ValueOrDie() & ~0x3;
|
| + return true;
|
| case gfx::GpuMemoryBuffer::ATCIA:
|
| case gfx::GpuMemoryBuffer::DXT5:
|
| *stride_in_bytes = width;
|
| @@ -160,26 +172,18 @@ bool GLImageMemory::StrideInBytes(size_t width,
|
| case gfx::GpuMemoryBuffer::ATC:
|
| case gfx::GpuMemoryBuffer::DXT1:
|
| case gfx::GpuMemoryBuffer::ETC1:
|
| - DCHECK_EQ(width % 2, 0U);
|
| - s /= 2;
|
| - if (!s.IsValid())
|
| - return false;
|
| -
|
| - *stride_in_bytes = s.ValueOrDie();
|
| + DCHECK_EQ(width % 2, 0u);
|
| + *stride_in_bytes = width / 2;
|
| return true;
|
| case gfx::GpuMemoryBuffer::RGBA_8888:
|
| + case gfx::GpuMemoryBuffer::RGBX_8888:
|
| case gfx::GpuMemoryBuffer::BGRA_8888:
|
| - s *= 4;
|
| - if (!s.IsValid())
|
| + checked_stride *= 4;
|
| + if (!checked_stride.IsValid())
|
| return false;
|
| -
|
| - *stride_in_bytes = s.ValueOrDie();
|
| + *stride_in_bytes = checked_stride.ValueOrDie();
|
| return true;
|
| - case gfx::GpuMemoryBuffer::RGBX_8888:
|
| - NOTREACHED();
|
| - return false;
|
| }
|
| -
|
| NOTREACHED();
|
| return false;
|
| }
|
| @@ -355,8 +359,7 @@ void GLImageMemory::DoBindTexImage(unsigned target) {
|
| 0, // y-offset
|
| size_.width(), size_.height(),
|
| DataFormat(format_),
|
| - SizeInBytes(size_, format_),
|
| - memory_);
|
| + SizeInBytes(size_, format_), memory_);
|
| } else {
|
| glTexSubImage2D(GL_TEXTURE_2D,
|
| 0, // mip level
|
|
|