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

Unified Diff: ui/gl/async_pixel_transfer_delegate_android.cc

Issue 12221161: gpu: Enable async uploads again. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adjust DCHECKs Created 7 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/async_pixel_transfer_delegate_android.cc
diff --git a/ui/gl/async_pixel_transfer_delegate_android.cc b/ui/gl/async_pixel_transfer_delegate_android.cc
index e96611aef25f9c93df2b54ff6027d4f3d646707d..048edc40c71a8b2f08dcd49ccdd56eb4500ef54f 100644
--- a/ui/gl/async_pixel_transfer_delegate_android.cc
+++ b/ui/gl/async_pixel_transfer_delegate_android.cc
@@ -184,13 +184,12 @@ class TransferStateInternal : public base::RefCounted<TransferStateInternal> {
TRACE_EVENT2("gpu", "BindAsyncTransfer glEGLImageTargetTexture2DOES",
"width", late_bind_define_params_.width,
"height", late_bind_define_params_.height);
-
DCHECK(bound_params);
DCHECK(texture_id_);
- DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_);
*bound_params = late_bind_define_params_;
if (!needs_late_bind_)
return;
+ DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_);
// We can only change the active texture and unit 0,
// as that is all that will be restored.
@@ -385,15 +384,6 @@ class AsyncPixelTransferDelegateAndroid
DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateAndroid);
};
-namespace {
-// Imagination has some odd problems still.
-bool IsImagination() {
- std::string vendor;
- vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
- return vendor.find("Imagination") != std::string::npos;
-}
-}
-
// We only used threaded uploads when we can:
// - Create EGLImages out of OpenGL textures (EGL_KHR_gl_texture_2D_image)
// - Bind EGLImages to OpenGL textures (GL_OES_EGL_image)
@@ -405,8 +395,7 @@ scoped_ptr<AsyncPixelTransferDelegate>
context->HasExtension("EGL_KHR_image") &&
context->HasExtension("EGL_KHR_image_base") &&
context->HasExtension("EGL_KHR_gl_texture_2D_image") &&
- context->HasExtension("GL_OES_EGL_image") &&
- !IsImagination()) {
+ context->HasExtension("GL_OES_EGL_image")) {
return make_scoped_ptr(
static_cast<AsyncPixelTransferDelegate*>(
new AsyncPixelTransferDelegateAndroid()));
@@ -767,12 +756,27 @@ bool AsyncPixelTransferDelegateAndroid::WorkAroundAsyncTexSubImage2D(
return false;
// Fall back on a synchronous stub as we don't have a known fast path.
+ // Also, older ICS drivers crash when we do any glTexSubImage2D on the
+ // same thread. To work around this we do glTexImage2D instead. Since
+ // we didn't create an EGLImage for this texture (see above), this is
+ // okay, but it limits this API to full updates for now.
+ DCHECK(!state->egl_image_);
+ DCHECK_EQ(tex_params.xoffset, 0);
+ DCHECK_EQ(tex_params.yoffset, 0);
+ DCHECK_EQ(state->late_bind_define_params_.width, tex_params.width);
+ DCHECK_EQ(state->late_bind_define_params_.height, tex_params.height);
+ DCHECK_EQ(state->late_bind_define_params_.level, tex_params.level);
+ DCHECK_EQ(state->late_bind_define_params_.format, tex_params.format);
+ DCHECK_EQ(state->late_bind_define_params_.type, tex_params.type);
+
void* data = GetAddress(mem_params.shared_memory,
mem_params.shm_data_offset);
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
{
TRACE_EVENT0("gpu", "glTexSubImage2D");
- DoTexSubImage2D(tex_params, data);
+ // Note we use late_bind_define_params_ instead of tex_params.
+ // The DCHECKs above verify this is always the same.
+ DoTexImage2D(state->late_bind_define_params_, data);
}
texture_upload_count_++;
total_texture_upload_time_ += base::TimeTicks::HighResNow() - begin_time;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698