// // Copyright 2021 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ImageMtl.h: // Defines the class interface for ImageMtl, implementing ImageImpl. // #ifndef LIBANGLE_RENDERER_METAL_IMAGEMTL_H #define LIBANGLE_RENDERER_METAL_IMAGEMTL_H #include "libANGLE/renderer/ImageImpl.h" #include "libANGLE/renderer/metal/mtl_resources.h" namespace rx { class DisplayMtl; class TextureImageSiblingMtl : public ExternalImageSiblingImpl { public: TextureImageSiblingMtl(EGLClientBuffer buffer, const egl::AttributeMap &attribs); ~TextureImageSiblingMtl() override; static egl::Error ValidateClientBuffer(const DisplayMtl *display, EGLClientBuffer buffer, const egl::AttributeMap &attribs); egl::Error initialize(const egl::Display *display) override; void onDestroy(const egl::Display *display) override; // ExternalImageSiblingImpl interface gl::Format getFormat() const override; bool isRenderable(const gl::Context *context) const override; bool isTexturable(const gl::Context *context) const override; gl::Extents getSize() const override; size_t getSamples() const override; bool isYUV() const override; bool hasProtectedContent() const override; const mtl::TextureRef &getTexture() const { return mNativeTexture; } const mtl::Format &getFormatMtl() const { return mFormat; } private: angle::Result initImpl(DisplayMtl *display); EGLClientBuffer mBuffer; egl::AttributeMap mAttribs; gl::Format mGLFormat; mtl::Format mFormat; bool mRenderable = false; bool mTextureable = false; mtl::TextureRef mNativeTexture; }; class ImageMtl : public ImageImpl { public: ImageMtl(const egl::ImageState &state, const gl::Context *context); ~ImageMtl() override; void onDestroy(const egl::Display *display) override; egl::Error initialize(const egl::Display *display) override; angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) override; const mtl::TextureRef &getTexture() const { return mNativeTexture; } gl::TextureType getImageTextureType() const { return mImageTextureType; } uint32_t getImageLevel() const { return mImageLevel; } uint32_t getImageLayer() const { return mImageLayer; } private: gl::TextureType mImageTextureType; uint32_t mImageLevel = 0; uint32_t mImageLayer = 0; mtl::TextureRef mNativeTexture; }; } // namespace rx #endif /* LIBANGLE_RENDERER_METAL_IMAGEMTL_H */