Commit 62baf0cf by Jamie Madill

Add a shared egl::SurfaceState struct.

This structure can share GL-level properties (immutably) with the implementation. BUG=angleproject:1369 Change-Id: I1e9406f18b6b88bb7db2a8f87b5e6d547cc7ecb1 Reviewed-on: https://chromium-review.googlesource.com/342061Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 0f2b1560
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "libANGLE/Surface.h" #include "libANGLE/Surface.h"
#include <EGL/eglext.h> #include <EGL/eglext.h>
#include <iostream> #include <iostream>
...@@ -23,13 +22,13 @@ ...@@ -23,13 +22,13 @@
namespace egl namespace egl
{ {
Surface::Surface(rx::SurfaceImpl *impl, SurfaceState::SurfaceState() : defaultFramebuffer(nullptr)
EGLint surfaceType, {
const egl::Config *config, }
const AttributeMap &attributes)
Surface::Surface(EGLint surfaceType, const egl::Config *config, const AttributeMap &attributes)
: FramebufferAttachmentObject(), : FramebufferAttachmentObject(),
mImplementation(impl), mImplementation(nullptr),
mDefaultFramebuffer(nullptr),
mCurrentCount(0), mCurrentCount(0),
mDestroyed(false), mDestroyed(false),
mType(surfaceType), mType(surfaceType),
...@@ -43,7 +42,7 @@ Surface::Surface(rx::SurfaceImpl *impl, ...@@ -43,7 +42,7 @@ Surface::Surface(rx::SurfaceImpl *impl,
// FIXME: Determine actual pixel aspect ratio // FIXME: Determine actual pixel aspect ratio
mPixelAspectRatio(static_cast<EGLint>(1.0 * EGL_DISPLAY_SCALING)), mPixelAspectRatio(static_cast<EGLint>(1.0 * EGL_DISPLAY_SCALING)),
mRenderBuffer(EGL_BACK_BUFFER), mRenderBuffer(EGL_BACK_BUFFER),
mSwapBehavior(impl->getSwapBehavior()), mSwapBehavior(EGL_NONE),
mOrientation(0), mOrientation(0),
mTexture() mTexture()
{ {
...@@ -81,17 +80,20 @@ Surface::~Surface() ...@@ -81,17 +80,20 @@ Surface::~Surface()
mTexture.set(nullptr); mTexture.set(nullptr);
} }
SafeDelete(mDefaultFramebuffer); SafeDelete(mState.defaultFramebuffer);
SafeDelete(mImplementation); SafeDelete(mImplementation);
} }
Error Surface::initialize() Error Surface::initialize()
{ {
// Initialized here since impl is nullptr in the constructor.
mSwapBehavior = mImplementation->getSwapBehavior();
ANGLE_TRY(mImplementation->initialize()); ANGLE_TRY(mImplementation->initialize());
// Must happen after implementation initialize for OSX. // Must happen after implementation initialize for OSX.
mDefaultFramebuffer = createDefaultFramebuffer(); mState.defaultFramebuffer = createDefaultFramebuffer();
ASSERT(mDefaultFramebuffer != nullptr); ASSERT(mState.defaultFramebuffer != nullptr);
return Error(EGL_SUCCESS); return Error(EGL_SUCCESS);
} }
...@@ -273,11 +275,9 @@ WindowSurface::WindowSurface(rx::EGLImplFactory *implFactory, ...@@ -273,11 +275,9 @@ WindowSurface::WindowSurface(rx::EGLImplFactory *implFactory,
const egl::Config *config, const egl::Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
const AttributeMap &attribs) const AttributeMap &attribs)
: Surface(implFactory->createWindowSurface(config, window, attribs), : Surface(EGL_WINDOW_BIT, config, attribs)
EGL_WINDOW_BIT,
config,
attribs)
{ {
mImplementation = implFactory->createWindowSurface(mState, config, window, attribs);
} }
WindowSurface::~WindowSurface() WindowSurface::~WindowSurface()
...@@ -287,19 +287,19 @@ WindowSurface::~WindowSurface() ...@@ -287,19 +287,19 @@ WindowSurface::~WindowSurface()
PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory, PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory,
const Config *config, const Config *config,
const AttributeMap &attribs) const AttributeMap &attribs)
: Surface(implFactory->createPbufferSurface(config, attribs), EGL_PBUFFER_BIT, config, attribs) : Surface(EGL_PBUFFER_BIT, config, attribs)
{ {
mImplementation = implFactory->createPbufferSurface(mState, config, attribs);
} }
PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory, PbufferSurface::PbufferSurface(rx::EGLImplFactory *implFactory,
const Config *config, const Config *config,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const AttributeMap &attribs) const AttributeMap &attribs)
: Surface(implFactory->createPbufferFromClientBuffer(config, shareHandle, attribs), : Surface(EGL_PBUFFER_BIT, config, attribs)
EGL_PBUFFER_BIT,
config,
attribs)
{ {
mImplementation =
implFactory->createPbufferFromClientBuffer(mState, config, shareHandle, attribs);
} }
PbufferSurface::~PbufferSurface() PbufferSurface::~PbufferSurface()
...@@ -310,11 +310,9 @@ PixmapSurface::PixmapSurface(rx::EGLImplFactory *implFactory, ...@@ -310,11 +310,9 @@ PixmapSurface::PixmapSurface(rx::EGLImplFactory *implFactory,
const Config *config, const Config *config,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const AttributeMap &attribs) const AttributeMap &attribs)
: Surface(implFactory->createPixmapSurface(config, nativePixmap, attribs), : Surface(EGL_PIXMAP_BIT, config, attribs)
EGL_PIXMAP_BIT,
config,
attribs)
{ {
mImplementation = implFactory->createPixmapSurface(mState, config, nativePixmap, attribs);
} }
PixmapSurface::~PixmapSurface() PixmapSurface::~PixmapSurface()
......
...@@ -36,6 +36,13 @@ class AttributeMap; ...@@ -36,6 +36,13 @@ class AttributeMap;
class Display; class Display;
struct Config; struct Config;
struct SurfaceState final : angle::NonCopyable
{
SurfaceState();
gl::Framebuffer *defaultFramebuffer;
};
class Surface : public gl::FramebufferAttachmentObject class Surface : public gl::FramebufferAttachmentObject
{ {
public: public:
...@@ -70,7 +77,7 @@ class Surface : public gl::FramebufferAttachmentObject ...@@ -70,7 +77,7 @@ class Surface : public gl::FramebufferAttachmentObject
EGLenum getTextureTarget() const; EGLenum getTextureTarget() const;
gl::Texture *getBoundTexture() const { return mTexture.get(); } gl::Texture *getBoundTexture() const { return mTexture.get(); }
gl::Framebuffer *getDefaultFramebuffer() { return mDefaultFramebuffer; } gl::Framebuffer *getDefaultFramebuffer() { return mState.defaultFramebuffer; }
EGLint isFixedSize() const; EGLint isFixedSize() const;
...@@ -92,10 +99,7 @@ class Surface : public gl::FramebufferAttachmentObject ...@@ -92,10 +99,7 @@ class Surface : public gl::FramebufferAttachmentObject
bool directComposition() const { return mDirectComposition; } bool directComposition() const { return mDirectComposition; }
protected: protected:
Surface(rx::SurfaceImpl *impl, Surface(EGLint surfaceType, const egl::Config *config, const AttributeMap &attributes);
EGLint surfaceType,
const egl::Config *config,
const AttributeMap &attributes);
rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override { return mImplementation; } rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override { return mImplementation; }
gl::Framebuffer *createDefaultFramebuffer(); gl::Framebuffer *createDefaultFramebuffer();
...@@ -104,8 +108,8 @@ class Surface : public gl::FramebufferAttachmentObject ...@@ -104,8 +108,8 @@ class Surface : public gl::FramebufferAttachmentObject
friend class gl::Texture; friend class gl::Texture;
void releaseTexImageFromTexture(); void releaseTexImageFromTexture();
SurfaceState mState;
rx::SurfaceImpl *mImplementation; rx::SurfaceImpl *mImplementation;
gl::Framebuffer *mDefaultFramebuffer;
int mCurrentCount; int mCurrentCount;
bool mDestroyed; bool mDestroyed;
......
...@@ -25,6 +25,7 @@ namespace ...@@ -25,6 +25,7 @@ namespace
class MockSurfaceImpl : public rx::SurfaceImpl class MockSurfaceImpl : public rx::SurfaceImpl
{ {
public: public:
MockSurfaceImpl() : SurfaceImpl(mockState) {}
virtual ~MockSurfaceImpl() { destroy(); } virtual ~MockSurfaceImpl() { destroy(); }
MOCK_METHOD0(initialize, egl::Error()); MOCK_METHOD0(initialize, egl::Error());
...@@ -42,6 +43,8 @@ class MockSurfaceImpl : public rx::SurfaceImpl ...@@ -42,6 +43,8 @@ class MockSurfaceImpl : public rx::SurfaceImpl
MOCK_METHOD2(getAttachmentRenderTarget, gl::Error(const gl::FramebufferAttachment::Target &, rx::FramebufferAttachmentRenderTarget **)); MOCK_METHOD2(getAttachmentRenderTarget, gl::Error(const gl::FramebufferAttachment::Target &, rx::FramebufferAttachmentRenderTarget **));
MOCK_METHOD0(destroy, void()); MOCK_METHOD0(destroy, void());
egl::SurfaceState mockState;
}; };
TEST(SurfaceTest, DestructionDeletesImpl) TEST(SurfaceTest, DestructionDeletesImpl)
...@@ -49,8 +52,7 @@ TEST(SurfaceTest, DestructionDeletesImpl) ...@@ -49,8 +52,7 @@ TEST(SurfaceTest, DestructionDeletesImpl)
NiceMock<MockEGLFactory> factory; NiceMock<MockEGLFactory> factory;
MockSurfaceImpl *impl = new MockSurfaceImpl; MockSurfaceImpl *impl = new MockSurfaceImpl;
EXPECT_CALL(*impl, getSwapBehavior()); EXPECT_CALL(factory, createWindowSurface(_, _, _, _)).WillOnce(Return(impl));
EXPECT_CALL(factory, createWindowSurface(_, _, _)).WillOnce(Return(impl));
egl::Config config; egl::Config config;
egl::Surface *surface = new egl::WindowSurface( egl::Surface *surface = new egl::WindowSurface(
......
...@@ -17,6 +17,7 @@ namespace egl ...@@ -17,6 +17,7 @@ namespace egl
class AttributeMap; class AttributeMap;
struct Config; struct Config;
class ImageSibling; class ImageSibling;
struct SurfaceState;
} }
namespace gl namespace gl
...@@ -37,15 +38,19 @@ class EGLImplFactory : angle::NonCopyable ...@@ -37,15 +38,19 @@ class EGLImplFactory : angle::NonCopyable
EGLImplFactory() {} EGLImplFactory() {}
virtual ~EGLImplFactory() {} virtual ~EGLImplFactory() {}
virtual SurfaceImpl *createWindowSurface(const egl::Config *configuration, virtual SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) = 0; const egl::AttributeMap &attribs) = 0;
virtual SurfaceImpl *createPbufferSurface(const egl::Config *configuration, virtual SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) = 0; const egl::AttributeMap &attribs) = 0;
virtual SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, virtual SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) = 0; const egl::AttributeMap &attribs) = 0;
virtual SurfaceImpl *createPixmapSurface(const egl::Config *configuration, virtual SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) = 0; const egl::AttributeMap &attribs) = 0;
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
namespace rx namespace rx
{ {
SurfaceImpl::SurfaceImpl() SurfaceImpl::SurfaceImpl(const egl::SurfaceState &state) : mState(state)
{ {
} }
......
...@@ -22,6 +22,7 @@ namespace egl ...@@ -22,6 +22,7 @@ namespace egl
{ {
class Display; class Display;
struct Config; struct Config;
struct SurfaceState;
} }
namespace rx namespace rx
...@@ -31,7 +32,7 @@ class FramebufferImpl; ...@@ -31,7 +32,7 @@ class FramebufferImpl;
class SurfaceImpl : public FramebufferAttachmentObjectImpl class SurfaceImpl : public FramebufferAttachmentObjectImpl
{ {
public: public:
SurfaceImpl(); SurfaceImpl(const egl::SurfaceState &surfaceState);
virtual ~SurfaceImpl(); virtual ~SurfaceImpl();
virtual egl::Error initialize() = 0; virtual egl::Error initialize() = 0;
...@@ -49,6 +50,9 @@ class SurfaceImpl : public FramebufferAttachmentObjectImpl ...@@ -49,6 +50,9 @@ class SurfaceImpl : public FramebufferAttachmentObjectImpl
virtual EGLint isPostSubBufferSupported() const = 0; virtual EGLint isPostSubBufferSupported() const = 0;
virtual EGLint getSwapBehavior() const = 0; virtual EGLint getSwapBehavior() const = 0;
protected:
const egl::SurfaceState &mState;
}; };
} }
......
...@@ -162,31 +162,34 @@ DisplayD3D::DisplayD3D() : mRenderer(nullptr) ...@@ -162,31 +162,34 @@ DisplayD3D::DisplayD3D() : mRenderer(nullptr)
{ {
} }
SurfaceImpl *DisplayD3D::createWindowSurface(const egl::SurfaceState &state,
SurfaceImpl *DisplayD3D::createWindowSurface(const egl::Config *configuration, const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
ASSERT(mRenderer != nullptr); ASSERT(mRenderer != nullptr);
return new WindowSurfaceD3D(mRenderer, mDisplay, configuration, window, attribs); return new WindowSurfaceD3D(state, mRenderer, mDisplay, configuration, window, attribs);
} }
SurfaceImpl *DisplayD3D::createPbufferSurface(const egl::Config *configuration, SurfaceImpl *DisplayD3D::createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
ASSERT(mRenderer != nullptr); ASSERT(mRenderer != nullptr);
return new PbufferSurfaceD3D(mRenderer, mDisplay, configuration, nullptr, attribs); return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, nullptr, attribs);
} }
SurfaceImpl *DisplayD3D::createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *DisplayD3D::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
ASSERT(mRenderer != nullptr); ASSERT(mRenderer != nullptr);
return new PbufferSurfaceD3D(mRenderer, mDisplay, configuration, shareHandle, attribs); return new PbufferSurfaceD3D(state, mRenderer, mDisplay, configuration, shareHandle, attribs);
} }
SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::Config *configuration, SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
......
...@@ -25,15 +25,19 @@ class DisplayD3D : public DisplayImpl ...@@ -25,15 +25,19 @@ class DisplayD3D : public DisplayImpl
virtual void terminate() override; virtual void terminate() override;
// Surface creation // Surface creation
SurfaceImpl *createWindowSurface(const egl::Config *configuration, SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::Config *configuration, SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::Config *configuration, SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
......
...@@ -21,13 +21,14 @@ ...@@ -21,13 +21,14 @@
namespace rx namespace rx
{ {
SurfaceD3D::SurfaceD3D(RendererD3D *renderer, SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
: SurfaceImpl(), : SurfaceImpl(state),
mRenderer(renderer), mRenderer(renderer),
mDisplay(display), mDisplay(display),
mFixedSize(window == nullptr || attribs.get(EGL_FIXED_SIZE_ANGLE, EGL_FALSE) == EGL_TRUE), mFixedSize(window == nullptr || attribs.get(EGL_FIXED_SIZE_ANGLE, EGL_FALSE) == EGL_TRUE),
...@@ -334,12 +335,13 @@ gl::Error SurfaceD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment: ...@@ -334,12 +335,13 @@ gl::Error SurfaceD3D::getAttachmentRenderTarget(const gl::FramebufferAttachment:
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
WindowSurfaceD3D::WindowSurfaceD3D(RendererD3D *renderer, WindowSurfaceD3D::WindowSurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
: SurfaceD3D(renderer, display, config, window, static_cast<EGLClientBuffer>(0), attribs) : SurfaceD3D(state, renderer, display, config, window, static_cast<EGLClientBuffer>(0), attribs)
{ {
} }
...@@ -347,12 +349,14 @@ WindowSurfaceD3D::~WindowSurfaceD3D() ...@@ -347,12 +349,14 @@ WindowSurfaceD3D::~WindowSurfaceD3D()
{ {
} }
PbufferSurfaceD3D::PbufferSurfaceD3D(RendererD3D *renderer, PbufferSurfaceD3D::PbufferSurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
: SurfaceD3D(renderer, : SurfaceD3D(state,
renderer,
display, display,
config, config,
static_cast<EGLNativeWindowType>(0), static_cast<EGLNativeWindowType>(0),
......
...@@ -56,7 +56,8 @@ class SurfaceD3D : public SurfaceImpl ...@@ -56,7 +56,8 @@ class SurfaceD3D : public SurfaceImpl
FramebufferAttachmentRenderTarget **rtOut) override; FramebufferAttachmentRenderTarget **rtOut) override;
protected: protected:
SurfaceD3D(RendererD3D *renderer, SurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
...@@ -91,7 +92,8 @@ class SurfaceD3D : public SurfaceImpl ...@@ -91,7 +92,8 @@ class SurfaceD3D : public SurfaceImpl
class WindowSurfaceD3D : public SurfaceD3D class WindowSurfaceD3D : public SurfaceD3D
{ {
public: public:
WindowSurfaceD3D(RendererD3D *renderer, WindowSurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLNativeWindowType window, EGLNativeWindowType window,
...@@ -102,7 +104,8 @@ class WindowSurfaceD3D : public SurfaceD3D ...@@ -102,7 +104,8 @@ class WindowSurfaceD3D : public SurfaceD3D
class PbufferSurfaceD3D : public SurfaceD3D class PbufferSurfaceD3D : public SurfaceD3D
{ {
public: public:
PbufferSurfaceD3D(RendererD3D *renderer, PbufferSurfaceD3D(const egl::SurfaceState &state,
RendererD3D *renderer,
egl::Display *display, egl::Display *display,
const egl::Config *config, const egl::Config *config,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
namespace rx namespace rx
{ {
SurfaceGL::SurfaceGL(RendererGL *renderer) : SurfaceImpl(), mRenderer(renderer) SurfaceGL::SurfaceGL(const egl::SurfaceState &state, RendererGL *renderer)
: SurfaceImpl(state), mRenderer(renderer)
{ {
} }
......
...@@ -19,7 +19,7 @@ class RendererGL; ...@@ -19,7 +19,7 @@ class RendererGL;
class SurfaceGL : public SurfaceImpl class SurfaceGL : public SurfaceImpl
{ {
public: public:
SurfaceGL(RendererGL *renderer); SurfaceGL(const egl::SurfaceState &state, RendererGL *renderer);
~SurfaceGL() override; ~SurfaceGL() override;
gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target, gl::Error getAttachmentRenderTarget(const gl::FramebufferAttachment::Target &target,
......
...@@ -26,15 +26,19 @@ class DisplayCGL : public DisplayGL ...@@ -26,15 +26,19 @@ class DisplayCGL : public DisplayGL
egl::Error initialize(egl::Display *display) override; egl::Error initialize(egl::Display *display) override;
void terminate() override; void terminate() override;
SurfaceImpl *createWindowSurface(const egl::Config *configuration, SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::Config *configuration, SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::Config *configuration, SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
......
...@@ -109,22 +109,25 @@ void DisplayCGL::terminate() ...@@ -109,22 +109,25 @@ void DisplayCGL::terminate()
SafeDelete(mFunctions); SafeDelete(mFunctions);
} }
SurfaceImpl *DisplayCGL::createWindowSurface(const egl::Config *configuration, SurfaceImpl *DisplayCGL::createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
return new WindowSurfaceCGL(this->getRenderer(), window, mFunctions, mContext); return new WindowSurfaceCGL(state, this->getRenderer(), window, mFunctions, mContext);
} }
SurfaceImpl *DisplayCGL::createPbufferSurface(const egl::Config *configuration, SurfaceImpl *DisplayCGL::createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
EGLint width = static_cast<EGLint>(attribs.get(EGL_WIDTH, 0)); EGLint width = static_cast<EGLint>(attribs.get(EGL_WIDTH, 0));
EGLint height = static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0)); EGLint height = static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0));
return new PbufferSurfaceCGL(this->getRenderer(), width, height, mFunctions); return new PbufferSurfaceCGL(state, this->getRenderer(), width, height, mFunctions);
} }
SurfaceImpl* DisplayCGL::createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *DisplayCGL::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
...@@ -132,7 +135,8 @@ SurfaceImpl* DisplayCGL::createPbufferFromClientBuffer(const egl::Config *config ...@@ -132,7 +135,8 @@ SurfaceImpl* DisplayCGL::createPbufferFromClientBuffer(const egl::Config *config
return nullptr; return nullptr;
} }
SurfaceImpl *DisplayCGL::createPixmapSurface(const egl::Config *configuration, SurfaceImpl *DisplayCGL::createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
......
...@@ -22,7 +22,8 @@ struct WorkaroundsGL; ...@@ -22,7 +22,8 @@ struct WorkaroundsGL;
class PbufferSurfaceCGL : public SurfaceGL class PbufferSurfaceCGL : public SurfaceGL
{ {
public: public:
PbufferSurfaceCGL(RendererGL *renderer, PbufferSurfaceCGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
const FunctionsGL *functions); const FunctionsGL *functions);
......
...@@ -18,11 +18,12 @@ ...@@ -18,11 +18,12 @@
namespace rx namespace rx
{ {
PbufferSurfaceCGL::PbufferSurfaceCGL(RendererGL *renderer, PbufferSurfaceCGL::PbufferSurfaceCGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
const FunctionsGL *functions) const FunctionsGL *functions)
: SurfaceGL(renderer), : SurfaceGL(state, renderer),
mWidth(width), mWidth(width),
mHeight(height), mHeight(height),
mFunctions(functions), mFunctions(functions),
......
...@@ -54,7 +54,8 @@ struct SharedSwapState ...@@ -54,7 +54,8 @@ struct SharedSwapState
class WindowSurfaceCGL : public SurfaceGL class WindowSurfaceCGL : public SurfaceGL
{ {
public: public:
WindowSurfaceCGL(RendererGL *renderer, WindowSurfaceCGL(const egl::SurfaceState &state,
RendererGL *renderer,
CALayer *layer, CALayer *layer,
const FunctionsGL *functions, const FunctionsGL *functions,
CGLContextObj context); CGLContextObj context);
......
...@@ -142,11 +142,12 @@ ...@@ -142,11 +142,12 @@
namespace rx namespace rx
{ {
WindowSurfaceCGL::WindowSurfaceCGL(RendererGL *renderer, WindowSurfaceCGL::WindowSurfaceCGL(const egl::SurfaceState &state,
RendererGL *renderer,
CALayer *layer, CALayer *layer,
const FunctionsGL *functions, const FunctionsGL *functions,
CGLContextObj context) CGLContextObj context)
: SurfaceGL(renderer), : SurfaceGL(state, renderer),
mSwapLayer(nil), mSwapLayer(nil),
mCurrentSwapId(0), mCurrentSwapId(0),
mLayer(layer), mLayer(layer),
......
...@@ -830,7 +830,8 @@ void DisplayOzone::terminate() ...@@ -830,7 +830,8 @@ void DisplayOzone::terminate()
close(fd); close(fd);
} }
SurfaceImpl *DisplayOzone::createWindowSurface(const egl::Config *configuration, SurfaceImpl *DisplayOzone::createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
...@@ -840,10 +841,11 @@ SurfaceImpl *DisplayOzone::createWindowSurface(const egl::Config *configuration, ...@@ -840,10 +841,11 @@ SurfaceImpl *DisplayOzone::createWindowSurface(const egl::Config *configuration,
{ {
return nullptr; return nullptr;
} }
return new SurfaceOzone(getRenderer(), buffer); return new SurfaceOzone(state, getRenderer(), buffer);
} }
SurfaceImpl *DisplayOzone::createPbufferSurface(const egl::Config *configuration, SurfaceImpl *DisplayOzone::createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
EGLAttrib width = attribs.get(EGL_WIDTH, 0); EGLAttrib width = attribs.get(EGL_WIDTH, 0);
...@@ -854,10 +856,11 @@ SurfaceImpl *DisplayOzone::createPbufferSurface(const egl::Config *configuration ...@@ -854,10 +856,11 @@ SurfaceImpl *DisplayOzone::createPbufferSurface(const egl::Config *configuration
{ {
return nullptr; return nullptr;
} }
return new SurfaceOzone(getRenderer(), buffer); return new SurfaceOzone(state, getRenderer(), buffer);
} }
SurfaceImpl *DisplayOzone::createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *DisplayOzone::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
...@@ -865,7 +868,8 @@ SurfaceImpl *DisplayOzone::createPbufferFromClientBuffer(const egl::Config *conf ...@@ -865,7 +868,8 @@ SurfaceImpl *DisplayOzone::createPbufferFromClientBuffer(const egl::Config *conf
return nullptr; return nullptr;
} }
SurfaceImpl *DisplayOzone::createPixmapSurface(const egl::Config *configuration, SurfaceImpl *DisplayOzone::createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
......
...@@ -109,15 +109,19 @@ class DisplayOzone final : public DisplayGL ...@@ -109,15 +109,19 @@ class DisplayOzone final : public DisplayGL
egl::Error initialize(egl::Display *display) override; egl::Error initialize(egl::Display *display) override;
void terminate() override; void terminate() override;
SurfaceImpl *createWindowSurface(const egl::Config *configuration, SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::Config *configuration, SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::Config *configuration, SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
......
...@@ -14,8 +14,10 @@ ...@@ -14,8 +14,10 @@
namespace rx namespace rx
{ {
SurfaceOzone::SurfaceOzone(RendererGL *renderer, DisplayOzone::Buffer *buffer) SurfaceOzone::SurfaceOzone(const egl::SurfaceState &state,
: SurfaceGL(renderer), mBuffer(buffer) RendererGL *renderer,
DisplayOzone::Buffer *buffer)
: SurfaceGL(state, renderer), mBuffer(buffer)
{ {
} }
......
...@@ -18,7 +18,9 @@ namespace rx ...@@ -18,7 +18,9 @@ namespace rx
class SurfaceOzone : public SurfaceGL class SurfaceOzone : public SurfaceGL
{ {
public: public:
SurfaceOzone(RendererGL *renderer, DisplayOzone::Buffer *buffer); SurfaceOzone(const egl::SurfaceState &state,
RendererGL *renderer,
DisplayOzone::Buffer *buffer);
~SurfaceOzone() override; ~SurfaceOzone() override;
FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) override; FramebufferImpl *createDefaultFramebuffer(const gl::FramebufferState &state) override;
......
...@@ -382,18 +382,20 @@ void DisplayGLX::terminate() ...@@ -382,18 +382,20 @@ void DisplayGLX::terminate()
SafeDelete(mFunctionsGL); SafeDelete(mFunctionsGL);
} }
SurfaceImpl *DisplayGLX::createWindowSurface(const egl::Config *configuration, SurfaceImpl *DisplayGLX::createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
ASSERT(configIdToGLXConfig.count(configuration->configID) > 0); ASSERT(configIdToGLXConfig.count(configuration->configID) > 0);
glx::FBConfig fbConfig = configIdToGLXConfig[configuration->configID]; glx::FBConfig fbConfig = configIdToGLXConfig[configuration->configID];
return new WindowSurfaceGLX(mGLX, this, this->getRenderer(), window, mGLX.getDisplay(), return new WindowSurfaceGLX(state, mGLX, this, this->getRenderer(), window, mGLX.getDisplay(),
mContext, fbConfig); mContext, fbConfig);
} }
SurfaceImpl *DisplayGLX::createPbufferSurface(const egl::Config *configuration, SurfaceImpl *DisplayGLX::createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
ASSERT(configIdToGLXConfig.count(configuration->configID) > 0); ASSERT(configIdToGLXConfig.count(configuration->configID) > 0);
...@@ -403,11 +405,12 @@ SurfaceImpl *DisplayGLX::createPbufferSurface(const egl::Config *configuration, ...@@ -403,11 +405,12 @@ SurfaceImpl *DisplayGLX::createPbufferSurface(const egl::Config *configuration,
EGLint height = static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0)); EGLint height = static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0));
bool largest = (attribs.get(EGL_LARGEST_PBUFFER, EGL_FALSE) == EGL_TRUE); bool largest = (attribs.get(EGL_LARGEST_PBUFFER, EGL_FALSE) == EGL_TRUE);
return new PbufferSurfaceGLX(this->getRenderer(), width, height, largest, mGLX, mContext, return new PbufferSurfaceGLX(state, this->getRenderer(), width, height, largest, mGLX, mContext,
fbConfig); fbConfig);
} }
SurfaceImpl* DisplayGLX::createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *DisplayGLX::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
...@@ -415,7 +418,8 @@ SurfaceImpl* DisplayGLX::createPbufferFromClientBuffer(const egl::Config *config ...@@ -415,7 +418,8 @@ SurfaceImpl* DisplayGLX::createPbufferFromClientBuffer(const egl::Config *config
return nullptr; return nullptr;
} }
SurfaceImpl *DisplayGLX::createPixmapSurface(const egl::Config *configuration, SurfaceImpl *DisplayGLX::createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
......
...@@ -43,15 +43,19 @@ class DisplayGLX : public DisplayGL ...@@ -43,15 +43,19 @@ class DisplayGLX : public DisplayGL
egl::Error initialize(egl::Display *display) override; egl::Error initialize(egl::Display *display) override;
void terminate() override; void terminate() override;
SurfaceImpl *createWindowSurface(const egl::Config *configuration, SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::Config *configuration, SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::Config *configuration, SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
......
...@@ -15,14 +15,15 @@ ...@@ -15,14 +15,15 @@
namespace rx namespace rx
{ {
PbufferSurfaceGLX::PbufferSurfaceGLX(RendererGL *renderer, PbufferSurfaceGLX::PbufferSurfaceGLX(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
bool largest, bool largest,
const FunctionsGLX &glx, const FunctionsGLX &glx,
glx::Context context, glx::Context context,
glx::FBConfig fbConfig) glx::FBConfig fbConfig)
: SurfaceGLX(renderer), : SurfaceGLX(state, renderer),
mWidth(width), mWidth(width),
mHeight(height), mHeight(height),
mLargest(largest), mLargest(largest),
......
...@@ -20,7 +20,8 @@ class FunctionsGLX; ...@@ -20,7 +20,8 @@ class FunctionsGLX;
class PbufferSurfaceGLX : public SurfaceGLX class PbufferSurfaceGLX : public SurfaceGLX
{ {
public: public:
PbufferSurfaceGLX(RendererGL *renderer, PbufferSurfaceGLX(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
bool largest, bool largest,
......
...@@ -17,7 +17,7 @@ namespace rx ...@@ -17,7 +17,7 @@ namespace rx
class SurfaceGLX : public SurfaceGL class SurfaceGLX : public SurfaceGL
{ {
public: public:
SurfaceGLX(RendererGL *renderer) : SurfaceGL(renderer) {} SurfaceGLX(const egl::SurfaceState &state, RendererGL *renderer) : SurfaceGL(state, renderer) {}
virtual egl::Error checkForResize() = 0; virtual egl::Error checkForResize() = 0;
}; };
......
...@@ -21,14 +21,15 @@ static int IgnoreX11Errors(Display *, XErrorEvent *) ...@@ -21,14 +21,15 @@ static int IgnoreX11Errors(Display *, XErrorEvent *)
return 0; return 0;
} }
WindowSurfaceGLX::WindowSurfaceGLX(const FunctionsGLX &glx, WindowSurfaceGLX::WindowSurfaceGLX(const egl::SurfaceState &state,
const FunctionsGLX &glx,
DisplayGLX *glxDisplay, DisplayGLX *glxDisplay,
RendererGL *renderer, RendererGL *renderer,
Window window, Window window,
Display *display, Display *display,
glx::Context context, glx::Context context,
glx::FBConfig fbConfig) glx::FBConfig fbConfig)
: SurfaceGLX(renderer), : SurfaceGLX(state, renderer),
mParent(window), mParent(window),
mWindow(0), mWindow(0),
mDisplay(display), mDisplay(display),
......
...@@ -22,7 +22,8 @@ class FunctionsGLX; ...@@ -22,7 +22,8 @@ class FunctionsGLX;
class WindowSurfaceGLX : public SurfaceGLX class WindowSurfaceGLX : public SurfaceGLX
{ {
public: public:
WindowSurfaceGLX(const FunctionsGLX &glx, WindowSurfaceGLX(const egl::SurfaceState &state,
const FunctionsGLX &glx,
DisplayGLX *glxDisplay, DisplayGLX *glxDisplay,
RendererGL *renderer, RendererGL *renderer,
Window window, Window window,
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
namespace rx namespace rx
{ {
DXGISwapChainWindowSurfaceWGL::DXGISwapChainWindowSurfaceWGL(RendererGL *renderer, DXGISwapChainWindowSurfaceWGL::DXGISwapChainWindowSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLNativeWindowType window, EGLNativeWindowType window,
ID3D11Device *device, ID3D11Device *device,
HANDLE deviceHandle, HANDLE deviceHandle,
...@@ -31,7 +32,7 @@ DXGISwapChainWindowSurfaceWGL::DXGISwapChainWindowSurfaceWGL(RendererGL *rendere ...@@ -31,7 +32,7 @@ DXGISwapChainWindowSurfaceWGL::DXGISwapChainWindowSurfaceWGL(RendererGL *rendere
const FunctionsGL *functionsGL, const FunctionsGL *functionsGL,
const FunctionsWGL *functionsWGL, const FunctionsWGL *functionsWGL,
EGLint orientation) EGLint orientation)
: SurfaceGL(renderer), : SurfaceGL(state, renderer),
mWindow(window), mWindow(window),
mStateManager(renderer->getStateManager()), mStateManager(renderer->getStateManager()),
mWorkarounds(renderer->getWorkarounds()), mWorkarounds(renderer->getWorkarounds()),
......
...@@ -26,7 +26,8 @@ struct WorkaroundsGL; ...@@ -26,7 +26,8 @@ struct WorkaroundsGL;
class DXGISwapChainWindowSurfaceWGL : public SurfaceGL class DXGISwapChainWindowSurfaceWGL : public SurfaceGL
{ {
public: public:
DXGISwapChainWindowSurfaceWGL(RendererGL *renderer, DXGISwapChainWindowSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLNativeWindowType window, EGLNativeWindowType window,
ID3D11Device *device, ID3D11Device *device,
HANDLE deviceHandle, HANDLE deviceHandle,
......
...@@ -408,25 +408,27 @@ void DisplayWGL::terminate() ...@@ -408,25 +408,27 @@ void DisplayWGL::terminate()
ASSERT(mRegisteredD3DDevices.empty()); ASSERT(mRegisteredD3DDevices.empty());
} }
SurfaceImpl *DisplayWGL::createWindowSurface(const egl::Config *configuration, SurfaceImpl *DisplayWGL::createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
EGLint orientation = static_cast<EGLint>(attribs.get(EGL_SURFACE_ORIENTATION_ANGLE, 0)); EGLint orientation = static_cast<EGLint>(attribs.get(EGL_SURFACE_ORIENTATION_ANGLE, 0));
if (mUseDXGISwapChains) if (mUseDXGISwapChains)
{ {
return new DXGISwapChainWindowSurfaceWGL(this->getRenderer(), window, mD3D11Device, return new DXGISwapChainWindowSurfaceWGL(state, this->getRenderer(), window, mD3D11Device,
mD3D11DeviceHandle, mWGLContext, mDeviceContext, mD3D11DeviceHandle, mWGLContext, mDeviceContext,
mFunctionsGL, mFunctionsWGL, orientation); mFunctionsGL, mFunctionsWGL, orientation);
} }
else else
{ {
return new WindowSurfaceWGL(this->getRenderer(), window, mPixelFormat, mWGLContext, return new WindowSurfaceWGL(state, this->getRenderer(), window, mPixelFormat, mWGLContext,
mFunctionsWGL, orientation); mFunctionsWGL, orientation);
} }
} }
SurfaceImpl *DisplayWGL::createPbufferSurface(const egl::Config *configuration, SurfaceImpl *DisplayWGL::createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
EGLint width = static_cast<EGLint>(attribs.get(EGL_WIDTH, 0)); EGLint width = static_cast<EGLint>(attribs.get(EGL_WIDTH, 0));
...@@ -435,11 +437,13 @@ SurfaceImpl *DisplayWGL::createPbufferSurface(const egl::Config *configuration, ...@@ -435,11 +437,13 @@ SurfaceImpl *DisplayWGL::createPbufferSurface(const egl::Config *configuration,
EGLenum textureFormat = static_cast<EGLenum>(attribs.get(EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE)); EGLenum textureFormat = static_cast<EGLenum>(attribs.get(EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE));
EGLenum textureTarget = static_cast<EGLenum>(attribs.get(EGL_TEXTURE_TARGET, EGL_NO_TEXTURE)); EGLenum textureTarget = static_cast<EGLenum>(attribs.get(EGL_TEXTURE_TARGET, EGL_NO_TEXTURE));
return new PbufferSurfaceWGL(this->getRenderer(), width, height, textureFormat, textureTarget, return new PbufferSurfaceWGL(state, this->getRenderer(), width, height, textureFormat,
largest, mPixelFormat, mDeviceContext, mWGLContext, mFunctionsWGL); textureTarget, largest, mPixelFormat, mDeviceContext, mWGLContext,
mFunctionsWGL);
} }
SurfaceImpl *DisplayWGL::createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *DisplayWGL::createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
...@@ -447,7 +451,8 @@ SurfaceImpl *DisplayWGL::createPbufferFromClientBuffer(const egl::Config *config ...@@ -447,7 +451,8 @@ SurfaceImpl *DisplayWGL::createPbufferFromClientBuffer(const egl::Config *config
return nullptr; return nullptr;
} }
SurfaceImpl *DisplayWGL::createPixmapSurface(const egl::Config *configuration, SurfaceImpl *DisplayWGL::createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) const egl::AttributeMap &attribs)
{ {
......
...@@ -28,15 +28,19 @@ class DisplayWGL : public DisplayGL ...@@ -28,15 +28,19 @@ class DisplayWGL : public DisplayGL
void terminate() override; void terminate() override;
// Surface creation // Surface creation
SurfaceImpl *createWindowSurface(const egl::Config *configuration, SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLNativeWindowType window, EGLNativeWindowType window,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferSurface(const egl::Config *configuration, SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
const egl::Config *configuration,
EGLClientBuffer shareHandle, EGLClientBuffer shareHandle,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
SurfaceImpl *createPixmapSurface(const egl::Config *configuration, SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
const egl::Config *configuration,
NativePixmapType nativePixmap, NativePixmapType nativePixmap,
const egl::AttributeMap &attribs) override; const egl::AttributeMap &attribs) override;
......
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
namespace rx namespace rx
{ {
PbufferSurfaceWGL::PbufferSurfaceWGL(RendererGL *renderer, PbufferSurfaceWGL::PbufferSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
EGLenum textureFormat, EGLenum textureFormat,
...@@ -26,7 +27,7 @@ PbufferSurfaceWGL::PbufferSurfaceWGL(RendererGL *renderer, ...@@ -26,7 +27,7 @@ PbufferSurfaceWGL::PbufferSurfaceWGL(RendererGL *renderer,
HDC deviceContext, HDC deviceContext,
HGLRC wglContext, HGLRC wglContext,
const FunctionsWGL *functions) const FunctionsWGL *functions)
: SurfaceGL(renderer), : SurfaceGL(state, renderer),
mWidth(width), mWidth(width),
mHeight(height), mHeight(height),
mLargest(largest), mLargest(largest),
......
...@@ -21,7 +21,8 @@ class FunctionsWGL; ...@@ -21,7 +21,8 @@ class FunctionsWGL;
class PbufferSurfaceWGL : public SurfaceGL class PbufferSurfaceWGL : public SurfaceGL
{ {
public: public:
PbufferSurfaceWGL(RendererGL *renderer, PbufferSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLint width, EGLint width,
EGLint height, EGLint height,
EGLenum textureFormat, EGLenum textureFormat,
......
...@@ -16,13 +16,14 @@ ...@@ -16,13 +16,14 @@
namespace rx namespace rx
{ {
WindowSurfaceWGL::WindowSurfaceWGL(RendererGL *renderer, WindowSurfaceWGL::WindowSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLNativeWindowType window, EGLNativeWindowType window,
int pixelFormat, int pixelFormat,
HGLRC wglContext, HGLRC wglContext,
const FunctionsWGL *functions, const FunctionsWGL *functions,
EGLint orientation) EGLint orientation)
: SurfaceGL(renderer), : SurfaceGL(state, renderer),
mPixelFormat(pixelFormat), mPixelFormat(pixelFormat),
mWGLContext(wglContext), mWGLContext(wglContext),
mWindow(window), mWindow(window),
......
...@@ -21,7 +21,8 @@ class FunctionsWGL; ...@@ -21,7 +21,8 @@ class FunctionsWGL;
class WindowSurfaceWGL : public SurfaceGL class WindowSurfaceWGL : public SurfaceGL
{ {
public: public:
WindowSurfaceWGL(RendererGL *renderer, WindowSurfaceWGL(const egl::SurfaceState &state,
RendererGL *renderer,
EGLNativeWindowType window, EGLNativeWindowType window,
int pixelFormat, int pixelFormat,
HGLRC wglContext, HGLRC wglContext,
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#ifndef TESTS_ANGLE_UNITTESTS_UTILS_H_ #ifndef TESTS_ANGLE_UNITTESTS_UTILS_H_
#define TESTS_ANGLE_UNITTESTS_UTILS_H_ #define TESTS_ANGLE_UNITTESTS_UTILS_H_
#include "libANGLE/Surface.h"
#include "libANGLE/renderer/ContextImpl.h" #include "libANGLE/renderer/ContextImpl.h"
#include "libANGLE/renderer/EGLImplFactory.h" #include "libANGLE/renderer/EGLImplFactory.h"
#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/GLImplFactory.h"
...@@ -83,16 +84,25 @@ class MockGLFactory : public GLImplFactory ...@@ -83,16 +84,25 @@ class MockGLFactory : public GLImplFactory
class MockEGLFactory : public EGLImplFactory class MockEGLFactory : public EGLImplFactory
{ {
public: public:
MOCK_METHOD3(createWindowSurface, MOCK_METHOD4(createWindowSurface,
SurfaceImpl *(const egl::Config *, SurfaceImpl *(const egl::SurfaceState &,
const egl::Config *,
EGLNativeWindowType, EGLNativeWindowType,
const egl::AttributeMap &)); const egl::AttributeMap &));
MOCK_METHOD2(createPbufferSurface, MOCK_METHOD3(createPbufferSurface,
SurfaceImpl *(const egl::Config *, const egl::AttributeMap &)); SurfaceImpl *(const egl::SurfaceState &,
MOCK_METHOD3(createPbufferFromClientBuffer, const egl::Config *,
SurfaceImpl *(const egl::Config *, EGLClientBuffer, const egl::AttributeMap &)); const egl::AttributeMap &));
MOCK_METHOD3(createPixmapSurface, MOCK_METHOD4(createPbufferFromClientBuffer,
SurfaceImpl *(const egl::Config *, NativePixmapType, const egl::AttributeMap &)); SurfaceImpl *(const egl::SurfaceState &,
const egl::Config *,
EGLClientBuffer,
const egl::AttributeMap &));
MOCK_METHOD4(createPixmapSurface,
SurfaceImpl *(const egl::SurfaceState &,
const egl::Config *,
NativePixmapType,
const egl::AttributeMap &));
MOCK_METHOD3(createImage, ImageImpl *(EGLenum, egl::ImageSibling *, const egl::AttributeMap &)); MOCK_METHOD3(createImage, ImageImpl *(EGLenum, egl::ImageSibling *, const egl::AttributeMap &));
MOCK_METHOD1(createContext, ContextImpl *(const gl::ContextState &)); MOCK_METHOD1(createContext, ContextImpl *(const gl::ContextState &));
MOCK_METHOD2(createStreamProducerD3DTextureNV12, MOCK_METHOD2(createStreamProducerD3DTextureNV12,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment