Index: ui/gl/gl_image_memory.cc |
diff --git a/ui/gl/gl_image_memory.cc b/ui/gl/gl_image_memory.cc |
index ff9c97ee297255c476c2a31c607057bfe6d7051a..908ce7eb774736d12530b948b1fdb977c26756c0 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; |
@@ -55,6 +57,7 @@ bool IsCompressedFormat(gfx::GpuMemoryBuffer::Format format) { |
case gfx::GpuMemoryBuffer::ETC1: |
case gfx::GpuMemoryBuffer::YUV_420: |
return true; |
+ case gfx::GpuMemoryBuffer::R_8: |
case gfx::GpuMemoryBuffer::RGBA_8888: |
case gfx::GpuMemoryBuffer::BGRA_8888: |
case gfx::GpuMemoryBuffer::RGBX_8888: |
@@ -77,6 +80,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: |
@@ -99,6 +104,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: |
@@ -155,27 +161,30 @@ 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::ATCIA: |
+ case gfx::GpuMemoryBuffer::DXT5: |
+ *stride_in_bytes = width; |
+ return true; |
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::ATCIA: |
- case gfx::GpuMemoryBuffer::DXT5: |
- *stride_in_bytes = width; |
+ 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::RGBA_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: |
case gfx::GpuMemoryBuffer::YUV_420: |
@@ -358,8 +367,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 |