• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // ImageMtl.h:
7 //    Defines the class interface for ImageMtl, implementing ImageImpl.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_METAL_IMAGEMTL_H
11 #define LIBANGLE_RENDERER_METAL_IMAGEMTL_H
12 
13 #include "libANGLE/renderer/ImageImpl.h"
14 #include "libANGLE/renderer/metal/mtl_resources.h"
15 
16 namespace rx
17 {
18 
19 class DisplayMtl;
20 
21 class TextureImageSiblingMtl : public ExternalImageSiblingImpl
22 {
23   public:
24     TextureImageSiblingMtl(EGLClientBuffer buffer);
25     ~TextureImageSiblingMtl() override;
26 
27     static bool ValidateClientBuffer(const DisplayMtl *display, EGLClientBuffer buffer);
28 
29     egl::Error initialize(const egl::Display *display) override;
30     void onDestroy(const egl::Display *display) override;
31 
32     // ExternalImageSiblingImpl interface
33     gl::Format getFormat() const override;
34     bool isRenderable(const gl::Context *context) const override;
35     bool isTexturable(const gl::Context *context) const override;
36     gl::Extents getSize() const override;
37     size_t getSamples() const override;
38 
39     bool isYUV() const override;
40     bool hasProtectedContent() const override;
41 
getTexture()42     const mtl::TextureRef &getTexture() const { return mNativeTexture; }
getFormatMtl()43     const mtl::Format &getFormatMtl() const { return mFormat; }
44 
45   private:
46     angle::Result initImpl(DisplayMtl *display);
47 
48     EGLClientBuffer mBuffer;
49     gl::Format mGLFormat;
50     mtl::Format mFormat;
51 
52     bool mRenderable  = false;
53     bool mTextureable = false;
54 
55     mtl::TextureRef mNativeTexture;
56 };
57 
58 class ImageMtl : public ImageImpl
59 {
60   public:
61     ImageMtl(const egl::ImageState &state, const gl::Context *context);
62     ~ImageMtl() override;
63     void onDestroy(const egl::Display *display) override;
64 
65     egl::Error initialize(const egl::Display *display) override;
66 
67     angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) override;
68 
getTexture()69     const mtl::TextureRef &getTexture() const { return mNativeTexture; }
getImageTextureType()70     gl::TextureType getImageTextureType() const { return mImageTextureType; }
getImageLevel()71     uint32_t getImageLevel() const { return mImageLevel; }
getImageLayer()72     uint32_t getImageLayer() const { return mImageLayer; }
73 
74   private:
75     gl::TextureType mImageTextureType;
76     uint32_t mImageLevel = 0;
77     uint32_t mImageLayer = 0;
78 
79     mtl::TextureRef mNativeTexture;
80 };
81 }  // namespace rx
82 
83 #endif /* LIBANGLE_RENDERER_METAL_IMAGEMTL_H */
84