Hash :
b16d105f
        
        Author :
  
        
        Date :
2024-10-03T10:25:32
        
      
Remove Desktop GL front-end support For Desktop GL applications, please use Zink! Bug: angleproject:370937467 Change-Id: Ie734634bb62a2e98c80e1b32d8b3d34624da3c04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905428 Reviewed-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
//
// Copyright 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.
//
// DisplayImpl.h: Implementation methods of egl::Display
#ifndef LIBANGLE_RENDERER_DISPLAYIMPL_H_
#define LIBANGLE_RENDERER_DISPLAYIMPL_H_
#include "common/Optional.h"
#include "common/angleutils.h"
#include "libANGLE/Caps.h"
#include "libANGLE/Config.h"
#include "libANGLE/Error.h"
#include "libANGLE/Observer.h"
#include "libANGLE/Stream.h"
#include "libANGLE/Version.h"
#include "libANGLE/renderer/EGLImplFactory.h"
#include "platform/Feature.h"
#include <set>
#include <vector>
namespace angle
{
struct FrontendFeatures;
}  // namespace angle
namespace egl
{
class AttributeMap;
class BlobCache;
class Display;
struct DisplayState;
struct Config;
class Surface;
class ImageSibling;
class Thread;
}  // namespace egl
namespace gl
{
class Context;
}  // namespace gl
namespace rx
{
class SurfaceImpl;
class ImageImpl;
struct ConfigDesc;
class DeviceImpl;
class StreamProducerImpl;
class DisplayImpl : public EGLImplFactory, public angle::Subject
{
  public:
    DisplayImpl(const egl::DisplayState &state);
    ~DisplayImpl() override;
    virtual egl::Error initialize(egl::Display *display) = 0;
    virtual void terminate()                             = 0;
    virtual egl::Error prepareForCall();
    virtual egl::Error releaseThread();
    virtual egl::Error makeCurrent(egl::Display *display,
                                   egl::Surface *drawSurface,
                                   egl::Surface *readSurface,
                                   gl::Context *context) = 0;
    virtual egl::ConfigSet generateConfigs() = 0;
    virtual bool testDeviceLost()                                     = 0;
    virtual egl::Error restoreLostDevice(const egl::Display *display) = 0;
    virtual bool isValidNativeWindow(EGLNativeWindowType window) const = 0;
    virtual egl::Error validateClientBuffer(const egl::Config *configuration,
                                            EGLenum buftype,
                                            EGLClientBuffer clientBuffer,
                                            const egl::AttributeMap &attribs) const;
    virtual egl::Error validateImageClientBuffer(const gl::Context *context,
                                                 EGLenum target,
                                                 EGLClientBuffer clientBuffer,
                                                 const egl::AttributeMap &attribs) const;
    virtual egl::Error validatePixmap(const egl::Config *config,
                                      EGLNativePixmapType pixmap,
                                      const egl::AttributeMap &attributes) const;
    virtual std::string getRendererDescription()                  = 0;
    virtual std::string getVendorString()                         = 0;
    virtual std::string getVersionString(bool includeFullVersion) = 0;
    virtual DeviceImpl *createDevice();
    virtual egl::Error waitClient(const gl::Context *context)                = 0;
    virtual egl::Error waitNative(const gl::Context *context, EGLint engine) = 0;
    virtual gl::Version getMaxSupportedESVersion() const                     = 0;
    virtual gl::Version getMaxConformantESVersion() const                    = 0;
    const egl::Caps &getCaps() const;
    virtual void setBlobCacheFuncs(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) {}
    const egl::DisplayExtensions &getExtensions() const;
    void setBlobCache(egl::BlobCache *blobCache) { mBlobCache = blobCache; }
    egl::BlobCache *getBlobCache() const { return mBlobCache; }
    virtual void initializeFrontendFeatures(angle::FrontendFeatures *features) const {}
    virtual void populateFeatureList(angle::FeatureList *features) = 0;
    const egl::DisplayState &getState() const { return mState; }
    virtual egl::Error handleGPUSwitch();
    virtual egl::Error forceGPUSwitch(EGLint gpuIDHigh, EGLint gpuIDLow);
    virtual egl::Error waitUntilWorkScheduled();
    virtual angle::NativeWindowSystem getWindowSystem() const;
    virtual bool supportsDmaBufFormat(EGLint format) const;
    virtual egl::Error queryDmaBufFormats(EGLint max_formats, EGLint *formats, EGLint *num_formats);
    virtual egl::Error queryDmaBufModifiers(EGLint format,
                                            EGLint max_modifiers,
                                            EGLuint64KHR *modifiers,
                                            EGLBoolean *external_only,
                                            EGLint *num_modifiers);
  protected:
    const egl::DisplayState &mState;
  private:
    virtual void generateExtensions(egl::DisplayExtensions *outExtensions) const = 0;
    virtual void generateCaps(egl::Caps *outCaps) const                          = 0;
    mutable bool mExtensionsInitialized;
    mutable egl::DisplayExtensions mExtensions;
    mutable bool mCapsInitialized;
    mutable egl::Caps mCaps;
    egl::BlobCache *mBlobCache;
};
}  // namespace rx
#endif  // LIBANGLE_RENDERER_DISPLAYIMPL_H_