Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(452)

Unified Diff: cc/scheduler/texture_uploader.cc

Issue 27973002: cc: Adding ETC1 support to UIResourceBitmap and ResourceProvider (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments, added test, dcheck for compressed texture availability Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/scheduler/texture_uploader.cc
diff --git a/cc/scheduler/texture_uploader.cc b/cc/scheduler/texture_uploader.cc
index cebc98689118949bb9081a33b215552133db0aa4..3bafa194d31c558f35c72688496c0855ec4c97a9 100644
--- a/cc/scheduler/texture_uploader.cc
+++ b/cc/scheduler/texture_uploader.cc
@@ -76,13 +76,15 @@ unsigned TextureUploader::Query::Value() {
TextureUploader::TextureUploader(WebKit::WebGraphicsContext3D* context,
bool use_map_tex_sub_image,
- bool use_shallow_flush)
+ bool use_shallow_flush,
+ bool use_compressed_texture_etc1)
: context_(context),
num_blocking_texture_uploads_(0),
use_map_tex_sub_image_(use_map_tex_sub_image),
sub_image_size_(0),
use_shallow_flush_(use_shallow_flush),
- num_texture_uploads_since_last_flush_(0) {
+ num_texture_uploads_since_last_flush_(0),
+ use_compressed_texture_etc1_(use_compressed_texture_etc1) {
no sievers 2013/10/23 20:33:15 nit: I'd rename this to 'have_compressed_texture_e
powei 2013/10/23 22:20:07 Done. Removed.
for (size_t i = kUploadHistorySizeInitial; i > 0; i--)
textures_per_second_history_.insert(kDefaultEstimatedTexturesPerSecond);
}
@@ -186,11 +188,17 @@ void TextureUploader::UploadWithTexSubImage(const uint8* image,
return;
DCHECK(image);
+ if (format == ETC1) {
+ UploadWithTexSubImageETC1(
+ image, image_rect, source_rect, dest_offset, format);
+ return;
+ }
+
// Offset from image-rect to source-rect.
gfx::Vector2d offset(source_rect.origin() - image_rect.origin());
const uint8* pixel_source;
- unsigned bytes_per_pixel = BytesPerPixel(format);
+ unsigned bytes_per_pixel = BitsPerPixel(format) / 8;
kaanb 2013/10/23 20:30:09 could you keep a BytesPerPixel method in resource_
powei 2013/10/23 22:20:07 Done.
// Use 4-byte row alignment (OpenGL default) for upload performance.
// Assuming that GL_UNPACK_ALIGNMENT has not changed from default.
unsigned upload_image_stride =
@@ -239,11 +247,13 @@ void TextureUploader::UploadWithMapTexSubImage(const uint8* image,
if (source_rect.IsEmpty())
return;
DCHECK(image);
+ // Compressed textures have no implementation of mapTexSubImage.
+ DCHECK_NE(ETC1, format);
// Offset from image-rect to source-rect.
gfx::Vector2d offset(source_rect.origin() - image_rect.origin());
- unsigned bytes_per_pixel = BytesPerPixel(format);
+ unsigned bytes_per_pixel = BitsPerPixel(format) / 8;
// Use 4-byte row alignment (OpenGL default) for upload performance.
// Assuming that GL_UNPACK_ALIGNMENT has not changed from default.
unsigned upload_image_stride =
@@ -285,6 +295,34 @@ void TextureUploader::UploadWithMapTexSubImage(const uint8* image,
context_->unmapTexSubImage2DCHROMIUM(pixel_dest);
}
+void TextureUploader::UploadWithTexSubImageETC1(const uint8* image,
+ gfx::Rect image_rect,
+ gfx::Rect source_rect,
+ gfx::Vector2d dest_offset,
+ ResourceFormat format) {
+ TRACE_EVENT0("cc", "TextureUploader::UploadWithTexSubImageETC1");
+ DCHECK(use_compressed_texture_etc1_);
+ // ETC1 does not support subimage uploads yet.
+ DCHECK(image_rect == source_rect);
+ DCHECK_EQ(0, dest_offset.x());
+ DCHECK_EQ(0, dest_offset.y());
+
+ gfx::Size size = source_rect.size();
+ DCHECK_EQ(0, size.width() % 4);
+ DCHECK_EQ(0, size.height() % 4);
+
+ context_->compressedTexSubImage2D(
no sievers 2013/10/23 20:33:15 Wait, I'm confused. Like your comment says above,
powei 2013/10/23 22:20:07 Done. My comment above was to discourage users fr
+ GL_TEXTURE_2D,
+ 0, /* level */
+ 0, /* x */
+ 0, /* y */
+ size.width(),
+ size.height(),
+ GLDataFormat(format),
+ Resource::MemorySizeBytes(size, format),
+ image);
+}
+
void TextureUploader::ProcessQueries() {
while (!pending_queries_.empty()) {
if (pending_queries_.front()->IsPending())

Powered by Google App Engine
This is Rietveld 408576698