// // Copyright 2021 The ANGLE Project 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 LIBANGLE_RENDERER_VULKAN_ANDROID_AHBFUNCTIONS_H_ #define LIBANGLE_RENDERER_VULKAN_ANDROID_AHBFUNCTIONS_H_ #include namespace rx { class AHBFunctions { public: AHBFunctions(); ~AHBFunctions(); void acquire(AHardwareBuffer *buffer) const { mAcquireFn(buffer); } void describe(const AHardwareBuffer *buffer, AHardwareBuffer_Desc *outDesc) const { mDescribeFn(buffer, outDesc); } void release(AHardwareBuffer *buffer) const { mReleaseFn(buffer); } bool valid() const { return mAcquireFn && mDescribeFn && mReleaseFn; } private: using PFN_AHARDWAREBUFFER_acquire = void (*)(AHardwareBuffer *buffer); using PFN_AHARDWAREBUFFER_describe = void (*)(const AHardwareBuffer *buffer, AHardwareBuffer_Desc *outDesc); using PFN_AHARDWAREBUFFER_release = void (*)(AHardwareBuffer *buffer); PFN_AHARDWAREBUFFER_acquire mAcquireFn = nullptr; PFN_AHARDWAREBUFFER_describe mDescribeFn = nullptr; PFN_AHARDWAREBUFFER_release mReleaseFn = nullptr; void getAhbProcAddresses(void *handle); void *mLibNativeWindowHandle; }; } // namespace rx #endif // LIBANGLE_RENDERER_VULKAN_ANDROID_AHBFUNCTIONS_H_