summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 03:56:46 +0000
committerhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 03:56:46 +0000
commitc70258cee199dcb248805eb0b1cb109504a3c8fc (patch)
treebdea3609f1c64e7ffa8fa8add3098f13b1410ae7
parentfe476ea9429dc2e2544fdccc3113c0ba4389c840 (diff)
downloadchromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.zip
chromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.tar.gz
chromium_src-c70258cee199dcb248805eb0b1cb109504a3c8fc.tar.bz2
Revert 163477 - Fix glTexSubImage2D for non-32bpp formats.
The non-mapped upload path for glTexSubImage2D is assuming 32bpp blindly, for all formats. TEST=local build, run on ARM (forcing non-mapped path) BUG=None Change-Id: Ib8ac46646b27faeeb8c19ebb519d321e25c1a8cb Review URL: https://chromiumcodereview.appspot.com/11229040 TBR=sheu@chromium.org Review URL: https://codereview.chromium.org/11228044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163485 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--cc/texture.cc23
-rw-r--r--cc/texture.h1
-rw-r--r--cc/texture_uploader.cc34
3 files changed, 25 insertions, 33 deletions
diff --git a/cc/texture.cc b/cc/texture.cc
index f6400eb..9fd8ebe 100644
--- a/cc/texture.cc
+++ b/cc/texture.cc
@@ -5,7 +5,6 @@
#include "config.h"
#include "cc/texture.h"
-#include "third_party/khronos/GLES2/gl2ext.h"
namespace cc {
@@ -23,27 +22,11 @@ size_t Texture::bytes() const
return memorySizeBytes(m_size, m_format);
}
-size_t Texture::bytesPerPixel(GLenum format)
-{
- unsigned int componentsPerPixel = 0;
- unsigned int bytesPerComponent = 1;
- switch (format) {
- case GL_RGBA:
- case GL_BGRA_EXT:
- componentsPerPixel = 4;
- break;
- case GL_LUMINANCE:
- componentsPerPixel = 1;
- break;
- default:
- NOTREACHED();
- }
- return componentsPerPixel * bytesPerComponent;
-}
-
size_t Texture::memorySizeBytes(const IntSize& size, GLenum format)
{
- return bytesPerPixel(format) * size.width() * size.height();
+ unsigned int componentsPerPixel = 4;
+ unsigned int bytesPerComponent = 1;
+ return componentsPerPixel * bytesPerComponent * size.width() * size.height();
}
}
diff --git a/cc/texture.h b/cc/texture.h
index af5d40b..aecec16 100644
--- a/cc/texture.h
+++ b/cc/texture.h
@@ -28,7 +28,6 @@ public:
size_t bytes() const;
- static size_t bytesPerPixel(GLenum format);
static size_t memorySizeBytes(const IntSize&, GLenum format);
private:
diff --git a/cc/texture_uploader.cc b/cc/texture_uploader.cc
index eadcd11..64b3de52 100644
--- a/cc/texture_uploader.cc
+++ b/cc/texture_uploader.cc
@@ -12,7 +12,6 @@
#include "base/debug/alias.h"
#include "base/debug/trace_event.h"
#include "base/metrics/histogram.h"
-#include "cc/texture.h"
#include "cc/prioritized_texture.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"
@@ -213,12 +212,10 @@ void TextureUploader::uploadWithTexSubImage(const uint8_t* image,
source_rect.y() - image_rect.y());
const uint8_t* pixel_source;
- unsigned int bytes_per_pixel = Texture::bytesPerPixel(format);
-
if (image_rect.width() == source_rect.width() && !offset.x()) {
- pixel_source = &image[bytes_per_pixel * offset.y() * image_rect.width()];
+ pixel_source = &image[4 * offset.y() * image_rect.width()];
} else {
- size_t needed_size = source_rect.width() * source_rect.height() * bytes_per_pixel;
+ size_t needed_size = source_rect.width() * source_rect.height() * 4;
if (m_subImageSize < needed_size) {
m_subImage.reset(new uint8_t[needed_size]);
m_subImageSize = needed_size;
@@ -226,10 +223,10 @@ void TextureUploader::uploadWithTexSubImage(const uint8_t* image,
// Strides not equal, so do a row-by-row memcpy from the
// paint results into a temp buffer for uploading.
for (int row = 0; row < source_rect.height(); ++row)
- memcpy(&m_subImage[source_rect.width() * bytes_per_pixel * row],
- &image[bytes_per_pixel * (offset.x() +
- (offset.y() + row) * image_rect.width())],
- source_rect.width() * bytes_per_pixel);
+ memcpy(&m_subImage[source_rect.width() * 4 * row],
+ &image[4 * (offset.x() +
+ (offset.y() + row) * image_rect.width())],
+ source_rect.width() * 4);
pixel_source = &m_subImage[0];
}
@@ -298,7 +295,20 @@ void TextureUploader::uploadWithMapTexSubImage(const uint8_t* image,
return;
}
- unsigned int bytes_per_pixel = Texture::bytesPerPixel(format);
+ unsigned int components_per_pixel = 0;
+ switch (format) {
+ case GL_RGBA:
+ case GL_BGRA_EXT:
+ components_per_pixel = 4;
+ break;
+ case GL_LUMINANCE:
+ components_per_pixel = 1;
+ break;
+ default:
+ NOTREACHED();
+ }
+ unsigned int bytes_per_component = 1;
+ unsigned int bytes_per_pixel = components_per_pixel * bytes_per_component;
if (image_rect.width() == source_rect.width() && !offset.x()) {
memcpy(pixel_dest,
@@ -309,8 +319,8 @@ void TextureUploader::uploadWithMapTexSubImage(const uint8_t* image,
// paint results into the pixelDest
for (int row = 0; row < source_rect.height(); ++row)
memcpy(&pixel_dest[source_rect.width() * row * bytes_per_pixel],
- &image[bytes_per_pixel * (offset.x() +
- (offset.y() + row) * image_rect.width())],
+ &image[4 * (offset.x() +
+ (offset.y() + row) * image_rect.width())],
source_rect.width() * bytes_per_pixel);
}