xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/vulkan/linux/DmaBufImageSiblingVkLinux.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2021 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 // DmaBufImageSiblingVkLinux.h: Defines the DmaBufImageSiblingVkLinux to wrap
8 // EGL images created from Linux dma-buf objects
9 
10 #ifndef LIBANGLE_RENDERER_VULKAN_LINUX_DMABUFIMAGESIBLINGVKLINUX_H_
11 #define LIBANGLE_RENDERER_VULKAN_LINUX_DMABUFIMAGESIBLINGVKLINUX_H_
12 
13 #include "libANGLE/renderer/vulkan/ImageVk.h"
14 
15 namespace rx
16 {
17 
18 enum MutableFormat
19 {
20     Allowed,
21     NotAllowed
22 };
23 
24 enum InitResult
25 {
26     Success,
27     Failed
28 };
29 
30 class DmaBufImageSiblingVkLinux : public ExternalImageSiblingVk
31 {
32   public:
33     DmaBufImageSiblingVkLinux(const egl::AttributeMap &attribs);
34     ~DmaBufImageSiblingVkLinux() override;
35 
36     egl::Error initialize(const egl::Display *display) override;
37     void onDestroy(const egl::Display *display) override;
38 
39     // ExternalImageSiblingImpl interface
40     gl::Format getFormat() const override;
41     bool isRenderable(const gl::Context *context) const override;
42     bool isTexturable(const gl::Context *context) const override;
43     bool isYUV() const override;
44     bool hasProtectedContent() const override;
45     gl::Extents getSize() const override;
46     size_t getSamples() const override;
47 
48     // ExternalImageSiblingVk interface
49     vk::ImageHelper *getImage() const override;
50 
51     void release(vk::Renderer *renderer) override;
52 
53   private:
54     angle::Result initWithFormat(DisplayVk *displayVk,
55                                  const angle::Format &format,
56                                  VkFormat vulkanFormat,
57                                  MutableFormat mutableFormat,
58                                  InitResult *outResult);
59 
60     angle::Result initImpl(DisplayVk *displayVk);
61 
62     egl::AttributeMap mAttribs;
63     gl::Extents mSize;
64     gl::Format mFormat;
65     std::vector<VkFormat> mVkFormats;
66 
67     bool mRenderable;
68     bool mTextureable;
69     bool mYUV;
70     bool mHasProtectedContent;
71     size_t mSamples;
72 
73     vk::ImageHelper *mImage;
74 };
75 
76 }  // namespace rx
77 
78 #endif  // LIBANGLE_RENDERER_VULKAN_LINUX_DMABUFIMAGESIBLINGVKLINUX_H_
79