From 7aea7e056d42ef5c71c3e6edf2f0a1f3cb5300be Mon Sep 17 00:00:00 2001 From: Jamie Madill Date: Tue, 10 May 2016 10:39:45 -0400 Subject: [PATCH] Add EGLImplFactory. Also rename ImplFactory to GLImplFactory. This will allow us to use the same factory design pattern for EGL objects, and to use State helper classes to share data with Impls. BUG=angleproject:1363 BUG=angleproject:1369 Change-Id: I07a8fe40838d5d4ca32b04910c306edeab4d25a7 Reviewed-on: https://chromium-review.googlesource.com/342051 Reviewed-by: Corentin Wallez Reviewed-by: Geoff Lang Commit-Queue: Jamie Madill --- src/libANGLE/Compiler.cpp | 4 +- src/libANGLE/Compiler.h | 4 +- src/libANGLE/Framebuffer.cpp | 4 +- src/libANGLE/Framebuffer.h | 4 +- src/libANGLE/Image_unittest.cpp | 4 +- src/libANGLE/Program.cpp | 2 +- src/libANGLE/Program.h | 4 +- src/libANGLE/ResourceManager.cpp | 4 +- src/libANGLE/ResourceManager.h | 6 +- src/libANGLE/ResourceManager_unittest.cpp | 2 +- src/libANGLE/Sampler.cpp | 4 +- src/libANGLE/Sampler.h | 4 +- src/libANGLE/Shader.cpp | 2 +- src/libANGLE/Shader.h | 4 +- src/libANGLE/Texture.cpp | 4 +- src/libANGLE/Texture.h | 4 +- src/libANGLE/TransformFeedback.cpp | 4 +- src/libANGLE/TransformFeedback.h | 4 +- src/libANGLE/TransformFeedback_unittest.cpp | 2 +- src/libANGLE/VertexArray.cpp | 4 +- src/libANGLE/VertexArray.h | 4 +- src/libANGLE/renderer/DisplayImpl.h | 27 +------- src/libANGLE/renderer/EGLImplFactory.h | 65 +++++++++++++++++++ .../{ImplFactory.h => GLImplFactory.h} | 18 ++--- src/libANGLE/renderer/Renderer.h | 4 +- src/libANGLE/validationES_unittest.cpp | 2 +- src/libGLESv2.gypi | 3 +- src/tests/angle_unittests_utils.h | 34 ++++++++-- 28 files changed, 148 insertions(+), 83 deletions(-) create mode 100644 src/libANGLE/renderer/EGLImplFactory.h rename src/libANGLE/renderer/{ImplFactory.h => GLImplFactory.h} (85%) diff --git a/src/libANGLE/Compiler.cpp b/src/libANGLE/Compiler.cpp index 7bf507346..15e094ea3 100644 --- a/src/libANGLE/Compiler.cpp +++ b/src/libANGLE/Compiler.cpp @@ -11,7 +11,7 @@ #include "common/debug.h" #include "libANGLE/ContextState.h" #include "libANGLE/renderer/CompilerImpl.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" namespace gl { @@ -25,7 +25,7 @@ size_t activeCompilerHandles = 0; } // anonymous namespace -Compiler::Compiler(rx::ImplFactory *implFactory, const ContextState &data) +Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &data) : mImplementation(implFactory->createCompiler()), mSpec(data.clientVersion > 2 ? SH_GLES3_SPEC : SH_GLES2_SPEC), mOutputType(mImplementation->getTranslatorOutputType()), diff --git a/src/libANGLE/Compiler.h b/src/libANGLE/Compiler.h index 74974de41..d254a1791 100644 --- a/src/libANGLE/Compiler.h +++ b/src/libANGLE/Compiler.h @@ -16,7 +16,7 @@ namespace rx { class CompilerImpl; -class ImplFactory; +class GLImplFactory; } namespace gl @@ -26,7 +26,7 @@ struct ContextState; class Compiler final : angle::NonCopyable { public: - Compiler(rx::ImplFactory *implFactory, const ContextState &data); + Compiler(rx::GLImplFactory *implFactory, const ContextState &data); ~Compiler(); Error release(); diff --git a/src/libANGLE/Framebuffer.cpp b/src/libANGLE/Framebuffer.cpp index f2adc4f55..7abdf9074 100644 --- a/src/libANGLE/Framebuffer.cpp +++ b/src/libANGLE/Framebuffer.cpp @@ -20,7 +20,7 @@ #include "libANGLE/formatutils.h" #include "libANGLE/renderer/ContextImpl.h" #include "libANGLE/renderer/FramebufferImpl.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/RenderbufferImpl.h" #include "libANGLE/renderer/SurfaceImpl.h" @@ -170,7 +170,7 @@ bool FramebufferState::attachmentsHaveSameDimensions() const return !hasMismatchedSize(mStencilAttachment); } -Framebuffer::Framebuffer(const Caps &caps, rx::ImplFactory *factory, GLuint id) +Framebuffer::Framebuffer(const Caps &caps, rx::GLImplFactory *factory, GLuint id) : mState(caps), mImpl(factory->createFramebuffer(mState)), mId(id) { ASSERT(mId != 0); diff --git a/src/libANGLE/Framebuffer.h b/src/libANGLE/Framebuffer.h index fca3cd0d0..aa4952832 100644 --- a/src/libANGLE/Framebuffer.h +++ b/src/libANGLE/Framebuffer.h @@ -22,7 +22,7 @@ namespace rx { class ContextImpl; -class ImplFactory; +class GLImplFactory; class FramebufferImpl; class RenderbufferImpl; class SurfaceImpl; @@ -89,7 +89,7 @@ class FramebufferState final : angle::NonCopyable class Framebuffer final : public LabeledObject { public: - Framebuffer(const Caps &caps, rx::ImplFactory *factory, GLuint id); + Framebuffer(const Caps &caps, rx::GLImplFactory *factory, GLuint id); Framebuffer(rx::SurfaceImpl *surface); virtual ~Framebuffer(); diff --git a/src/libANGLE/Image_unittest.cpp b/src/libANGLE/Image_unittest.cpp index dcdd26481..0978ac678 100644 --- a/src/libANGLE/Image_unittest.cpp +++ b/src/libANGLE/Image_unittest.cpp @@ -25,7 +25,7 @@ namespace angle // Verify ref counts are maintained between images and their siblings when objects are deleted TEST(ImageTest, RefCounting) { - NiceMock mockFactory; + NiceMock mockFactory; // Create a texture and an EGL image that uses the texture as its source rx::MockTextureImpl *textureImpl = new rx::MockTextureImpl(); EXPECT_CALL(mockFactory, createTexture(_)).WillOnce(Return(textureImpl)); @@ -86,7 +86,7 @@ TEST(ImageTest, RefCounting) // Verify that respecifiying textures releases references to the Image. TEST(ImageTest, RespecificationReleasesReferences) { - NiceMock mockFactory; + NiceMock mockFactory; // Create a texture and an EGL image that uses the texture as its source rx::MockTextureImpl *textureImpl = new rx::MockTextureImpl(); EXPECT_CALL(mockFactory, createTexture(_)).WillOnce(Return(textureImpl)); diff --git a/src/libANGLE/Program.cpp b/src/libANGLE/Program.cpp index ab7bd48b3..b064abb4d 100644 --- a/src/libANGLE/Program.cpp +++ b/src/libANGLE/Program.cpp @@ -336,7 +336,7 @@ GLuint ProgramState::getUniformIndex(const std::string &name) const return GL_INVALID_INDEX; } -Program::Program(rx::ImplFactory *factory, ResourceManager *manager, GLuint handle) +Program::Program(rx::GLImplFactory *factory, ResourceManager *manager, GLuint handle) : mProgram(factory->createProgram(mState)), mValidated(false), mLinked(false), diff --git a/src/libANGLE/Program.h b/src/libANGLE/Program.h index cb69fdd3b..0942c12ce 100644 --- a/src/libANGLE/Program.h +++ b/src/libANGLE/Program.h @@ -30,7 +30,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; class ProgramImpl; struct TranslatedAttribute; } @@ -211,7 +211,7 @@ class ProgramState final : angle::NonCopyable class Program final : angle::NonCopyable, public LabeledObject { public: - Program(rx::ImplFactory *factory, ResourceManager *manager, GLuint handle); + Program(rx::GLImplFactory *factory, ResourceManager *manager, GLuint handle); ~Program(); GLuint id() const { return mHandle; } diff --git a/src/libANGLE/ResourceManager.cpp b/src/libANGLE/ResourceManager.cpp index a0af9c644..58c204acc 100644 --- a/src/libANGLE/ResourceManager.cpp +++ b/src/libANGLE/ResourceManager.cpp @@ -20,9 +20,7 @@ namespace gl { -ResourceManager::ResourceManager(rx::ImplFactory *factory) - : mFactory(factory), - mRefCount(1) +ResourceManager::ResourceManager(rx::GLImplFactory *factory) : mFactory(factory), mRefCount(1) { } diff --git a/src/libANGLE/ResourceManager.h b/src/libANGLE/ResourceManager.h index 76e0bad3b..baac331e2 100644 --- a/src/libANGLE/ResourceManager.h +++ b/src/libANGLE/ResourceManager.h @@ -17,7 +17,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; } namespace gl @@ -34,7 +34,7 @@ class Texture; class ResourceManager : angle::NonCopyable { public: - explicit ResourceManager(rx::ImplFactory *factory); + explicit ResourceManager(rx::GLImplFactory *factory); ~ResourceManager(); void addRef(); @@ -76,7 +76,7 @@ class ResourceManager : angle::NonCopyable private: void createTextureInternal(GLuint handle); - rx::ImplFactory *mFactory; + rx::GLImplFactory *mFactory; std::size_t mRefCount; ResourceMap mBufferMap; diff --git a/src/libANGLE/ResourceManager_unittest.cpp b/src/libANGLE/ResourceManager_unittest.cpp index 86b987c4b..3369f1683 100644 --- a/src/libANGLE/ResourceManager_unittest.cpp +++ b/src/libANGLE/ResourceManager_unittest.cpp @@ -31,7 +31,7 @@ class ResourceManagerTest : public testing::Test SafeDelete(mResourceManager); } - MockFactory mMockFactory; + MockGLFactory mMockFactory; ResourceManager *mResourceManager; }; diff --git a/src/libANGLE/Sampler.cpp b/src/libANGLE/Sampler.cpp index d8d606a46..dc1d7c94a 100644 --- a/src/libANGLE/Sampler.cpp +++ b/src/libANGLE/Sampler.cpp @@ -9,13 +9,13 @@ #include "libANGLE/Sampler.h" #include "libANGLE/angletypes.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/SamplerImpl.h" namespace gl { -Sampler::Sampler(rx::ImplFactory *factory, GLuint id) +Sampler::Sampler(rx::GLImplFactory *factory, GLuint id) : RefCountObject(id), mImpl(factory->createSampler()), mLabel(), mSamplerState() { } diff --git a/src/libANGLE/Sampler.h b/src/libANGLE/Sampler.h index a40b1655f..f950bc04e 100644 --- a/src/libANGLE/Sampler.h +++ b/src/libANGLE/Sampler.h @@ -16,7 +16,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; class SamplerImpl; } @@ -26,7 +26,7 @@ namespace gl class Sampler final : public RefCountObject, public LabeledObject { public: - Sampler(rx::ImplFactory *factory, GLuint id); + Sampler(rx::GLImplFactory *factory, GLuint id); ~Sampler() override; void setLabel(const std::string &label) override; diff --git a/src/libANGLE/Shader.cpp b/src/libANGLE/Shader.cpp index 1d01ac359..b48100222 100644 --- a/src/libANGLE/Shader.cpp +++ b/src/libANGLE/Shader.cpp @@ -81,7 +81,7 @@ ShaderState::~ShaderState() } Shader::Shader(ResourceManager *manager, - rx::ImplFactory *implFactory, + rx::GLImplFactory *implFactory, const gl::Limitations &rendererLimitations, GLenum type, GLuint handle) diff --git a/src/libANGLE/Shader.h b/src/libANGLE/Shader.h index 36bef13ef..108edb87b 100644 --- a/src/libANGLE/Shader.h +++ b/src/libANGLE/Shader.h @@ -25,7 +25,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; class ShaderImpl; class ShaderSh; } @@ -81,7 +81,7 @@ class Shader final : angle::NonCopyable, public LabeledObject { public: Shader(ResourceManager *manager, - rx::ImplFactory *implFactory, + rx::GLImplFactory *implFactory, const gl::Limitations &rendererLimitations, GLenum type, GLuint handle); diff --git a/src/libANGLE/Texture.cpp b/src/libANGLE/Texture.cpp index 3822e83c6..ff69c5744 100644 --- a/src/libANGLE/Texture.cpp +++ b/src/libANGLE/Texture.cpp @@ -16,7 +16,7 @@ #include "libANGLE/Image.h" #include "libANGLE/Surface.h" #include "libANGLE/formatutils.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/TextureImpl.h" namespace gl @@ -49,7 +49,7 @@ static size_t GetImageDescIndex(GLenum target, size_t level) return IsCubeMapTextureTarget(target) ? ((level * 6) + CubeMapTextureTargetToLayerIndex(target)) : level; } -Texture::Texture(rx::ImplFactory *factory, GLuint id, GLenum target) +Texture::Texture(rx::GLImplFactory *factory, GLuint id, GLenum target) : egl::ImageSibling(id), mTexture(factory->createTexture(target)), mLabel(), diff --git a/src/libANGLE/Texture.h b/src/libANGLE/Texture.h index ebcd9a3d0..ed8ec0af8 100644 --- a/src/libANGLE/Texture.h +++ b/src/libANGLE/Texture.h @@ -31,7 +31,7 @@ class Stream; namespace rx { -class ImplFactory; +class GLImplFactory; class TextureImpl; } @@ -47,7 +47,7 @@ class Texture final : public egl::ImageSibling, public LabeledObject { public: - Texture(rx::ImplFactory *factory, GLuint id, GLenum target); + Texture(rx::GLImplFactory *factory, GLuint id, GLenum target); ~Texture() override; void setLabel(const std::string &label) override; diff --git a/src/libANGLE/TransformFeedback.cpp b/src/libANGLE/TransformFeedback.cpp index 04f278fba..223415474 100644 --- a/src/libANGLE/TransformFeedback.cpp +++ b/src/libANGLE/TransformFeedback.cpp @@ -10,13 +10,13 @@ #include "libANGLE/Caps.h" #include "libANGLE/ContextState.h" #include "libANGLE/Program.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/TransformFeedbackImpl.h" namespace gl { -TransformFeedback::TransformFeedback(rx::ImplFactory *implFactory, GLuint id, const Caps &caps) +TransformFeedback::TransformFeedback(rx::GLImplFactory *implFactory, GLuint id, const Caps &caps) : RefCountObject(id), mImplementation(implFactory->createTransformFeedback()), mLabel(), diff --git a/src/libANGLE/TransformFeedback.h b/src/libANGLE/TransformFeedback.h index 9e8af2e33..c120710a2 100644 --- a/src/libANGLE/TransformFeedback.h +++ b/src/libANGLE/TransformFeedback.h @@ -16,7 +16,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; class TransformFeedbackImpl; } @@ -29,7 +29,7 @@ class Program; class TransformFeedback final : public RefCountObject, public LabeledObject { public: - TransformFeedback(rx::ImplFactory *implFactory, GLuint id, const Caps &caps); + TransformFeedback(rx::GLImplFactory *implFactory, GLuint id, const Caps &caps); virtual ~TransformFeedback(); void setLabel(const std::string &label) override; diff --git a/src/libANGLE/TransformFeedback_unittest.cpp b/src/libANGLE/TransformFeedback_unittest.cpp index 43039009c..d173686ea 100644 --- a/src/libANGLE/TransformFeedback_unittest.cpp +++ b/src/libANGLE/TransformFeedback_unittest.cpp @@ -53,7 +53,7 @@ class TransformFeedbackTest : public testing::Test testing::Mock::VerifyAndClear(mImpl); } - rx::MockFactory mMockFactory; + rx::MockGLFactory mMockFactory; rx::MockTransformFeedbackImpl* mImpl; gl::TransformFeedback* mFeedback; gl::Caps mCaps; diff --git a/src/libANGLE/VertexArray.cpp b/src/libANGLE/VertexArray.cpp index 8f56f55bd..0b8fcb63d 100644 --- a/src/libANGLE/VertexArray.cpp +++ b/src/libANGLE/VertexArray.cpp @@ -8,7 +8,7 @@ #include "libANGLE/VertexArray.h" #include "libANGLE/Buffer.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "libANGLE/renderer/VertexArrayImpl.h" namespace gl @@ -28,7 +28,7 @@ VertexArrayState::~VertexArrayState() mElementArrayBuffer.set(nullptr); } -VertexArray::VertexArray(rx::ImplFactory *factory, GLuint id, size_t maxAttribs) +VertexArray::VertexArray(rx::GLImplFactory *factory, GLuint id, size_t maxAttribs) : mId(id), mState(maxAttribs), mVertexArray(factory->createVertexArray(mState)) { } diff --git a/src/libANGLE/VertexArray.h b/src/libANGLE/VertexArray.h index 5dbcf3fc5..da660e040 100644 --- a/src/libANGLE/VertexArray.h +++ b/src/libANGLE/VertexArray.h @@ -23,7 +23,7 @@ namespace rx { -class ImplFactory; +class GLImplFactory; class VertexArrayImpl; } @@ -59,7 +59,7 @@ class VertexArrayState final : public angle::NonCopyable class VertexArray final : public LabeledObject { public: - VertexArray(rx::ImplFactory *factory, GLuint id, size_t maxAttribs); + VertexArray(rx::GLImplFactory *factory, GLuint id, size_t maxAttribs); ~VertexArray(); GLuint id() const; diff --git a/src/libANGLE/renderer/DisplayImpl.h b/src/libANGLE/renderer/DisplayImpl.h index 18790345e..ddbeba26a 100644 --- a/src/libANGLE/renderer/DisplayImpl.h +++ b/src/libANGLE/renderer/DisplayImpl.h @@ -13,6 +13,7 @@ #include "libANGLE/Caps.h" #include "libANGLE/Config.h" #include "libANGLE/Error.h" +#include "libANGLE/renderer/EGLImplFactory.h" #include "libANGLE/renderer/Renderer.h" #include "libANGLE/Stream.h" @@ -41,7 +42,7 @@ struct ConfigDesc; class DeviceImpl; class StreamProducerImpl; -class DisplayImpl : angle::NonCopyable +class DisplayImpl : public EGLImplFactory { public: DisplayImpl(); @@ -50,30 +51,6 @@ class DisplayImpl : angle::NonCopyable virtual egl::Error initialize(egl::Display *display) = 0; virtual void terminate() = 0; - virtual SurfaceImpl *createWindowSurface(const egl::Config *configuration, - EGLNativeWindowType window, - const egl::AttributeMap &attribs) = 0; - virtual SurfaceImpl *createPbufferSurface(const egl::Config *configuration, - const egl::AttributeMap &attribs) = 0; - virtual SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, - EGLClientBuffer shareHandle, - const egl::AttributeMap &attribs) = 0; - virtual SurfaceImpl *createPixmapSurface(const egl::Config *configuration, - NativePixmapType nativePixmap, - const egl::AttributeMap &attribs) = 0; - - virtual ImageImpl *createImage(EGLenum target, - egl::ImageSibling *buffer, - const egl::AttributeMap &attribs) = 0; - - virtual gl::Context *createContext(const egl::Config *config, - const gl::Context *shareContext, - const egl::AttributeMap &attribs) = 0; - - virtual StreamProducerImpl *createStreamProducerD3DTextureNV12( - egl::Stream::ConsumerType consumerType, - const egl::AttributeMap &attribs) = 0; - virtual egl::Error makeCurrent(egl::Surface *drawSurface, egl::Surface *readSurface, gl::Context *context) = 0; virtual egl::ConfigSet generateConfigs() const = 0; diff --git a/src/libANGLE/renderer/EGLImplFactory.h b/src/libANGLE/renderer/EGLImplFactory.h new file mode 100644 index 000000000..bf73cddbb --- /dev/null +++ b/src/libANGLE/renderer/EGLImplFactory.h @@ -0,0 +1,65 @@ +// +// Copyright 2016 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. +// +// EGLImplFactory.h: +// Factory interface for EGL Impl objects. +// + +#ifndef LIBANGLE_RENDERER_EGLIMPLFACTORY_H_ +#define LIBANGLE_RENDERER_EGLIMPLFACTORY_H_ + +#include "libANGLE/Stream.h" + +namespace egl +{ +class AttributeMap; +struct Config; +class ImageSibling; +} + +namespace gl +{ +class Context; +} + +namespace rx +{ +class ImageImpl; +class SurfaceImpl; + +class EGLImplFactory : angle::NonCopyable +{ + public: + EGLImplFactory() {} + virtual ~EGLImplFactory() {} + + virtual SurfaceImpl *createWindowSurface(const egl::Config *configuration, + EGLNativeWindowType window, + const egl::AttributeMap &attribs) = 0; + virtual SurfaceImpl *createPbufferSurface(const egl::Config *configuration, + const egl::AttributeMap &attribs) = 0; + virtual SurfaceImpl *createPbufferFromClientBuffer(const egl::Config *configuration, + EGLClientBuffer shareHandle, + const egl::AttributeMap &attribs) = 0; + virtual SurfaceImpl *createPixmapSurface(const egl::Config *configuration, + NativePixmapType nativePixmap, + const egl::AttributeMap &attribs) = 0; + + virtual ImageImpl *createImage(EGLenum target, + egl::ImageSibling *buffer, + const egl::AttributeMap &attribs) = 0; + + virtual gl::Context *createContext(const egl::Config *config, + const gl::Context *shareContext, + const egl::AttributeMap &attribs) = 0; + + virtual StreamProducerImpl *createStreamProducerD3DTextureNV12( + egl::Stream::ConsumerType consumerType, + const egl::AttributeMap &attribs) = 0; +}; + +} // namespace rx + +#endif // LIBANGLE_RENDERER_EGLIMPLFACTORY_H_ diff --git a/src/libANGLE/renderer/ImplFactory.h b/src/libANGLE/renderer/GLImplFactory.h similarity index 85% rename from src/libANGLE/renderer/ImplFactory.h rename to src/libANGLE/renderer/GLImplFactory.h index 7eed5c0a6..6956deec9 100644 --- a/src/libANGLE/renderer/ImplFactory.h +++ b/src/libANGLE/renderer/GLImplFactory.h @@ -3,12 +3,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// ImplFactory.h: -// Factory interface for Impl objects. +// GLImplFactory.h: +// Factory interface for OpenGL ES Impl objects. // -#ifndef LIBANGLE_RENDERER_IMPLFACTORY_H_ -#define LIBANGLE_RENDERER_IMPLFACTORY_H_ +#ifndef LIBANGLE_RENDERER_GLIMPLFACTORY_H_ +#define LIBANGLE_RENDERER_GLIMPLFACTORY_H_ #include "libANGLE/Framebuffer.h" #include "libANGLE/Program.h" @@ -37,11 +37,11 @@ class TextureImpl; class TransformFeedbackImpl; class VertexArrayImpl; -class ImplFactory : angle::NonCopyable +class GLImplFactory : angle::NonCopyable { public: - ImplFactory() {} - virtual ~ImplFactory() {} + GLImplFactory() {} + virtual ~GLImplFactory() {} // Context creation virtual ContextImpl *createContext(const gl::ContextState &state) = 0; @@ -78,6 +78,6 @@ class ImplFactory : angle::NonCopyable virtual SamplerImpl *createSampler() = 0; }; -} +} // namespace rx -#endif // LIBANGLE_RENDERER_IMPLFACTORY_H_ +#endif // LIBANGLE_RENDERER_GLIMPLFACTORY_H_ diff --git a/src/libANGLE/renderer/Renderer.h b/src/libANGLE/renderer/Renderer.h index 49ec8f9db..5f16ffdb6 100644 --- a/src/libANGLE/renderer/Renderer.h +++ b/src/libANGLE/renderer/Renderer.h @@ -16,7 +16,7 @@ #include "libANGLE/State.h" #include "libANGLE/Uniform.h" #include "libANGLE/angletypes.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" #include "common/mathutil.h" #include @@ -37,7 +37,7 @@ struct SourceIndexData; struct WorkaroundsD3D; class DisplayImpl; -class Renderer : public ImplFactory +class Renderer : public GLImplFactory { public: Renderer(); diff --git a/src/libANGLE/validationES_unittest.cpp b/src/libANGLE/validationES_unittest.cpp index 44dadb93e..26ac00abd 100644 --- a/src/libANGLE/validationES_unittest.cpp +++ b/src/libANGLE/validationES_unittest.cpp @@ -69,7 +69,7 @@ TEST(ValidationESTest, DrawElementsWithMaxIndexGivesError) auto programImpl = MakeProgramMock(); // TODO(jmadill): Generalize some of this code so we can re-use it for other tests. - NiceMock mockFactory; + NiceMock mockFactory; EXPECT_CALL(mockFactory, createFramebuffer(_)).WillOnce(Return(framebufferImpl)); EXPECT_CALL(mockFactory, createProgram(_)).WillOnce(Return(programImpl)); EXPECT_CALL(mockFactory, createVertexArray(_)).WillOnce(Return(nullptr)); diff --git a/src/libGLESv2.gypi b/src/libGLESv2.gypi index e501c7367..f7afe8d3d 100644 --- a/src/libGLESv2.gypi +++ b/src/libGLESv2.gypi @@ -142,11 +142,12 @@ 'libANGLE/renderer/DeviceImpl.h', 'libANGLE/renderer/DisplayImpl.cpp', 'libANGLE/renderer/DisplayImpl.h', + 'libANGLE/renderer/EGLImplFactory.h', 'libANGLE/renderer/FenceNVImpl.h', 'libANGLE/renderer/FenceSyncImpl.h', 'libANGLE/renderer/FramebufferImpl.h', + 'libANGLE/renderer/GLImplFactory.h', 'libANGLE/renderer/ImageImpl.h', - 'libANGLE/renderer/ImplFactory.h', 'libANGLE/renderer/ProgramImpl.h', 'libANGLE/renderer/QueryImpl.h', 'libANGLE/renderer/RenderbufferImpl.h', diff --git a/src/tests/angle_unittests_utils.h b/src/tests/angle_unittests_utils.h index 95959318d..2a251c9f7 100644 --- a/src/tests/angle_unittests_utils.h +++ b/src/tests/angle_unittests_utils.h @@ -10,13 +10,14 @@ #define TESTS_ANGLE_UNITTESTS_UTILS_H_ #include "libANGLE/renderer/ContextImpl.h" -#include "libANGLE/renderer/ImplFactory.h" +#include "libANGLE/renderer/EGLImplFactory.h" +#include "libANGLE/renderer/GLImplFactory.h" namespace rx { -// Useful when mocking a part of the ImplFactory class -class NullFactory : public ImplFactory +// Useful when mocking a part of the GLImplFactory class +class NullFactory : public GLImplFactory { public: NullFactory() {} @@ -60,7 +61,7 @@ class NullFactory : public ImplFactory }; // A class with all the factory methods mocked. -class MockFactory : public ImplFactory +class MockGLFactory : public GLImplFactory { public: MOCK_METHOD1(createContext, ContextImpl *(const gl::ContextState &)); @@ -78,6 +79,29 @@ class MockFactory : public ImplFactory MOCK_METHOD0(createTransformFeedback, TransformFeedbackImpl *()); MOCK_METHOD0(createSampler, SamplerImpl *()); }; -} + +class MockEGLFactory : public EGLImplFactory +{ + public: + MOCK_METHOD3(createWindowSurface, + SurfaceImpl *(const egl::Config *, + EGLNativeWindowType, + const egl::AttributeMap &)); + MOCK_METHOD2(createPbufferSurface, + SurfaceImpl *(const egl::Config *, const egl::AttributeMap &)); + MOCK_METHOD3(createPbufferFromClientBuffer, + SurfaceImpl *(const egl::Config *, EGLClientBuffer, const egl::AttributeMap &)); + MOCK_METHOD3(createPixmapSurface, + SurfaceImpl *(const egl::Config *, NativePixmapType, const egl::AttributeMap &)); + MOCK_METHOD3(createImage, ImageImpl *(EGLenum, egl::ImageSibling *, const egl::AttributeMap &)); + MOCK_METHOD3(createContext, + gl::Context *(const egl::Config *, + const gl::Context *, + const egl::AttributeMap &)); + MOCK_METHOD2(createStreamProducerD3DTextureNV12, + StreamProducerImpl *(egl::Stream::ConsumerType, const egl::AttributeMap &)); +}; + +} // namespace rx #endif // TESTS_ANGLE_UNITTESTS_UTILS_H_