Edit

kc3-lang/angle/src/libANGLE/Renderbuffer.h

Branch :

  • Show log

    Commit

  • Author : Jeff Vigil
    Date : 2021-03-25 15:43:06
    Hash : 6136620b
    Message : Reland "EGL: GLES: Implement GL_EXT_protected_textures" This is a reland of 6210a9b34a721df2c84cf69170ad9bf7ba40e4aa This removes changes in gl backend. Original change's description: > EGL: GLES: Implement GL_EXT_protected_textures > > Implement EGL_EXT_protected_content Images > Add protected member to Images and Textures > Add error when creating objects if not supported or > does't match native buffer > When creating siblings pass protected state > Add extension caps > Add Validation > Add GetTexParameter and SetTextparameter > Add protected to Texture and state > Expand tests for images and textures > > Test: angle_end2end_test --gtest_filter=EGLProtectedContentTest > > Bug: angleproject:3965 > Change-Id: I35a89b4e80bba6d9b6831c68e71630eef304dacb > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2802852 > Commit-Queue: Mohan Maiya <m.maiya@samsung.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Test: angle_end2end_test --gtest_filter=EGLProtectedContentTest Bug: angleproject:3965 Change-Id: Id36d697c53afc0f0dadf92bda4565f9157f4fc2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3076825 Commit-Queue: Brandon Schade <b.schade@samsung.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/Renderbuffer.h
  • //
    // Copyright 2002 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.
    //
    
    // Renderbuffer.h: Defines the renderer-agnostic container class gl::Renderbuffer.
    // Implements GL renderbuffer objects and related functionality.
    // [OpenGL ES 2.0.24] section 4.4.3 page 108.
    
    #ifndef LIBANGLE_RENDERBUFFER_H_
    #define LIBANGLE_RENDERBUFFER_H_
    
    #include "angle_gl.h"
    #include "common/angleutils.h"
    #include "libANGLE/Debug.h"
    #include "libANGLE/Error.h"
    #include "libANGLE/FramebufferAttachment.h"
    #include "libANGLE/Image.h"
    #include "libANGLE/formatutils.h"
    #include "libANGLE/renderer/RenderbufferImpl.h"
    
    namespace rx
    {
    class GLImplFactory;
    }  // namespace rx
    
    namespace gl
    {
    // A GL renderbuffer object is usually used as a depth or stencil buffer attachment
    // for a framebuffer object. The renderbuffer itself is a distinct GL object, see
    // FramebufferAttachment and Framebuffer for how they are applied to an FBO via an
    // attachment point.
    
    class RenderbufferState final : angle::NonCopyable
    {
      public:
        RenderbufferState();
        ~RenderbufferState();
    
        GLsizei getWidth() const;
        GLsizei getHeight() const;
        const Format &getFormat() const;
        GLsizei getSamples() const;
        MultisamplingMode getMultisamplingMode() const;
        InitState getInitState() const;
        void setProtectedContent(bool hasProtectedContent);
    
      private:
        friend class Renderbuffer;
    
        void update(GLsizei width,
                    GLsizei height,
                    const Format &format,
                    GLsizei samples,
                    MultisamplingMode multisamplingMode,
                    InitState initState);
    
        GLsizei mWidth;
        GLsizei mHeight;
        Format mFormat;
        GLsizei mSamples;
        MultisamplingMode mMultisamplingMode;
        bool mHasProtectedContent;
    
        // For robust resource init.
        InitState mInitState;
    };
    
    class Renderbuffer final : public RefCountObject<RenderbufferID>,
                               public egl::ImageSibling,
                               public LabeledObject
    {
      public:
        Renderbuffer(rx::GLImplFactory *implFactory, RenderbufferID id);
        ~Renderbuffer() override;
    
        void onDestroy(const Context *context) override;
    
        void setLabel(const Context *context, const std::string &label) override;
        const std::string &getLabel() const override;
    
        angle::Result setStorage(const Context *context,
                                 GLenum internalformat,
                                 GLsizei width,
                                 GLsizei height);
        angle::Result setStorageMultisample(const Context *context,
                                            GLsizei samplesIn,
                                            GLenum internalformat,
                                            GLsizei width,
                                            GLsizei height,
                                            MultisamplingMode mode);
        angle::Result setStorageEGLImageTarget(const Context *context, egl::Image *imageTarget);
    
        angle::Result copyRenderbufferSubData(Context *context,
                                              const gl::Renderbuffer *srcBuffer,
                                              GLint srcLevel,
                                              GLint srcX,
                                              GLint srcY,
                                              GLint srcZ,
                                              GLint dstLevel,
                                              GLint dstX,
                                              GLint dstY,
                                              GLint dstZ,
                                              GLsizei srcWidth,
                                              GLsizei srcHeight,
                                              GLsizei srcDepth);
    
        angle::Result copyTextureSubData(Context *context,
                                         const gl::Texture *srcTexture,
                                         GLint srcLevel,
                                         GLint srcX,
                                         GLint srcY,
                                         GLint srcZ,
                                         GLint dstLevel,
                                         GLint dstX,
                                         GLint dstY,
                                         GLint dstZ,
                                         GLsizei srcWidth,
                                         GLsizei srcHeight,
                                         GLsizei srcDepth);
    
        rx::RenderbufferImpl *getImplementation() const;
    
        GLsizei getWidth() const;
        GLsizei getHeight() const;
        const Format &getFormat() const;
        GLsizei getSamples() const;
        MultisamplingMode getMultisamplingMode() const;
        GLuint getRedSize() const;
        GLuint getGreenSize() const;
        GLuint getBlueSize() const;
        GLuint getAlphaSize() const;
        GLuint getDepthSize() const;
        GLuint getStencilSize() const;
        const RenderbufferState &getState() const;
    
        GLint getMemorySize() const;
    
        // FramebufferAttachmentObject Impl
        Extents getAttachmentSize(const ImageIndex &imageIndex) const override;
        Format getAttachmentFormat(GLenum binding, const ImageIndex &imageIndex) const override;
        GLsizei getAttachmentSamples(const ImageIndex &imageIndex) const override;
        bool isRenderable(const Context *context,
                          GLenum binding,
                          const ImageIndex &imageIndex) const override;
    
        void onAttach(const Context *context, rx::Serial framebufferSerial) override;
        void onDetach(const Context *context, rx::Serial framebufferSerial) override;
        GLuint getId() const override;
    
        InitState initState(const ImageIndex &imageIndex) const override;
        void setInitState(const ImageIndex &imageIndex, InitState initState) override;
    
        GLenum getImplementationColorReadFormat(const Context *context) const;
        GLenum getImplementationColorReadType(const Context *context) const;
    
        // We pass the pack buffer and state explicitly so they can be overridden during capture.
        angle::Result getRenderbufferImage(const Context *context,
                                           const PixelPackState &packState,
                                           Buffer *packBuffer,
                                           GLenum format,
                                           GLenum type,
                                           void *pixels) const;
    
      private:
        // ObserverInterface implementation.
        void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
    
        rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
    
        RenderbufferState mState;
        std::unique_ptr<rx::RenderbufferImpl> mImplementation;
    
        std::string mLabel;
        angle::ObserverBinding mImplObserverBinding;
    };
    
    }  // namespace gl
    
    #endif  // LIBANGLE_RENDERBUFFER_H_