xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/vulkan/android/HardwareBufferImageSiblingVkAndroid.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // HardwareBufferImageSiblingVkAndroid.h: Defines the HardwareBufferImageSiblingVkAndroid to wrap
8 // EGL images created from AHardwareBuffer objects
9 
10 #ifndef LIBANGLE_RENDERER_VULKAN_ANDROID_HARDWAREBUFFERIMAGESIBLINGVKANDROID_H_
11 #define LIBANGLE_RENDERER_VULKAN_ANDROID_HARDWAREBUFFERIMAGESIBLINGVKANDROID_H_
12 
13 #include "libANGLE/renderer/vulkan/ImageVk.h"
14 
15 namespace rx
16 {
17 
18 class HardwareBufferImageSiblingVkAndroid : public ExternalImageSiblingVk
19 {
20   public:
21     HardwareBufferImageSiblingVkAndroid(EGLClientBuffer buffer);
22     ~HardwareBufferImageSiblingVkAndroid() override;
23 
24     static egl::Error ValidateHardwareBuffer(vk::Renderer *renderer,
25                                              EGLClientBuffer buffer,
26                                              const egl::AttributeMap &attribs);
27 
28     egl::Error initialize(const egl::Display *display) override;
29     void onDestroy(const egl::Display *display) override;
30 
31     // ExternalImageSiblingImpl interface
32     gl::Format getFormat() const override;
33     bool isRenderable(const gl::Context *context) const override;
34     bool isTexturable(const gl::Context *context) const override;
35     bool isYUV() const override;
36     bool hasFrontBufferUsage() const override;
37     bool isCubeMap() const override;
38     bool hasProtectedContent() const override;
39     gl::Extents getSize() const override;
40     size_t getSamples() const override;
41     uint32_t getLevelCount() const override;
42 
43     // ExternalImageSiblingVk interface
44     vk::ImageHelper *getImage() const override;
45 
46     void release(vk::Renderer *renderer) override;
47 
48   private:
49     angle::Result initImpl(DisplayVk *displayVk);
50 
51     EGLClientBuffer mBuffer;
52     gl::Extents mSize;
53     gl::Format mFormat;
54 
55     bool mRenderable;
56     bool mTextureable;
57     bool mYUV;
58     uint32_t mLevelCount;
59     uint64_t mUsage;
60     size_t mSamples;
61 
62     vk::ImageHelper *mImage;
63 };
64 
65 }  // namespace rx
66 
67 #endif  // LIBANGLE_RENDERER_VULKAN_ANDROID_HARDWAREBUFFERIMAGESIBLINGVKANDROID_H_
68