1 //
2 // Copyright 2016 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 // ImageVk.h:
7 //    Defines the class interface for ImageVk, implementing ImageImpl.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_
11 #define LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_
12 
13 #include "libANGLE/renderer/ImageImpl.h"
14 #include "libANGLE/renderer/vulkan/vk_helpers.h"
15 
16 namespace rx
17 {
18 
19 class ExternalImageSiblingVk : public ExternalImageSiblingImpl
20 {
21   public:
ExternalImageSiblingVk()22     ExternalImageSiblingVk() {}
23     ~ExternalImageSiblingVk() override {}
24 
25     virtual vk::ImageHelper *getImage() const = 0;
26 
27     virtual void release(RendererVk *renderer) = 0;
28 };
29 
30 class ImageVk : public ImageImpl
31 {
32   public:
33     ImageVk(const egl::ImageState &state, const gl::Context *context);
34     ~ImageVk() override;
35     void onDestroy(const egl::Display *display) override;
36 
37     egl::Error initialize(const egl::Display *display) override;
38 
39     angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) override;
40 
41     egl::Error exportVkImage(void *vkImage, void *vkImageCreateInfo) override;
42 
getImage() const43     vk::ImageHelper *getImage() const { return mImage; }
getImageTextureType() const44     gl::TextureType getImageTextureType() const { return mImageTextureType; }
getImageLevel() const45     gl::LevelIndex getImageLevel() const { return mImageLevel; }
getImageLayer() const46     uint32_t getImageLayer() const { return mImageLayer; }
47 
48   private:
49     gl::TextureType mImageTextureType;
50     gl::LevelIndex mImageLevel;
51     uint32_t mImageLayer;
52 
53     bool mOwnsImage;
54     vk::ImageHelper *mImage;
55 
56     std::vector<vk::Shared<vk::Fence>> mImageLastUseFences;
57 
58     const gl::Context *mContext;
59 };
60 
61 }  // namespace rx
62 
63 #endif  // LIBANGLE_RENDERER_VULKAN_IMAGEVK_H_
64