123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef DEVICE_VR_ANDROID_MAILBOX_TO_SURFACE_BRIDGE_H_
- #define DEVICE_VR_ANDROID_MAILBOX_TO_SURFACE_BRIDGE_H_
- namespace gfx {
- class ColorSpace;
- class GpuFence;
- class Transform;
- } // namespace gfx
- namespace gl {
- class SurfaceTexture;
- } // namespace gl
- namespace gpu {
- class GpuMemoryBufferImplAndroidHardwareBuffer;
- struct MailboxHolder;
- struct SyncToken;
- } // namespace gpu
- namespace device {
- class MailboxToSurfaceBridge {
- public:
- virtual ~MailboxToSurfaceBridge() {}
- // Returns true if the GPU process connection is established and ready to use.
- // Equivalent to waiting for on_initialized to be called.
- virtual bool IsConnected() = 0;
- // Checks if a workaround from "gpu/config/gpu_driver_bug_workaround_type.h"
- // is active. Requires initialization to be complete.
- virtual bool IsGpuWorkaroundEnabled(int32_t workaround) = 0;
- // This call is needed for Surface transport, in that case it must be called
- // on the GL thread with a valid local native GL context. If it's not used,
- // only the SharedBuffer transport methods are available.
- virtual void CreateSurface(gl::SurfaceTexture*) = 0;
- // Asynchronously create the context using the surface provided by an earlier
- // CreateSurface call, or an offscreen context if that wasn't called. Also
- // binds the context provider to the current thread (making it the GL thread),
- // and calls the callback on the GL thread.
- virtual void CreateAndBindContextProvider(base::OnceClosure callback) = 0;
- // All other public methods below must be called on the GL thread
- // (except when marked otherwise).
- virtual void ResizeSurface(int width, int height) = 0;
- // Returns true if swapped successfully. This can fail if the GL
- // context isn't ready for use yet, in that case the caller
- // won't get a new frame on the SurfaceTexture.
- virtual bool CopyMailboxToSurfaceAndSwap(
- const gpu::MailboxHolder& mailbox) = 0;
- virtual bool CopyMailboxToSurfaceAndSwap(
- const gpu::MailboxHolder& mailbox,
- const gfx::Transform& uv_transform) = 0;
- virtual void GenSyncToken(gpu::SyncToken* out_sync_token) = 0;
- virtual void WaitSyncToken(const gpu::SyncToken& sync_token) = 0;
- // Copies a GpuFence from the local context to the GPU process,
- // and issues a server wait for it.
- virtual void WaitForClientGpuFence(gfx::GpuFence*) = 0;
- // Creates a GpuFence in the GPU process after the supplied sync_token
- // completes, and copies it for use in the local context. This is
- // asynchronous, the callback receives the GpuFence once it's available.
- virtual void CreateGpuFence(
- const gpu::SyncToken& sync_token,
- base::OnceCallback<void(std::unique_ptr<gfx::GpuFence>)> callback) = 0;
- // Creates a shared image bound to |buffer|. Returns a mailbox holder that
- // references the shared image with a sync token representing a point after
- // the creation. Caller must call DestroySharedImage to free the shared image.
- // Does not take ownership of |buffer| or retain any references to it.
- virtual gpu::MailboxHolder CreateSharedImage(
- gpu::GpuMemoryBufferImplAndroidHardwareBuffer* buffer,
- const gfx::ColorSpace& color_space,
- uint32_t usage) = 0;
- // Destroys a shared image created by CreateSharedImage. The mailbox_holder's
- // sync_token must have been updated to a sync token after the last use of the
- // shared image.
- virtual void DestroySharedImage(const gpu::MailboxHolder& mailbox_holder) = 0;
- };
- class MailboxToSurfaceBridgeFactory {
- public:
- virtual ~MailboxToSurfaceBridgeFactory() {}
- virtual std::unique_ptr<device::MailboxToSurfaceBridge> Create() const = 0;
- };
- } // namespace device
- #endif // DEVICE_VR_ANDROID_MAILBOX_TO_SURFACE_BRIDGE_H_
|