Commit 48cf8858 authored by Khushal's avatar Khushal Committed by Commit Bot

blink/images: Assume shared image mailboxes in accelerated images.

Remove all non shared image mailbox handling in
AcceleratedStaticBitmapImage and associated classes, since we can assume
that it should only be created with shared image mailboxes.

R=kbr@chromium.org

Bug: 962630
Change-Id: Ie6ce6fcd21b724580d7b40a3f2188ed46cd8ec17
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1963221
Commit-Queue: Khushal <khushalsagar@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Khushal <khushalsagar@chromium.org>
Reviewed-by: default avatarKenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#724084}
parent 82bcbd9e
......@@ -130,38 +130,26 @@ bool AcceleratedStaticBitmapImage::CopyToTexture(
// wasting overhead.
DCHECK(mailbox_texture_holder_->IsCrossThread() ||
dest_gl != ContextProviderWrapper()->ContextProvider()->ContextGL());
bool is_shared_image = mailbox_texture_holder_->GetMailbox().IsSharedImage();
DCHECK(mailbox_texture_holder_->GetMailbox().IsSharedImage());
// Get a texture id that |destProvider| knows about and copy from it.
dest_gl->WaitSyncTokenCHROMIUM(
mailbox_texture_holder_->GetSyncToken().GetConstData());
GLuint source_texture_id;
if (is_shared_image) {
source_texture_id = dest_gl->CreateAndTexStorage2DSharedImageCHROMIUM(
mailbox_texture_holder_->GetMailbox().name);
dest_gl->BeginSharedImageAccessDirectCHROMIUM(
source_texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
} else {
source_texture_id = dest_gl->CreateAndConsumeTextureCHROMIUM(
mailbox_texture_holder_->GetMailbox().name);
}
GLuint source_texture_id = dest_gl->CreateAndTexStorage2DSharedImageCHROMIUM(
mailbox_texture_holder_->GetMailbox().name);
dest_gl->BeginSharedImageAccessDirectCHROMIUM(
source_texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
dest_gl->CopySubTextureCHROMIUM(
source_texture_id, 0, dest_target, dest_texture_id, dest_level,
dest_point.X(), dest_point.Y(), source_sub_rectangle.X(),
source_sub_rectangle.Y(), source_sub_rectangle.Width(),
source_sub_rectangle.Height(), unpack_flip_y ? GL_FALSE : GL_TRUE,
GL_FALSE, unpack_premultiply_alpha ? GL_FALSE : GL_TRUE);
if (is_shared_image) {
dest_gl->EndSharedImageAccessDirectCHROMIUM(source_texture_id);
}
// This drops the |destGL| context's reference on our |m_mailbox|, but it's
// still held alive by our SkImage.
dest_gl->DeleteTextures(1, &source_texture_id);
// We need to update the texture holder's sync token to ensure that when this
// image is deleted, the texture resource will not be recycled by skia before
// the above texture copy has completed.
// mailbox is recycled or deleted, it is done after the copy operation above.
gpu::SyncToken sync_token;
dest_gl->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData());
mailbox_texture_holder_->UpdateSyncToken(sync_token);
......
......@@ -26,7 +26,6 @@ bool IsSkImageOriginTopLeft(sk_sp<SkImage> image) {
struct ReleaseContext {
scoped_refptr<TextureHolder::MailboxRef> mailbox_ref;
GLuint texture_id = 0u;
bool is_shared_image = false;
base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper;
};
......@@ -36,8 +35,7 @@ void ReleaseTexture(void* ctx) {
if (release_ctx->texture_id) {
auto* gl =
release_ctx->context_provider_wrapper->ContextProvider()->ContextGL();
if (release_ctx->is_shared_image)
gl->EndSharedImageAccessDirectCHROMIUM(release_ctx->texture_id);
gl->EndSharedImageAccessDirectCHROMIUM(release_ctx->texture_id);
gl->DeleteTextures(1u, &release_ctx->texture_id);
}
}
......@@ -63,7 +61,7 @@ SkiaTextureHolder::SkiaTextureHolder(
mailbox_texture_holder->mailbox_ref(),
mailbox_texture_holder->IsOriginTopLeft()) {
const gpu::Mailbox mailbox = mailbox_texture_holder->GetMailbox();
DCHECK(!shared_image_texture_id || mailbox.IsSharedImage());
DCHECK(mailbox.IsSharedImage());
DCHECK(!shared_image_texture_id || !mailbox_texture_holder->IsCrossThread());
const gpu::SyncToken sync_token = mailbox_texture_holder->GetSyncToken();
......@@ -86,15 +84,10 @@ SkiaTextureHolder::SkiaTextureHolder(
should_delete_texture_on_release = false;
} else {
shared_gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
if (mailbox.IsSharedImage()) {
shared_context_texture_id =
shared_gl->CreateAndTexStorage2DSharedImageCHROMIUM(mailbox.name);
shared_gl->BeginSharedImageAccessDirectCHROMIUM(
shared_context_texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
} else {
shared_context_texture_id =
shared_gl->CreateAndConsumeTextureCHROMIUM(mailbox.name);
}
shared_context_texture_id =
shared_gl->CreateAndTexStorage2DSharedImageCHROMIUM(mailbox.name);
shared_gl->BeginSharedImageAccessDirectCHROMIUM(
shared_context_texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
}
GrGLTextureInfo texture_info;
......@@ -113,7 +106,6 @@ SkiaTextureHolder::SkiaTextureHolder(
release_ctx->mailbox_ref = mailbox_ref();
if (should_delete_texture_on_release)
release_ctx->texture_id = shared_context_texture_id;
release_ctx->is_shared_image = mailbox.IsSharedImage();
release_ctx->context_provider_wrapper = ContextProviderWrapper();
image_ = SkImage::MakeFromTexture(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment