Refactor SharedImageRepresentationSkiaVkAndroid.
1. Refactor SharedImageRepresentationSkiaVkAndroid to make it more generic
and usable.
2. Add its implementation to be used by SharedImageBackingAHB.
Bug: 1091945
Change-Id: I42e87978168925915f08e47876c56aac05e0b5f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2287371
Reviewed-by: Peng Huang <penghuang@chromium.org>
Commit-Queue: vikas soni <vikassoni@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#786370}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 34d802c5a45c306b549e7aec956d95010a1057b3
diff --git a/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
index 89e0096..1511c11 100644
--- a/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
+++ b/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -34,8 +34,10 @@
#include "gpu/command_buffer/service/shared_image_representation_gl_texture_android.h"
#include "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
#include "gpu/command_buffer/service/shared_image_representation_skia_vk_android.h"
+#include "gpu/command_buffer/service/skia_utils.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "gpu/vulkan/vulkan_image.h"
+#include "third_party/skia/include/core/SkPromiseImageTexture.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gl/android/android_surface_control_compat.h"
@@ -177,6 +179,32 @@
DISALLOW_COPY_AND_ASSIGN(SharedImageBackingAHB);
};
+// Vk backed Skia representation of SharedImageBackingAHB.
+class SharedImageRepresentationSkiaVkAHB
+ : public SharedImageRepresentationSkiaVkAndroid {
+ public:
+ SharedImageRepresentationSkiaVkAHB(
+ SharedImageManager* manager,
+ SharedImageBackingAndroid* backing,
+ scoped_refptr<SharedContextState> context_state,
+ std::unique_ptr<VulkanImage> vulkan_image,
+ MemoryTypeTracker* tracker)
+ : SharedImageRepresentationSkiaVkAndroid(manager,
+ backing,
+ std::move(context_state),
+ tracker) {
+ DCHECK(vulkan_image);
+
+ vulkan_image_ = std::move(vulkan_image);
+ // TODO(bsalomon): Determine whether it makes sense to attempt to reuse this
+ // if the vk_info stays the same on subsequent calls.
+ promise_texture_ = SkPromiseImageTexture::Make(
+ GrBackendTexture(size().width(), size().height(),
+ CreateGrVkImageInfo(vulkan_image_.get())));
+ DCHECK(promise_texture_);
+ }
+};
+
class SharedImageRepresentationOverlayAHB
: public SharedImageRepresentationOverlay {
public:
@@ -342,9 +370,9 @@
if (!vulkan_image)
return nullptr;
- return std::make_unique<SharedImageRepresentationSkiaVkAndroid>(
+ return std::make_unique<SharedImageRepresentationSkiaVkAHB>(
manager, this, std::move(context_state), std::move(vulkan_image),
- base::ScopedFD(), tracker);
+ tracker);
}
DCHECK(context_state->GrContextIsGL());
DCHECK(hardware_buffer_handle_.is_valid());
diff --git a/command_buffer/service/shared_image_representation_skia_vk_android.cc b/command_buffer/service/shared_image_representation_skia_vk_android.cc
index 3407609..a69cd52 100644
--- a/command_buffer/service/shared_image_representation_skia_vk_android.cc
+++ b/command_buffer/service/shared_image_representation_skia_vk_android.cc
@@ -35,33 +35,25 @@
SharedImageManager* manager,
SharedImageBackingAndroid* backing,
scoped_refptr<SharedContextState> context_state,
- std::unique_ptr<VulkanImage> vulkan_image,
- base::ScopedFD init_read_fence,
MemoryTypeTracker* tracker)
: SharedImageRepresentationSkia(manager, backing, tracker),
- vulkan_image_(std::move(vulkan_image)),
- init_read_fence_(std::move(init_read_fence)),
context_state_(std::move(context_state)) {
- DCHECK(vulkan_image_);
+ DCHECK(backing);
DCHECK(context_state_);
DCHECK(context_state_->vk_context_provider());
- // TODO(bsalomon): Determine whether it makes sense to attempt to reuse this
- // if the vk_info stays the same on subsequent calls.
- promise_texture_ = SkPromiseImageTexture::Make(
- GrBackendTexture(size().width(), size().height(),
- CreateGrVkImageInfo(vulkan_image_.get())));
- DCHECK(promise_texture_);
}
SharedImageRepresentationSkiaVkAndroid::
~SharedImageRepresentationSkiaVkAndroid() {
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
surface_.reset();
- DCHECK(vulkan_image_);
- VulkanFenceHelper* fence_helper =
- context_state_->vk_context_provider()->GetDeviceQueue()->GetFenceHelper();
- fence_helper->EnqueueVulkanObjectCleanupForSubmittedWork(
- std::move(vulkan_image_));
+ if (vulkan_image_) {
+ VulkanFenceHelper* fence_helper = context_state_->vk_context_provider()
+ ->GetDeviceQueue()
+ ->GetFenceHelper();
+ fence_helper->EnqueueVulkanObjectCleanupForSubmittedWork(
+ std::move(vulkan_image_));
+ }
}
sk_sp<SkSurface> SharedImageRepresentationSkiaVkAndroid::BeginWriteAccess(
@@ -70,6 +62,7 @@
std::vector<GrBackendSemaphore>* begin_semaphores,
std::vector<GrBackendSemaphore>* end_semaphores) {
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
+ DCHECK(promise_texture_);
if (!BeginAccess(false /* readonly */, begin_semaphores, end_semaphores,
base::ScopedFD()))
@@ -120,6 +113,7 @@
std::vector<GrBackendSemaphore>* end_semaphores) {
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
DCHECK(!surface_);
+ DCHECK(promise_texture_);
if (!BeginAccess(true /* readonly */, begin_semaphores, end_semaphores,
std::move(init_read_fence_)))
diff --git a/command_buffer/service/shared_image_representation_skia_vk_android.h b/command_buffer/service/shared_image_representation_skia_vk_android.h
index f0d6dd1..c0d0000 100644
--- a/command_buffer/service/shared_image_representation_skia_vk_android.h
+++ b/command_buffer/service/shared_image_representation_skia_vk_android.h
@@ -27,8 +27,6 @@
SharedImageManager* manager,
SharedImageBackingAndroid* backing,
scoped_refptr<SharedContextState> context_state,
- std::unique_ptr<VulkanImage> vulkan_image,
- base::ScopedFD init_read_fence,
MemoryTypeTracker* tracker);
~SharedImageRepresentationSkiaVkAndroid() override;
@@ -44,6 +42,13 @@
std::vector<GrBackendSemaphore>* end_semaphores) override;
void EndReadAccess() override;
+ protected:
+ std::unique_ptr<VulkanImage> vulkan_image_;
+
+ // Initial read fence to wait on before reading |vulkan_image_|.
+ base::ScopedFD init_read_fence_;
+ sk_sp<SkPromiseImageTexture> promise_texture_;
+
private:
bool BeginAccess(bool readonly,
std::vector<GrBackendSemaphore>* begin_semaphores,
@@ -58,11 +63,6 @@
return static_cast<SharedImageBackingAndroid*>(backing());
}
- std::unique_ptr<VulkanImage> vulkan_image_;
-
- // Initial read fence to wait on before reading |vulkan_image_|.
- base::ScopedFD init_read_fence_;
- sk_sp<SkPromiseImageTexture> promise_texture_;
RepresentationAccessMode mode_ = RepresentationAccessMode::kNone;
int surface_msaa_count_ = 0;
sk_sp<SkSurface> surface_;