Commit c9f8c2f1 authored by Vikas Soni's avatar Vikas Soni Committed by Commit Bot

Initial fence to wait on before reading vulkan image.

Add initial read fence to SharedImageRepresentationAndroidSkiaVk to
wait on before reading vulkan image.

Bug: 1091945
Change-Id: Ie35002f717e3719eeda5b3e0a50996077ad56151
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2281729Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
Commit-Queue: vikas soni <vikassoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785334}
parent 62c1798e
......@@ -344,7 +344,7 @@ SharedImageBackingAHB::ProduceSkia(
return std::make_unique<SharedImageRepresentationSkiaVkAndroid>(
manager, this, std::move(context_state), std::move(vulkan_image),
tracker);
base::ScopedFD(), tracker);
}
DCHECK(context_state->GrContextIsGL());
DCHECK(hardware_buffer_handle_.is_valid());
......
......@@ -27,6 +27,7 @@
#include "third_party/skia/include/core/SkPromiseImageTexture.h"
#include "third_party/skia/include/gpu/GrBackendSemaphore.h"
#include "third_party/skia/include/gpu/GrBackendSurface.h"
#include "ui/gl/gl_utils.h"
namespace gpu {
......@@ -35,9 +36,11 @@ SharedImageRepresentationSkiaVkAndroid::SharedImageRepresentationSkiaVkAndroid(
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(context_state_);
......@@ -68,7 +71,8 @@ sk_sp<SkSurface> SharedImageRepresentationSkiaVkAndroid::BeginWriteAccess(
std::vector<GrBackendSemaphore>* end_semaphores) {
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
if (!BeginAccess(false /* readonly */, begin_semaphores, end_semaphores))
if (!BeginAccess(false /* readonly */, begin_semaphores, end_semaphores,
base::ScopedFD()))
return nullptr;
auto* gr_context = context_state_->gr_context();
......@@ -117,7 +121,8 @@ SharedImageRepresentationSkiaVkAndroid::BeginReadAccess(
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
DCHECK(!surface_);
if (!BeginAccess(true /* readonly */, begin_semaphores, end_semaphores))
if (!BeginAccess(true /* readonly */, begin_semaphores, end_semaphores,
std::move(init_read_fence_)))
return nullptr;
return promise_texture_;
}
......@@ -155,7 +160,8 @@ VkQueue SharedImageRepresentationSkiaVkAndroid::vk_queue() {
bool SharedImageRepresentationSkiaVkAndroid::BeginAccess(
bool readonly,
std::vector<GrBackendSemaphore>* begin_semaphores,
std::vector<GrBackendSemaphore>* end_semaphores) {
std::vector<GrBackendSemaphore>* end_semaphores,
base::ScopedFD init_read_fence) {
DCHECK(begin_semaphores);
DCHECK(end_semaphores);
DCHECK(end_access_semaphore_ == VK_NULL_HANDLE);
......@@ -170,6 +176,7 @@ bool SharedImageRepresentationSkiaVkAndroid::BeginAccess(
return false;
}
sync_fd = gl::MergeFDs(std::move(sync_fd), std::move(init_read_fence));
VkSemaphore begin_access_semaphore = VK_NULL_HANDLE;
if (sync_fd.is_valid()) {
begin_access_semaphore = vk_implementation()->ImportSemaphoreHandle(
......
......@@ -28,6 +28,7 @@ class SharedImageRepresentationSkiaVkAndroid
SharedImageBackingAndroid* backing,
scoped_refptr<SharedContextState> context_state,
std::unique_ptr<VulkanImage> vulkan_image,
base::ScopedFD init_read_fence,
MemoryTypeTracker* tracker);
~SharedImageRepresentationSkiaVkAndroid() override;
......@@ -46,7 +47,8 @@ class SharedImageRepresentationSkiaVkAndroid
private:
bool BeginAccess(bool readonly,
std::vector<GrBackendSemaphore>* begin_semaphores,
std::vector<GrBackendSemaphore>* end_semaphores);
std::vector<GrBackendSemaphore>* end_semaphores,
base::ScopedFD init_read_fence);
void EndAccess(bool readonly);
VkDevice vk_device();
VulkanImplementation* vk_implementation();
......@@ -57,6 +59,9 @@ class SharedImageRepresentationSkiaVkAndroid
}
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;
......
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