1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // ImageMtl.h: 7*8975f5c5SAndroid Build Coastguard Worker // Defines the class interface for ImageMtl, implementing ImageImpl. 8*8975f5c5SAndroid Build Coastguard Worker // 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_METAL_IMAGEMTL_H 11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_METAL_IMAGEMTL_H 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/ImageImpl.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/metal/mtl_resources.h" 15*8975f5c5SAndroid Build Coastguard Worker 16*8975f5c5SAndroid Build Coastguard Worker namespace rx 17*8975f5c5SAndroid Build Coastguard Worker { 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker class DisplayMtl; 20*8975f5c5SAndroid Build Coastguard Worker 21*8975f5c5SAndroid Build Coastguard Worker class TextureImageSiblingMtl : public ExternalImageSiblingImpl 22*8975f5c5SAndroid Build Coastguard Worker { 23*8975f5c5SAndroid Build Coastguard Worker public: 24*8975f5c5SAndroid Build Coastguard Worker TextureImageSiblingMtl(EGLClientBuffer buffer, const egl::AttributeMap &attribs); 25*8975f5c5SAndroid Build Coastguard Worker ~TextureImageSiblingMtl() override; 26*8975f5c5SAndroid Build Coastguard Worker 27*8975f5c5SAndroid Build Coastguard Worker static egl::Error ValidateClientBuffer(const DisplayMtl *display, 28*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer buffer, 29*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs); 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker egl::Error initialize(const egl::Display *display) override; 32*8975f5c5SAndroid Build Coastguard Worker void onDestroy(const egl::Display *display) override; 33*8975f5c5SAndroid Build Coastguard Worker 34*8975f5c5SAndroid Build Coastguard Worker // ExternalImageSiblingImpl interface 35*8975f5c5SAndroid Build Coastguard Worker gl::Format getFormat() const override; 36*8975f5c5SAndroid Build Coastguard Worker bool isRenderable(const gl::Context *context) const override; 37*8975f5c5SAndroid Build Coastguard Worker bool isTexturable(const gl::Context *context) const override; 38*8975f5c5SAndroid Build Coastguard Worker gl::Extents getSize() const override; 39*8975f5c5SAndroid Build Coastguard Worker size_t getSamples() const override; 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker bool isYUV() const override; 42*8975f5c5SAndroid Build Coastguard Worker bool hasProtectedContent() const override; 43*8975f5c5SAndroid Build Coastguard Worker getTexture()44*8975f5c5SAndroid Build Coastguard Worker const mtl::TextureRef &getTexture() const { return mNativeTexture; } getFormatMtl()45*8975f5c5SAndroid Build Coastguard Worker const mtl::Format &getFormatMtl() const { return mFormat; } 46*8975f5c5SAndroid Build Coastguard Worker 47*8975f5c5SAndroid Build Coastguard Worker private: 48*8975f5c5SAndroid Build Coastguard Worker angle::Result initImpl(DisplayMtl *display); 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer mBuffer; 51*8975f5c5SAndroid Build Coastguard Worker egl::AttributeMap mAttribs; 52*8975f5c5SAndroid Build Coastguard Worker gl::Format mGLFormat; 53*8975f5c5SAndroid Build Coastguard Worker mtl::Format mFormat; 54*8975f5c5SAndroid Build Coastguard Worker 55*8975f5c5SAndroid Build Coastguard Worker bool mRenderable = false; 56*8975f5c5SAndroid Build Coastguard Worker bool mTextureable = false; 57*8975f5c5SAndroid Build Coastguard Worker 58*8975f5c5SAndroid Build Coastguard Worker mtl::TextureRef mNativeTexture; 59*8975f5c5SAndroid Build Coastguard Worker }; 60*8975f5c5SAndroid Build Coastguard Worker 61*8975f5c5SAndroid Build Coastguard Worker class ImageMtl : public ImageImpl 62*8975f5c5SAndroid Build Coastguard Worker { 63*8975f5c5SAndroid Build Coastguard Worker public: 64*8975f5c5SAndroid Build Coastguard Worker ImageMtl(const egl::ImageState &state, const gl::Context *context); 65*8975f5c5SAndroid Build Coastguard Worker ~ImageMtl() override; 66*8975f5c5SAndroid Build Coastguard Worker void onDestroy(const egl::Display *display) override; 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker egl::Error initialize(const egl::Display *display) override; 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker angle::Result orphan(const gl::Context *context, egl::ImageSibling *sibling) override; 71*8975f5c5SAndroid Build Coastguard Worker getTexture()72*8975f5c5SAndroid Build Coastguard Worker const mtl::TextureRef &getTexture() const { return mNativeTexture; } getImageTextureType()73*8975f5c5SAndroid Build Coastguard Worker gl::TextureType getImageTextureType() const { return mImageTextureType; } getImageLevel()74*8975f5c5SAndroid Build Coastguard Worker uint32_t getImageLevel() const { return mImageLevel; } getImageLayer()75*8975f5c5SAndroid Build Coastguard Worker uint32_t getImageLayer() const { return mImageLayer; } 76*8975f5c5SAndroid Build Coastguard Worker 77*8975f5c5SAndroid Build Coastguard Worker private: 78*8975f5c5SAndroid Build Coastguard Worker gl::TextureType mImageTextureType; 79*8975f5c5SAndroid Build Coastguard Worker uint32_t mImageLevel = 0; 80*8975f5c5SAndroid Build Coastguard Worker uint32_t mImageLayer = 0; 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker mtl::TextureRef mNativeTexture; 83*8975f5c5SAndroid Build Coastguard Worker }; 84*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Worker #endif /* LIBANGLE_RENDERER_METAL_IMAGEMTL_H */ 87