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