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

Unified Diff: cc/resources/resource_provider.cc

Issue 1186393004: gpu: Remove async texture uploads. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 4 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 | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 848524f014356e3b2bb49e947ed0fed61aa9ddb0..e9082bbd01dee37b6251b13d50a9623cb7a82892 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -217,8 +217,6 @@ ResourceProvider::Resource::Resource(GLuint texture_id,
locked_for_write(false),
lost(false),
marked_for_deletion(false),
- pending_set_pixels(false),
- set_pixels_completion_forced(false),
allocated(false),
read_lock_fences_enabled(false),
has_shared_bitmap_id(false),
@@ -260,8 +258,6 @@ ResourceProvider::Resource::Resource(uint8_t* pixels,
locked_for_write(false),
lost(false),
marked_for_deletion(false),
- pending_set_pixels(false),
- set_pixels_completion_forced(false),
allocated(false),
read_lock_fences_enabled(false),
has_shared_bitmap_id(!!bitmap),
@@ -304,8 +300,6 @@ ResourceProvider::Resource::Resource(const SharedBitmapId& bitmap_id,
locked_for_write(false),
lost(false),
marked_for_deletion(false),
- pending_set_pixels(false),
- set_pixels_completion_forced(false),
allocated(false),
read_lock_fences_enabled(false),
has_shared_bitmap_id(true),
@@ -545,7 +539,7 @@ void ResourceProvider::DeleteResource(ResourceId id) {
Resource* resource = &it->second;
DCHECK(!resource->marked_for_deletion);
DCHECK_EQ(resource->imported_count, 0);
- DCHECK(resource->pending_set_pixels || !resource->locked_for_write);
+ DCHECK(!resource->locked_for_write);
if (resource->exported_count > 0 || resource->lock_for_read_count > 0 ||
!ReadLockFenceHasPassed(resource)) {
@@ -669,7 +663,6 @@ void ResourceProvider::CopyToResource(ResourceId id,
dest.writePixels(source_info, image, image_stride, 0, 0);
} else {
DCHECK(resource->gl_id);
- DCHECK(!resource->pending_set_pixels);
DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D));
GLES2Interface* gl = ContextGL();
DCHECK(gl);
@@ -707,10 +700,8 @@ ResourceProvider::Resource* ResourceProvider::GetResource(ResourceId id) {
const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
Resource* resource = GetResource(id);
- DCHECK(!resource->locked_for_write ||
- resource->set_pixels_completion_forced) <<
- "locked for write: " << resource->locked_for_write <<
- " pixels completion forced: " << resource->set_pixels_completion_forced;
+ DCHECK(!resource->locked_for_write) << "locked for write: "
+ << resource->locked_for_write;
DCHECK_EQ(resource->exported_count, 0);
// Uninitialized! Call SetPixels or LockForWrite first.
DCHECK(resource->allocated);
@@ -1467,106 +1458,6 @@ void ResourceProvider::DeleteAndReturnUnusedResourcesToChild(
}
}
-void ResourceProvider::AcquirePixelBuffer(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::AcquirePixelBuffer");
-
- Resource* resource = GetResource(id);
- DCHECK(resource->origin == Resource::INTERNAL);
- DCHECK_EQ(resource->exported_count, 0);
- DCHECK(!resource->image_id);
- DCHECK_NE(ETC1, resource->format);
-
- DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- if (!resource->gl_pixel_buffer_id)
- resource->gl_pixel_buffer_id = buffer_id_allocator_->NextId();
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- resource->gl_pixel_buffer_id);
- size_t resource_bytes = ResourceUtil::UncheckedSizeInBytesAligned<size_t>(
- resource->size, resource->format);
- gl->BufferData(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, resource_bytes, NULL,
- GL_DYNAMIC_DRAW);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
-}
-
-void ResourceProvider::ReleasePixelBuffer(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::ReleasePixelBuffer");
-
- Resource* resource = GetResource(id);
- DCHECK(resource->origin == Resource::INTERNAL);
- DCHECK_EQ(resource->exported_count, 0);
- DCHECK(!resource->image_id);
-
- // The pixel buffer can be released while there is a pending "set pixels"
- // if completion has been forced. Any shared memory associated with this
- // pixel buffer will not be freed until the waitAsyncTexImage2DCHROMIUM
- // command has been processed on the service side. It is also safe to
- // reuse any query id associated with this resource before they complete
- // as each new query has a unique submit count.
- if (resource->pending_set_pixels) {
- DCHECK(resource->set_pixels_completion_forced);
- resource->pending_set_pixels = false;
- resource->locked_for_write = false;
- }
-
- DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
- if (!resource->gl_pixel_buffer_id)
- return;
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- resource->gl_pixel_buffer_id);
- gl->BufferData(
- GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0, NULL, GL_DYNAMIC_DRAW);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
-}
-
-uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id, int* stride) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::MapPixelBuffer");
-
- Resource* resource = GetResource(id);
- DCHECK(resource->origin == Resource::INTERNAL);
- DCHECK_EQ(resource->exported_count, 0);
- DCHECK(!resource->image_id);
-
- *stride = 0;
- DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- DCHECK(resource->gl_pixel_buffer_id);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- resource->gl_pixel_buffer_id);
- uint8_t* image = static_cast<uint8_t*>(gl->MapBufferCHROMIUM(
- GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, GL_WRITE_ONLY));
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
- // Buffer is required to be 4-byte aligned.
- CHECK(!(reinterpret_cast<intptr_t>(image) & 3));
- return image;
-}
-
-void ResourceProvider::UnmapPixelBuffer(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::UnmapPixelBuffer");
-
- Resource* resource = GetResource(id);
- DCHECK(resource->origin == Resource::INTERNAL);
- DCHECK_EQ(resource->exported_count, 0);
- DCHECK(!resource->image_id);
-
- DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- DCHECK(resource->gl_pixel_buffer_id);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- resource->gl_pixel_buffer_id);
- gl->UnmapBufferCHROMIUM(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
-}
-
GLenum ResourceProvider::BindForSampling(ResourceId resource_id,
GLenum unit,
GLenum filter) {
@@ -1576,7 +1467,7 @@ GLenum ResourceProvider::BindForSampling(ResourceId resource_id,
DCHECK(it != resources_.end());
Resource* resource = &it->second;
DCHECK(resource->lock_for_read_count);
- DCHECK(!resource->locked_for_write || resource->set_pixels_completion_forced);
+ DCHECK(!resource->locked_for_write);
ScopedSetActiveTexture scoped_active_tex(gl, unit);
GLenum target = resource->target;
@@ -1593,115 +1484,6 @@ GLenum ResourceProvider::BindForSampling(ResourceId resource_id,
return target;
}
-void ResourceProvider::BeginSetPixels(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::BeginSetPixels");
-
- Resource* resource = GetResource(id);
- DCHECK(!resource->pending_set_pixels);
-
- LazyCreate(resource);
- DCHECK(resource->origin == Resource::INTERNAL);
- DCHECK(resource->gl_id || resource->allocated);
- DCHECK(ReadLockFenceHasPassed(resource));
- DCHECK(!resource->image_id);
-
- bool allocate = !resource->allocated;
- resource->allocated = true;
- LockForWrite(id);
-
- DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource->type);
- DCHECK(resource->gl_id);
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- DCHECK(resource->gl_pixel_buffer_id);
- DCHECK_EQ(resource->target, static_cast<GLenum>(GL_TEXTURE_2D));
- gl->BindTexture(GL_TEXTURE_2D, resource->gl_id);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM,
- resource->gl_pixel_buffer_id);
- if (!resource->gl_upload_query_id)
- gl->GenQueriesEXT(1, &resource->gl_upload_query_id);
- gl->BeginQueryEXT(GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
- resource->gl_upload_query_id);
- if (allocate) {
- gl->AsyncTexImage2DCHROMIUM(GL_TEXTURE_2D,
- 0, /* level */
- GLInternalFormat(resource->format),
- resource->size.width(),
- resource->size.height(),
- 0, /* border */
- GLDataFormat(resource->format),
- GLDataType(resource->format),
- NULL);
- } else {
- gl->AsyncTexSubImage2DCHROMIUM(GL_TEXTURE_2D,
- 0, /* level */
- 0, /* x */
- 0, /* y */
- resource->size.width(),
- resource->size.height(),
- GLDataFormat(resource->format),
- GLDataType(resource->format),
- NULL);
- }
- gl->EndQueryEXT(GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM);
- gl->BindBuffer(GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM, 0);
-
- resource->pending_set_pixels = true;
- resource->set_pixels_completion_forced = false;
-}
-
-void ResourceProvider::ForceSetPixelsToComplete(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::ForceSetPixelsToComplete");
-
- Resource* resource = GetResource(id);
-
- DCHECK(resource->locked_for_write);
- DCHECK(resource->pending_set_pixels);
- DCHECK(!resource->set_pixels_completion_forced);
-
- if (resource->gl_id) {
- GLES2Interface* gl = ContextGL();
- gl->BindTexture(GL_TEXTURE_2D, resource->gl_id);
- gl->WaitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D);
- gl->BindTexture(GL_TEXTURE_2D, 0);
- }
-
- resource->set_pixels_completion_forced = true;
-}
-
-bool ResourceProvider::DidSetPixelsComplete(ResourceId id) {
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
- "ResourceProvider::DidSetPixelsComplete");
-
- Resource* resource = GetResource(id);
-
- DCHECK(resource->locked_for_write);
- DCHECK(resource->pending_set_pixels);
-
- if (resource->gl_id) {
- GLES2Interface* gl = ContextGL();
- DCHECK(gl);
- DCHECK(resource->gl_upload_query_id);
- GLuint complete = 1;
- gl->GetQueryObjectuivEXT(
- resource->gl_upload_query_id, GL_QUERY_RESULT_AVAILABLE_EXT, &complete);
- if (!complete)
- return false;
- }
-
- resource->pending_set_pixels = false;
- UnlockForWrite(resource);
-
- // Async set pixels commands are not necessarily processed in-sequence with
- // drawing commands. Read lock fences are required to ensure that async
- // commands don't access the resource while used for drawing.
- resource->read_lock_fences_enabled = true;
-
- return true;
-}
-
void ResourceProvider::CreateForTesting(ResourceId id) {
LazyCreate(GetResource(id));
}
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698