Edit

kc3-lang/angle/src/libANGLE/renderer/gl/wgl/DisplayWGL.h

Branch :

  • Show log

    Commit

  • Author : Jonah Ryan-Davis
    Date : 2021-02-04 15:14:10
    Hash : e174c358
    Message : GL: Consolidate glGetString calls First step for cacheing the result of glGetString calls is mostly cleanup. Bug: chromium:1173672 Change-Id: I47281a09b9bd5859655d16376977a6eabcfbb3c4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676203 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/renderer/gl/wgl/DisplayWGL.h
  • //
    // Copyright 2015 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.
    //
    
    // DisplayWGL.h: WGL implementation of egl::Display
    
    #ifndef LIBANGLE_RENDERER_GL_WGL_DISPLAYWGL_H_
    #define LIBANGLE_RENDERER_GL_WGL_DISPLAYWGL_H_
    
    #include <thread>
    #include <unordered_map>
    
    #include "libANGLE/renderer/gl/DisplayGL.h"
    
    #include <GL/wglext.h>
    
    namespace rx
    {
    
    class FunctionsWGL;
    class RendererWGL;
    class WorkerContext;
    
    class DisplayWGL : public DisplayGL
    {
      public:
        DisplayWGL(const egl::DisplayState &state);
        ~DisplayWGL() override;
    
        egl::Error initialize(egl::Display *display) override;
        void terminate() override;
    
        // Surface creation
        SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
                                         EGLNativeWindowType window,
                                         const egl::AttributeMap &attribs) override;
        SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
                                          const egl::AttributeMap &attribs) override;
        SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
                                                   EGLenum buftype,
                                                   EGLClientBuffer clientBuffer,
                                                   const egl::AttributeMap &attribs) override;
        SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
                                         NativePixmapType nativePixmap,
                                         const egl::AttributeMap &attribs) override;
    
        ContextImpl *createContext(const gl::State &state,
                                   gl::ErrorSet *errorSet,
                                   const egl::Config *configuration,
                                   const gl::Context *shareContext,
                                   const egl::AttributeMap &attribs) override;
    
        egl::ConfigSet generateConfigs() override;
    
        bool testDeviceLost() override;
        egl::Error restoreLostDevice(const egl::Display *display) override;
    
        bool isValidNativeWindow(EGLNativeWindowType window) const override;
        egl::Error validateClientBuffer(const egl::Config *configuration,
                                        EGLenum buftype,
                                        EGLClientBuffer clientBuffer,
                                        const egl::AttributeMap &attribs) const override;
    
        egl::Error waitClient(const gl::Context *context) override;
        egl::Error waitNative(const gl::Context *context, EGLint engine) override;
    
        egl::Error makeCurrent(egl::Display *display,
                               egl::Surface *drawSurface,
                               egl::Surface *readSurface,
                               gl::Context *context) override;
    
        egl::Error registerD3DDevice(IUnknown *device, HANDLE *outHandle);
        void releaseD3DDevice(HANDLE handle);
    
        gl::Version getMaxSupportedESVersion() const override;
    
        void destroyNativeContext(HGLRC context);
    
        WorkerContext *createWorkerContext(std::string *infoLog,
                                           HGLRC sharedContext,
                                           const std::vector<int> &workerContextAttribs);
    
        void initializeFrontendFeatures(angle::FrontendFeatures *features) const override;
    
        void populateFeatureList(angle::FeatureList *features) override;
    
        RendererGL *getRenderer() const override;
    
      private:
        egl::Error initializeImpl(egl::Display *display);
        void destroy();
    
        egl::Error initializeD3DDevice();
    
        void generateExtensions(egl::DisplayExtensions *outExtensions) const override;
        void generateCaps(egl::Caps *outCaps) const override;
    
        egl::Error makeCurrentSurfaceless(gl::Context *context) override;
    
        HGLRC initializeContextAttribs(const egl::AttributeMap &eglAttributes,
                                       HGLRC &sharedContext,
                                       bool &useARBShare,
                                       std::vector<int> &workerContextAttribs) const;
        HGLRC createContextAttribs(const gl::Version &version,
                                   int profileMask,
                                   HGLRC &sharedContext,
                                   bool &useARBShare,
                                   std::vector<int> &workerContextAttribs) const;
    
        egl::Error createRenderer(std::shared_ptr<RendererWGL> *outRenderer);
    
        std::shared_ptr<RendererWGL> mRenderer;
    
        struct CurrentNativeContext
        {
            HDC dc     = nullptr;
            HGLRC glrc = nullptr;
        };
        angle::HashMap<std::thread::id, CurrentNativeContext> mCurrentNativeContexts;
    
        HMODULE mOpenGLModule;
    
        FunctionsWGL *mFunctionsWGL;
    
        bool mHasWGLCreateContextRobustness;
        bool mHasRobustness;
    
        egl::AttributeMap mDisplayAttributes;
    
        ATOM mWindowClass;
        HWND mWindow;
        HDC mDeviceContext;
        int mPixelFormat;
    
        bool mUseDXGISwapChains;
        bool mHasDXInterop;
        HMODULE mDxgiModule;
        HMODULE mD3d11Module;
        HANDLE mD3D11DeviceHandle;
        ID3D11Device *mD3D11Device;
    
        struct D3DObjectHandle
        {
            HANDLE handle;
            size_t refCount;
        };
        std::map<IUnknown *, D3DObjectHandle> mRegisteredD3DDevices;
    
        bool mUseARBShare;
    };
    
    }  // namespace rx
    
    #endif  // LIBANGLE_RENDERER_GL_WGL_DISPLAYWGL_H_