summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcastagna <dcastagna@chromium.org>2015-04-08 13:52:56 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-08 20:53:26 +0000
commit51f60b27d0a7c8f1d39674fec24f73e9b55f04e6 (patch)
tree6f0d74c878e12c750fc01f5168234ea8b1f7fa0b
parent1abe5b4643edb113d9ce3ac58c69d40967d74cc5 (diff)
downloadchromium_src-51f60b27d0a7c8f1d39674fec24f73e9b55f04e6.zip
chromium_src-51f60b27d0a7c8f1d39674fec24f73e9b55f04e6.tar.gz
chromium_src-51f60b27d0a7c8f1d39674fec24f73e9b55f04e6.tar.bz2
Add R_8 GPU memory buffers format.
GpuMemoryBuffer::Format::R_8 should be used to represent textures with only one channel, the associated image should have GL_R8/GL_R8_EXT as internal format. With this CL the only implementation of GpuMemoryBuffer that supports R_8 is GLImageMemory, it expects a 4 bytes row alignment (4 is the default value for GL_PACK_ALIGNMENT). BUG= Review URL: https://codereview.chromium.org/1051503003 Cr-Commit-Position: refs/heads/master@{#324281}
-rw-r--r--cc/test/test_gpu_memory_buffer_manager.cc4
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl.cc28
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc2
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc1
-rw-r--r--content/common/gpu/gpu_memory_buffer_factory_io_surface.cc2
-rw-r--r--content/common/gpu/gpu_memory_buffer_factory_shared_memory.cc8
-rw-r--r--gpu/GLES2/extensions/CHROMIUM/CHROMIUM_image.txt13
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc1
-rw-r--r--gpu/command_buffer/service/feature_info.cc2
-rw-r--r--gpu/command_buffer/service/image_factory.cc5
-rw-r--r--gpu/command_buffer/service/in_process_command_buffer.cc2
-rw-r--r--gpu/command_buffer/tests/gl_gpu_memory_buffer_unittest.cc12
-rw-r--r--gpu/command_buffer/tests/gl_manager.cc4
-rw-r--r--ui/gfx/gpu_memory_buffer.h1
-rw-r--r--ui/gl/gl_image_linux_dma_buffer.cc5
-rw-r--r--ui/gl/gl_image_memory.cc36
-rw-r--r--ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc1
17 files changed, 94 insertions, 33 deletions
diff --git a/cc/test/test_gpu_memory_buffer_manager.cc b/cc/test/test_gpu_memory_buffer_manager.cc
index 8887feb..a3cd357 100644
--- a/cc/test/test_gpu_memory_buffer_manager.cc
+++ b/cc/test/test_gpu_memory_buffer_manager.cc
@@ -18,6 +18,7 @@ size_t NumberOfPlanesForGpuMemoryBufferFormat(
case gfx::GpuMemoryBuffer::Format::DXT1:
case gfx::GpuMemoryBuffer::Format::DXT5:
case gfx::GpuMemoryBuffer::Format::ETC1:
+ case gfx::GpuMemoryBuffer::Format::R_8:
case gfx::GpuMemoryBuffer::Format::RGBA_8888:
case gfx::GpuMemoryBuffer::Format::RGBX_8888:
case gfx::GpuMemoryBuffer::Format::BGRA_8888:
@@ -36,6 +37,7 @@ size_t SubsamplingFactor(gfx::GpuMemoryBuffer::Format format, int plane) {
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::RGBX_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
@@ -64,6 +66,8 @@ size_t StrideInBytes(size_t width,
DCHECK_EQ(plane, 0);
DCHECK_EQ(width % 2, 0U);
return width / 2;
+ case gfx::GpuMemoryBuffer::R_8:
+ return (width + 3) & ~0x3;
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::RGBX_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl.cc b/content/common/gpu/client/gpu_memory_buffer_impl.cc
index b8284ec..53b9b29 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl.cc
@@ -85,6 +85,7 @@ size_t GpuMemoryBufferImpl::NumberOfPlanesForGpuMemoryBufferFormat(
case DXT1:
case DXT5:
case ETC1:
+ case R_8:
case RGBA_8888:
case RGBX_8888:
case BGRA_8888:
@@ -101,6 +102,7 @@ bool GpuMemoryBufferImpl::StrideInBytes(size_t width,
Format format,
int plane,
size_t* stride_in_bytes) {
+ base::CheckedNumeric<size_t> checked_stride = width;
switch (format) {
case ATCIA:
case DXT5:
@@ -111,26 +113,29 @@ bool GpuMemoryBufferImpl::StrideInBytes(size_t width,
case DXT1:
case ETC1:
DCHECK_EQ(plane, 0);
- DCHECK_EQ(width % 2, 0U);
+ DCHECK_EQ(width % 2, 0u);
*stride_in_bytes = width / 2;
return true;
- case RGBA_8888:
+ case R_8:
+ checked_stride += 3;
+ if (!checked_stride.IsValid())
+ return false;
+ *stride_in_bytes = checked_stride.ValueOrDie() & ~0x3;
+ return true;
case RGBX_8888:
- case BGRA_8888: {
- base::CheckedNumeric<size_t> s = width;
- DCHECK_EQ(plane, 0);
- s *= 4;
- if (!s.IsValid())
+ case RGBA_8888:
+ case BGRA_8888:
+ checked_stride *= 4;
+ if (!checked_stride.IsValid())
return false;
- *stride_in_bytes = s.ValueOrDie();
+ *stride_in_bytes = checked_stride.ValueOrDie();
return true;
- }
- case YUV_420: {
+ case YUV_420:
DCHECK_EQ(width % 2, 0u);
*stride_in_bytes = width / SubsamplingFactor(format, plane);
return true;
- }
}
+
NOTREACHED();
return false;
}
@@ -145,6 +150,7 @@ size_t GpuMemoryBufferImpl::SubsamplingFactor(
case DXT1:
case DXT5:
case ETC1:
+ case R_8:
case RGBA_8888:
case RGBX_8888:
case BGRA_8888:
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc b/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
index 9155205..41696c6 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
@@ -127,6 +127,7 @@ bool GpuMemoryBufferImplSharedMemory::IsFormatSupported(Format format) {
case DXT1:
case DXT5:
case ETC1:
+ case R_8:
case RGBA_8888:
case BGRA_8888:
case YUV_420:
@@ -152,6 +153,7 @@ bool GpuMemoryBufferImplSharedMemory::IsSizeValidForFormat(
// Compressed images must have a width and height that's evenly divisible
// by the block size.
return size.width() % 4 == 0 && size.height() % 4 == 0;
+ case R_8:
case RGBA_8888:
case BGRA_8888:
case RGBX_8888:
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc b/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc
index 8ed95a9..7a0831d 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc
@@ -21,6 +21,7 @@ int WindowFormat(gfx::GpuMemoryBuffer::Format format) {
case gfx::GpuMemoryBuffer::DXT1:
case gfx::GpuMemoryBuffer::DXT5:
case gfx::GpuMemoryBuffer::ETC1:
+ case gfx::GpuMemoryBuffer::R_8:
case gfx::GpuMemoryBuffer::RGBX_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
case gfx::GpuMemoryBuffer::YUV_420:
diff --git a/content/common/gpu/gpu_memory_buffer_factory_io_surface.cc b/content/common/gpu/gpu_memory_buffer_factory_io_surface.cc
index 2737a4d..574b4f6 100644
--- a/content/common/gpu/gpu_memory_buffer_factory_io_surface.cc
+++ b/content/common/gpu/gpu_memory_buffer_factory_io_surface.cc
@@ -36,6 +36,7 @@ int32 BytesPerPixel(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::RGBX_8888:
case gfx::GpuMemoryBuffer::YUV_420:
@@ -56,6 +57,7 @@ int32 PixelFormat(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::RGBX_8888:
case gfx::GpuMemoryBuffer::YUV_420:
diff --git a/content/common/gpu/gpu_memory_buffer_factory_shared_memory.cc b/content/common/gpu/gpu_memory_buffer_factory_shared_memory.cc
index 992decd..4c8f0e9 100644
--- a/content/common/gpu/gpu_memory_buffer_factory_shared_memory.cc
+++ b/content/common/gpu/gpu_memory_buffer_factory_shared_memory.cc
@@ -23,10 +23,10 @@ void GpuMemoryBufferFactorySharedMemory::
GetSupportedGpuMemoryBufferConfigurations(
std::vector<Configuration>* configurations) {
const Configuration supported_configurations[] = {
- { gfx::GpuMemoryBuffer::RGBA_8888, gfx::GpuMemoryBuffer::MAP },
- { gfx::GpuMemoryBuffer::BGRA_8888, gfx::GpuMemoryBuffer::MAP },
- { gfx::GpuMemoryBuffer::YUV_420, gfx::GpuMemoryBuffer::MAP }
- };
+ {gfx::GpuMemoryBuffer::R_8, gfx::GpuMemoryBuffer::MAP},
+ {gfx::GpuMemoryBuffer::RGBA_8888, gfx::GpuMemoryBuffer::MAP},
+ {gfx::GpuMemoryBuffer::BGRA_8888, gfx::GpuMemoryBuffer::MAP},
+ {gfx::GpuMemoryBuffer::YUV_420, gfx::GpuMemoryBuffer::MAP}};
configurations->assign(
supported_configurations,
supported_configurations + arraysize(supported_configurations));
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_image.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_image.txt
index 645a3f4..e0ba066 100644
--- a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_image.txt
+++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_image.txt
@@ -15,6 +15,7 @@ Dependencies
OpenGL ES 2.0 is required.
EXT_texture_format_BGRA8888 affects the definition of this extension.
+ ARB_texture_rg affects the definition of this extension.
Overview
@@ -45,7 +46,7 @@ New Procedures and Functions
INVALID_VALUE is generated if <width> or <height> is nonpositive.
INVALID_ENUM is generated if <internalformat> is not one of
- RGB, RGBA or GL_BGRA_EXT.
+ R8, RGB, RGBA or BGRA_EXT.
void DestroyImageCHROMIUM(GLuint image_id)
@@ -56,7 +57,12 @@ New Procedures and Functions
Dependencies on EXT_texture_format_BGRA8888
If EXT_texture_format_BGRA8888 is not supported:
- * delete any reference to the GL_BGRA_EXT format.
+ * delete any reference to the BGRA_EXT format.
+
+Dependencies on ARB_texture_rg
+
+ If ARB_texture_rg is not supported:
+ * delete any reference to the R8 format.
Errors
@@ -71,4 +77,5 @@ Revision History
5/9/2013 Documented the extension
4/30/2014 Moved usage flag to creation function.
10/7/2014 Remove map/unmap API.
- 4/6/2015 Add GL_BGRA_EXT format.
+ 4/6/2015 Add BGRA_EXT format.
+ 2/7/2015 Add R8 format.
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index c93017c..1327826 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -4829,6 +4829,7 @@ namespace {
bool ValidImageFormat(GLenum internalformat) {
switch (internalformat) {
+ case GL_R8:
case GL_RGB:
case GL_RGBA:
case GL_BGRA_EXT:
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index dcbdb8f..5003ea8 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -1070,7 +1070,9 @@ void FeatureInfo::InitializeFeatures() {
validators_.texture_format.AddValue(GL_RED_EXT);
validators_.texture_format.AddValue(GL_RG_EXT);
validators_.texture_internal_format.AddValue(GL_RED_EXT);
+ validators_.texture_internal_format.AddValue(GL_R8_EXT);
validators_.texture_internal_format.AddValue(GL_RG_EXT);
+ validators_.texture_internal_format.AddValue(GL_RG8_EXT);
validators_.read_pixel_format.AddValue(GL_RED_EXT);
validators_.read_pixel_format.AddValue(GL_RG_EXT);
validators_.render_buffer_format.AddValue(GL_R8_EXT);
diff --git a/gpu/command_buffer/service/image_factory.cc b/gpu/command_buffer/service/image_factory.cc
index f09cfb8..74994ff 100644
--- a/gpu/command_buffer/service/image_factory.cc
+++ b/gpu/command_buffer/service/image_factory.cc
@@ -19,6 +19,8 @@ ImageFactory::~ImageFactory() {
gfx::GpuMemoryBuffer::Format ImageFactory::ImageFormatToGpuMemoryBufferFormat(
unsigned internalformat) {
switch (internalformat) {
+ case GL_R8:
+ return gfx::GpuMemoryBuffer::R_8;
case GL_RGB:
return gfx::GpuMemoryBuffer::RGBX_8888;
case GL_RGBA:
@@ -78,6 +80,8 @@ bool ImageFactory::IsGpuMemoryBufferFormatSupported(
return capabilities.texture_format_dxt5;
case gfx::GpuMemoryBuffer::ETC1:
return capabilities.texture_format_etc1;
+ case gfx::GpuMemoryBuffer::R_8:
+ return capabilities.texture_rg;
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::RGBX_8888:
case gfx::GpuMemoryBuffer::YUV_420:
@@ -101,6 +105,7 @@ bool ImageFactory::IsImageSizeValidForGpuMemoryBufferFormat(
// Compressed images must have a width and height that's evenly divisible
// by the block size.
return size.width() % 4 == 0 && size.height() % 4 == 0;
+ case gfx::GpuMemoryBuffer::R_8:
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
case gfx::GpuMemoryBuffer::RGBX_8888:
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index 65986f8..71a6532 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -713,6 +713,8 @@ int32 InProcessCommandBuffer::CreateImage(ClientBuffer buffer,
int32 new_id = next_image_id_.GetNext();
+ DCHECK(gpu::ImageFactory::IsGpuMemoryBufferFormatSupported(
+ gpu_memory_buffer->GetFormat(), capabilities_));
DCHECK(gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat(
internalformat, gpu_memory_buffer->GetFormat()));
diff --git a/gpu/command_buffer/tests/gl_gpu_memory_buffer_unittest.cc b/gpu/command_buffer/tests/gl_gpu_memory_buffer_unittest.cc
index 9368da5..51b3640 100644
--- a/gpu/command_buffer/tests/gl_gpu_memory_buffer_unittest.cc
+++ b/gpu/command_buffer/tests/gl_gpu_memory_buffer_unittest.cc
@@ -80,6 +80,9 @@ SHADER(
std::vector<uint8> GetTexturePixel(const gfx::GpuMemoryBuffer::Format format) {
std::vector<uint8> pixel;
switch (format) {
+ case gfx::GpuMemoryBuffer::R_8:
+ pixel.push_back(255u);
+ return pixel;
case gfx::GpuMemoryBuffer::RGBA_8888:
pixel.push_back(255u);
pixel.push_back(0u);
@@ -111,6 +114,7 @@ std::vector<uint8> GetFramebufferPixel(
const gfx::GpuMemoryBuffer::Format format) {
std::vector<uint8> pixel;
switch (format) {
+ case gfx::GpuMemoryBuffer::R_8:
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
pixel.push_back(255u);
@@ -135,6 +139,8 @@ std::vector<uint8> GetFramebufferPixel(
GLenum InternalFormat(gfx::GpuMemoryBuffer::Format format) {
switch (format) {
+ case gfx::GpuMemoryBuffer::R_8:
+ return GL_R8;
case gfx::GpuMemoryBuffer::RGBA_8888:
return GL_RGBA;
case gfx::GpuMemoryBuffer::BGRA_8888:
@@ -158,6 +164,9 @@ GLenum InternalFormat(gfx::GpuMemoryBuffer::Format format) {
// An end to end test that tests the whole GpuMemoryBuffer lifecycle.
TEST_P(GpuMemoryBufferTest, Lifecycle) {
+ ASSERT_TRUE((GetParam() != gfx::GpuMemoryBuffer::R_8) ||
+ gl_.GetCapabilities().texture_rg);
+
GLuint texture_id = 0;
glGenTextures(1, &texture_id);
ASSERT_NE(0u, texture_id);
@@ -243,7 +252,8 @@ TEST_P(GpuMemoryBufferTest, Lifecycle) {
INSTANTIATE_TEST_CASE_P(GpuMemoryBufferTests,
GpuMemoryBufferTest,
- ::testing::Values(gfx::GpuMemoryBuffer::RGBA_8888,
+ ::testing::Values(gfx::GpuMemoryBuffer::R_8,
+ gfx::GpuMemoryBuffer::RGBA_8888,
gfx::GpuMemoryBuffer::BGRA_8888));
} // namespace gles2
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 3a3d7e9..2b6d06d 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -46,6 +46,7 @@ size_t NumberOfPlanesForGpuMemoryBufferFormat(
case gfx::GpuMemoryBuffer::Format::DXT1:
case gfx::GpuMemoryBuffer::Format::DXT5:
case gfx::GpuMemoryBuffer::Format::ETC1:
+ case gfx::GpuMemoryBuffer::Format::R_8:
case gfx::GpuMemoryBuffer::Format::RGBA_8888:
case gfx::GpuMemoryBuffer::Format::RGBX_8888:
case gfx::GpuMemoryBuffer::Format::BGRA_8888:
@@ -64,6 +65,7 @@ size_t SubsamplingFactor(gfx::GpuMemoryBuffer::Format format, int plane) {
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::RGBX_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
@@ -92,6 +94,8 @@ size_t StrideInBytes(size_t width,
DCHECK_EQ(plane, 0);
DCHECK_EQ(width % 2, 0U);
return width / 2;
+ case gfx::GpuMemoryBuffer::R_8:
+ return (width + 3) & ~0x3;
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::BGRA_8888:
DCHECK_EQ(plane, 0);
diff --git a/ui/gfx/gpu_memory_buffer.h b/ui/gfx/gpu_memory_buffer.h
index 6383a13..5b1d47e 100644
--- a/ui/gfx/gpu_memory_buffer.h
+++ b/ui/gfx/gpu_memory_buffer.h
@@ -48,6 +48,7 @@ class GFX_EXPORT GpuMemoryBuffer {
DXT1,
DXT5,
ETC1,
+ R_8,
RGBA_8888,
RGBX_8888,
BGRA_8888,
diff --git a/ui/gl/gl_image_linux_dma_buffer.cc b/ui/gl/gl_image_linux_dma_buffer.cc
index 080c9b5..ff18f8f 100644
--- a/ui/gl/gl_image_linux_dma_buffer.cc
+++ b/ui/gl/gl_image_linux_dma_buffer.cc
@@ -37,6 +37,7 @@ bool ValidFormat(unsigned internalformat, 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:
case gfx::GpuMemoryBuffer::YUV_420:
@@ -53,6 +54,7 @@ bool ValidFormat(unsigned internalformat, gfx::GpuMemoryBuffer::Format format) {
case gfx::GpuMemoryBuffer::DXT1:
case gfx::GpuMemoryBuffer::DXT5:
case gfx::GpuMemoryBuffer::ETC1:
+ case gfx::GpuMemoryBuffer::R_8:
case gfx::GpuMemoryBuffer::RGBX_8888:
case gfx::GpuMemoryBuffer::RGBA_8888:
case gfx::GpuMemoryBuffer::YUV_420:
@@ -60,6 +62,8 @@ bool ValidFormat(unsigned internalformat, gfx::GpuMemoryBuffer::Format format) {
}
NOTREACHED();
return false;
+ case GL_R8:
+ return false;
default:
return false;
}
@@ -76,6 +80,7 @@ EGLint FourCC(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::YUV_420:
NOTREACHED();
diff --git a/ui/gl/gl_image_memory.cc b/ui/gl/gl_image_memory.cc
index ff9c97e..908ce7e 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
diff --git a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
index 145b3e6..9fdc293 100644
--- a/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
+++ b/ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.cc
@@ -95,6 +95,7 @@ SurfaceFactoryOzone::BufferFormat GetOzoneFormatFor(
case gfx::GpuMemoryBuffer::DXT1:
case gfx::GpuMemoryBuffer::DXT5:
case gfx::GpuMemoryBuffer::ETC1:
+ case gfx::GpuMemoryBuffer::R_8:
case gfx::GpuMemoryBuffer::BGRA_8888:
case gfx::GpuMemoryBuffer::YUV_420:
NOTREACHED();