Edit

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

Branch :

  • Show log

    Commit

  • Author : Stanislav Chiknavaryan
    Date : 2016-11-04 18:27:56
    Hash : 20c97cac
    Message : Squashed commit of the following: commit 0146dfeefa47b520e71f0e74230abd7dac163a79 Author: Stanislav Chiknavaryan <stanisc@chromium.org> Date: Fri Nov 4 17:43:03 2016 -0700 Revert "Implementation of eglGetSyncValuesCHROMIUM extension." This reverts commit 5d9f5df01ac5a384d9b7cbb49d9f98a76b62c7ad. commit 0d920fe27bd8e73d831a9002548bde00fea78709 Author: Stanislav Chiknavaryan <stanisc@chromium.org> Date: Fri Nov 4 17:23:11 2016 -0700 Revert "Fix EGLSyncControlTest.SyncValuesTest timeout on Windowse Server 2012 R2" This reverts commit d258ca045f31eb43ec01b5501c84e9afd8e82cd6. commit bde8defe53741855bb71fbf27bcb0a91cfafbd01 Author: Stanislav Chiknavaryan <stanisc@chromium.org> Date: Fri Nov 4 17:22:58 2016 -0700 Revert "Disabling EGLSyncControlTest.SyncValuesTest" This reverts commit a74183613955bd891f56f6a979a5391c16c64138. commit f78e4b7e97b9d1259878f6902bb6ddeb0aeded87 Author: Stanislav Chiknavaryan <stanisc@chromium.org> Date: Fri Nov 4 17:22:36 2016 -0700 Revert "Fix and re-enable EGLSyncControlTest.SyncValuesTest" This reverts commit 138ec92f52da7c0fc8e6df08ac4e4e572bbf6b39. commit f3933e6a04bd23473077d2fd74616023db3c9601 Author: Stanislav Chiknavaryan <stanisc@chromium.org> Date: Fri Nov 4 17:20:26 2016 -0700 Revert "Handle nullptr mSwapChain in SwapChain11::getSyncValues" This reverts commit af7f301f6ba9e5f31d1511142a936a9ba84169d0. BUG=angleproject:1402 Change-Id: I99969e906e316574e9f739141de0e360d1edebd9 Reviewed-on: https://chromium-review.googlesource.com/408752 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Stanislav Chiknavaryan <stanisc@chromium.org>

  • src/libANGLE/Surface.h
  • //
    // Copyright (c) 2002-2014 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.
    //
    
    // Surface.h: Defines the egl::Surface class, representing a drawing surface
    // such as the client area of a window, including any back buffers.
    // Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
    
    #ifndef LIBANGLE_SURFACE_H_
    #define LIBANGLE_SURFACE_H_
    
    #include <EGL/egl.h>
    
    #include "common/angleutils.h"
    #include "libANGLE/Error.h"
    #include "libANGLE/FramebufferAttachment.h"
    #include "libANGLE/RefCountObject.h"
    #include "libANGLE/formatutils.h"
    #include "libANGLE/renderer/SurfaceImpl.h"
    
    namespace gl
    {
    class Framebuffer;
    class Texture;
    }
    
    namespace rx
    {
    class EGLImplFactory;
    }
    
    namespace egl
    {
    class AttributeMap;
    class Display;
    struct Config;
    
    struct SurfaceState final : angle::NonCopyable
    {
        SurfaceState();
    
        gl::Framebuffer *defaultFramebuffer;
    };
    
    class Surface : public gl::FramebufferAttachmentObject
    {
      public:
        virtual ~Surface();
    
        rx::SurfaceImpl *getImplementation() const { return mImplementation; }
    
        EGLint getType() const;
    
        Error initialize();
        Error swap();
        Error swapWithDamage(EGLint *rects, EGLint n_rects);
        Error postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height);
        Error querySurfacePointerANGLE(EGLint attribute, void **value);
        Error bindTexImage(gl::Texture *texture, EGLint buffer);
        Error releaseTexImage(EGLint buffer);
    
        EGLint isPostSubBufferSupported() const;
    
        void setSwapInterval(EGLint interval);
        void setIsCurrent(bool isCurrent);
        void onDestroy();
    
        const Config *getConfig() const;
    
        // width and height can change with client window resizing
        EGLint getWidth() const;
        EGLint getHeight() const;
        EGLint getPixelAspectRatio() const;
        EGLenum getRenderBuffer() const;
        EGLenum getSwapBehavior() const;
        EGLenum getTextureFormat() const;
        EGLenum getTextureTarget() const;
    
        gl::Texture *getBoundTexture() const { return mTexture.get(); }
        gl::Framebuffer *getDefaultFramebuffer() { return mState.defaultFramebuffer; }
    
        EGLint isFixedSize() const;
    
        // FramebufferAttachmentObject implementation
        gl::Extents getAttachmentSize(const gl::FramebufferAttachment::Target &target) const override;
        const gl::Format &getAttachmentFormat(
            const gl::FramebufferAttachment::Target &target) const override;
        GLsizei getAttachmentSamples(const gl::FramebufferAttachment::Target &target) const override;
    
        void onAttach() override {}
        void onDetach() override {}
        GLuint getId() const override;
    
        bool flexibleSurfaceCompatibilityRequested() const
        {
            return mFlexibleSurfaceCompatibilityRequested;
        }
        EGLint getOrientation() const { return mOrientation; }
    
        bool directComposition() const { return mDirectComposition; }
    
      protected:
        Surface(EGLint surfaceType, const egl::Config *config, const AttributeMap &attributes);
        rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override { return mImplementation; }
    
        gl::Framebuffer *createDefaultFramebuffer();
    
        // ANGLE-only method, used internally
        friend class gl::Texture;
        void releaseTexImageFromTexture();
    
        SurfaceState mState;
        rx::SurfaceImpl *mImplementation;
        int mCurrentCount;
        bool mDestroyed;
    
        EGLint mType;
    
        const egl::Config *mConfig;
    
        bool mPostSubBufferRequested;
        bool mFlexibleSurfaceCompatibilityRequested;
    
        bool mFixedSize;
        size_t mFixedWidth;
        size_t mFixedHeight;
    
        bool mDirectComposition;
    
        EGLenum mTextureFormat;
        EGLenum mTextureTarget;
    
        EGLint mPixelAspectRatio;      // Display aspect ratio
        EGLenum mRenderBuffer;         // Render buffer
        EGLenum mSwapBehavior;         // Buffer swap behavior
    
        EGLint mOrientation;
    
        BindingPointer<gl::Texture> mTexture;
    
        gl::Format mBackFormat;
        gl::Format mDSFormat;
    };
    
    class WindowSurface final : public Surface
    {
      public:
        WindowSurface(rx::EGLImplFactory *implFactory,
                      const Config *config,
                      EGLNativeWindowType window,
                      const AttributeMap &attribs);
        ~WindowSurface() override;
    };
    
    class PbufferSurface final : public Surface
    {
      public:
        PbufferSurface(rx::EGLImplFactory *implFactory,
                       const Config *config,
                       const AttributeMap &attribs);
        PbufferSurface(rx::EGLImplFactory *implFactory,
                       const Config *config,
                       EGLenum buftype,
                       EGLClientBuffer clientBuffer,
                       const AttributeMap &attribs);
        ~PbufferSurface() override;
    };
    
    class PixmapSurface final : public Surface
    {
      public:
        PixmapSurface(rx::EGLImplFactory *implFactory,
                      const Config *config,
                      NativePixmapType nativePixmap,
                      const AttributeMap &attribs);
        ~PixmapSurface() override;
    };
    
    }  // namespace egl
    
    #endif   // LIBANGLE_SURFACE_H_