Commit db8ae16b by Kenneth Russell

Refactored TransformFeedback for multi-platform ANGLE and added tests.

Added angle_implementation_unit_tests target designed for testing the cross-platform code in libGLESv2, and libGLESv2_static target as a dependency. The goal is to incorporate these tests into Chromium's angle_unittests target on all platforms; however, more work is needed to make libGLESv2's common code compile on non-Windows platforms, so this is an intermediate step. BUG=angle:719 Change-Id: Ifc44a779352294e857d6e913d9b997a60674c443 Reviewed-on: https://chromium-review.googlesource.com/214105Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarKenneth Russell <kbr@chromium.org>
parent 6d113802
......@@ -229,6 +229,10 @@
<Project>{7FBD6F69-B9A4-69F1-A12B-8DACB3F8CD81}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\src\libGLESv2_static.vcxproj">
<Project>{F8ABD31A-EC2F-A211-D514-076C763B69F9}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\src\libEGL.vcxproj">
<Project>{FBAEE4F6-562A-588F-01F9-72DCABB3B061}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
......
......@@ -10,6 +10,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "All", "All.vcxproj", "{D048
{3B7F5656-177F-52EE-26B3-D6A75368D0A9} = {3B7F5656-177F-52EE-26B3-D6A75368D0A9}
{22DC02D5-1598-943C-13E1-82185B469F81} = {22DC02D5-1598-943C-13E1-82185B469F81}
{7FBD6F69-B9A4-69F1-A12B-8DACB3F8CD81} = {7FBD6F69-B9A4-69F1-A12B-8DACB3F8CD81}
{F8ABD31A-EC2F-A211-D514-076C763B69F9} = {F8ABD31A-EC2F-A211-D514-076C763B69F9}
{FBAEE4F6-562A-588F-01F9-72DCABB3B061} = {FBAEE4F6-562A-588F-01F9-72DCABB3B061}
{293E74D1-544C-D368-02A0-52F61A4D0679} = {293E74D1-544C-D368-02A0-52F61A4D0679}
{B4D06330-EED1-6F99-BCA4-2F913908C38A} = {B4D06330-EED1-6F99-BCA4-2F913908C38A}
......@@ -85,6 +86,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGLESv2", "..\src\libGLES
{63FB0B97-D1D9-5158-8E85-7F5B1E403817} = {63FB0B97-D1D9-5158-8E85-7F5B1E403817}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGLESv2_static", "..\src\libGLESv2_static.vcxproj", "{F8ABD31A-EC2F-A211-D514-076C763B69F9}"
ProjectSection(ProjectDependencies) = postProject
{3B7F5656-177F-52EE-26B3-D6A75368D0A9} = {3B7F5656-177F-52EE-26B3-D6A75368D0A9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mip_map_2d", "..\samples\mip_map_2d.vcxproj", "{A6E86EB3-561F-9FAB-670F-EF23556344BE}"
ProjectSection(ProjectDependencies) = postProject
{297C46B0-9263-A9EA-82B1-EA221E7D7C7F} = {297C46B0-9263-A9EA-82B1-EA221E7D7C7F}
......@@ -403,6 +409,14 @@ Global
{E4DD691C-228B-A904-A008-10E26DC0F09E}.Release|x64.Build.0 = Release|x64
{E4DD691C-228B-A904-A008-10E26DC0F09E}.Release|Win32.ActiveCfg = Release|Win32
{E4DD691C-228B-A904-A008-10E26DC0F09E}.Release|Win32.Build.0 = Release|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|x64.ActiveCfg = Debug|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|x64.Build.0 = Debug|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|Win32.ActiveCfg = Debug|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|Win32.Build.0 = Debug|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|x64.ActiveCfg = Release|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|x64.Build.0 = Release|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|Win32.ActiveCfg = Release|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|Win32.Build.0 = Release|Win32
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|x64.ActiveCfg = Debug|x64
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|x64.Build.0 = Debug|x64
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|Win32.ActiveCfg = Debug|Win32
......
......@@ -25,6 +25,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGLESv2", "libGLESv2.vcxp
{63FB0B97-D1D9-5158-8E85-7F5B1E403817} = {63FB0B97-D1D9-5158-8E85-7F5B1E403817}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGLESv2_static", "libGLESv2_static.vcxproj", "{F8ABD31A-EC2F-A211-D514-076C763B69F9}"
ProjectSection(ProjectDependencies) = postProject
{3B7F5656-177F-52EE-26B3-D6A75368D0A9} = {3B7F5656-177F-52EE-26B3-D6A75368D0A9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "preprocessor", "preprocessor.vcxproj", "{C7BAF548-697D-2DCB-9DF3-9D1506A7B444}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "translator", "translator.vcxproj", "{C15697F6-5057-016E-BD29-422971875679}"
......@@ -105,6 +110,14 @@ Global
{C7BAF548-697D-2DCB-9DF3-9D1506A7B444}.Release|x64.Build.0 = Release|x64
{C7BAF548-697D-2DCB-9DF3-9D1506A7B444}.Release|Win32.ActiveCfg = Release|Win32
{C7BAF548-697D-2DCB-9DF3-9D1506A7B444}.Release|Win32.Build.0 = Release|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|x64.ActiveCfg = Debug|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|x64.Build.0 = Debug|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|Win32.ActiveCfg = Debug|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Debug|Win32.Build.0 = Debug|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|x64.ActiveCfg = Release|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|x64.Build.0 = Release|x64
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|Win32.ActiveCfg = Release|Win32
{F8ABD31A-EC2F-A211-D514-076C763B69F9}.Release|Win32.Build.0 = Release|Win32
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|x64.ActiveCfg = Debug|x64
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|x64.Build.0 = Debug|x64
{FBAEE4F6-562A-588F-01F9-72DCABB3B061}.Debug|Win32.ActiveCfg = Debug|Win32
......
......@@ -246,6 +246,7 @@
<ClInclude Include="..\..\src\libGLESv2\validationES.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\TextureImpl.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\Renderer.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\TransformFeedbackImpl.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\ShaderExecutable.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\loadimage.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\copyimage.h"/>
......@@ -268,6 +269,7 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\TextureD3D.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\TextureStorage.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\IndexDataManager.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\TransformFeedbackD3D.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\VertexBuffer.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\BufferD3D.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\VertexDataManager.h"/>
......@@ -437,6 +439,7 @@
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\MemoryBuffer.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\ImageD3D.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\TextureStorage.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\TransformFeedbackD3D.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\IndexDataManager.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Renderer11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\InputLayoutCache.cpp"/>
......
......@@ -279,6 +279,9 @@
<None Include="..\..\src\libGLESv2\renderer\loadimage.inl">
<Filter>src\libGLESv2\renderer</Filter>
</None>
<ClInclude Include="..\..\src\libGLESv2\renderer\TransformFeedbackImpl.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\ShaderExecutable.h">
<Filter>src\libGLESv2\renderer</Filter>
</ClInclude>
......@@ -396,9 +399,15 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\IndexDataManager.h">
<Filter>src\libGLESv2\renderer\d3d</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\TransformFeedbackD3D.h">
<Filter>src\libGLESv2\renderer\d3d</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\VertexBuffer.h">
<Filter>src\libGLESv2\renderer\d3d</Filter>
</ClInclude>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\TransformFeedbackD3D.cpp">
<Filter>src\libGLESv2\renderer\d3d</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\BufferD3D.h">
<Filter>src\libGLESv2\renderer\d3d</Filter>
</ClInclude>
......
......@@ -114,6 +114,7 @@
'libGLESv2/renderer/ShaderExecutable.h',
'libGLESv2/renderer/SwapChain.h',
'libGLESv2/renderer/TextureImpl.h',
'libGLESv2/renderer/TransformFeedbackImpl.h',
'libGLESv2/renderer/VertexArrayImpl.h',
'libGLESv2/renderer/copyimage.cpp',
'libGLESv2/renderer/copyimage.h',
......@@ -158,6 +159,8 @@
'libGLESv2/renderer/d3d/TextureD3D.h',
'libGLESv2/renderer/d3d/TextureStorage.cpp',
'libGLESv2/renderer/d3d/TextureStorage.h',
'libGLESv2/renderer/d3d/TransformFeedbackD3D.cpp',
'libGLESv2/renderer/d3d/TransformFeedbackD3D.h',
'libGLESv2/renderer/d3d/VertexBuffer.cpp',
'libGLESv2/renderer/d3d/VertexBuffer.h',
'libGLESv2/renderer/d3d/VertexDataManager.cpp',
......@@ -399,6 +402,33 @@
},
},
},
{
# This target supports angle_implementation_unittests.
# It only executes cross-platform code and therefore
# doesn't need any Direct3D DLLs.
'target_name': 'libGLESv2_static',
'type': 'static_library',
'dependencies': [ 'translator', 'commit_id' ],
'includes': [ '../build/common_defines.gypi', ],
'include_dirs':
[
'.',
'../include',
'libGLESv2',
],
'sources':
[
'<@(angle_libglesv2_sources)',
],
'defines':
[
'GL_APICALL=',
'GL_GLEXT_PROTOTYPES=',
'EGLAPI=',
# Workaround for D3D-specific code in Renderer.h
'ANGLE_COMPILE_OPTIMIZATION_LEVEL=0',
],
},
],
},
],
......
......@@ -101,7 +101,7 @@ Context::Context(int clientVersion, const gl::Context *shareContext, rx::Rendere
// In the initial state, a default transform feedback object is bound and treated as
// a transform feedback object with a name of zero. That object is bound any time
// BindTransformFeedback is called with id of zero
mTransformFeedbackZero.set(new TransformFeedback(0));
mTransformFeedbackZero.set(new TransformFeedback(mRenderer->createTransformFeedback(), 0));
bindTransformFeedback(0);
mHasBeenCurrent = false;
......@@ -262,7 +262,7 @@ GLuint Context::createSampler()
GLuint Context::createTransformFeedback()
{
GLuint handle = mTransformFeedbackAllocator.allocate();
TransformFeedback *transformFeedback = new TransformFeedback(handle);
TransformFeedback *transformFeedback = new TransformFeedback(mRenderer->createTransformFeedback(), handle);
transformFeedback->addRef();
mTransformFeedbackMap[handle] = transformFeedback;
return handle;
......
......@@ -5,20 +5,24 @@
//
#include "libGLESv2/TransformFeedback.h"
#include "libGLESv2/renderer/TransformFeedbackImpl.h"
namespace gl
{
TransformFeedback::TransformFeedback(GLuint id)
TransformFeedback::TransformFeedback(rx::TransformFeedbackImpl* impl, GLuint id)
: RefCountObject(id),
mTransformFeedback(impl),
mStarted(GL_FALSE),
mPrimitiveMode(GL_NONE),
mPaused(GL_FALSE)
{
ASSERT(impl != NULL);
}
TransformFeedback::~TransformFeedback()
{
SafeDelete(mTransformFeedback);
}
void TransformFeedback::start(GLenum primitiveMode)
......@@ -26,6 +30,7 @@ void TransformFeedback::start(GLenum primitiveMode)
mStarted = GL_TRUE;
mPrimitiveMode = primitiveMode;
mPaused = GL_FALSE;
mTransformFeedback->begin(primitiveMode);
}
void TransformFeedback::stop()
......@@ -33,6 +38,7 @@ void TransformFeedback::stop()
mStarted = GL_FALSE;
mPrimitiveMode = GL_NONE;
mPaused = GL_FALSE;
mTransformFeedback->end();
}
GLboolean TransformFeedback::isStarted() const
......@@ -48,11 +54,13 @@ GLenum TransformFeedback::getDrawMode() const
void TransformFeedback::pause()
{
mPaused = GL_TRUE;
mTransformFeedback->pause();
}
void TransformFeedback::resume()
{
mPaused = GL_FALSE;
mTransformFeedback->resume();
}
GLboolean TransformFeedback::isPaused() const
......
......@@ -12,13 +12,18 @@
#include "angle_gl.h"
namespace rx
{
class TransformFeedbackImpl;
}
namespace gl
{
class TransformFeedback : public RefCountObject
{
public:
explicit TransformFeedback(GLuint id);
TransformFeedback(rx::TransformFeedbackImpl* impl, GLuint id);
virtual ~TransformFeedback();
void start(GLenum primitiveMode);
......@@ -34,6 +39,8 @@ class TransformFeedback : public RefCountObject
private:
DISALLOW_COPY_AND_ASSIGN(TransformFeedback);
rx::TransformFeedbackImpl* mTransformFeedback;
GLboolean mStarted;
GLenum mPrimitiveMode;
GLboolean mPaused;
......
......@@ -60,6 +60,7 @@ class Image;
class TextureStorage;
class UniformStorage;
class TextureImpl;
class TransformFeedbackImpl;
struct ConfigDesc
{
......@@ -229,6 +230,9 @@ class Renderer
virtual QueryImpl *createQuery(GLenum type) = 0;
virtual FenceImpl *createFence() = 0;
// Transform Feedback creation
virtual TransformFeedbackImpl* createTransformFeedback() = 0;
// Current GLES client version
void setCurrentClientVersion(int clientVersion) { mCurrentClientVersion = clientVersion; }
int getCurrentClientVersion() const { return mCurrentClientVersion; }
......
//
// 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.
//
// TransformFeedbackImpl.h: Defines the abstract rx::TransformFeedbackImpl class.
#ifndef LIBGLESV2_RENDERER_TRANSFORMFEEDBACKIMPL_H_
#define LIBGLESV2_RENDERER_TRANSFORMFEEDBACKIMPL_H_
#include "common/angleutils.h"
#include "libGLESv2/TransformFeedback.h"
namespace rx
{
class TransformFeedbackImpl
{
public:
virtual ~TransformFeedbackImpl() { }
virtual void begin(GLenum primitiveMode) = 0;
virtual void end() = 0;
virtual void pause() = 0;
virtual void resume() = 0;
};
}
#endif // LIBGLESV2_RENDERER_TRANSFORMFEEDBACKIMPL_H_
#include "precompiled.h"
//
// 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.
//
// TransformFeedbackD3D.cpp is a no-op implementation for both the D3D9 and D3D11 renderers.
#include "libGLESv2/renderer/d3d/TransformFeedbackD3D.h"
namespace rx
{
TransformFeedbackD3D::TransformFeedbackD3D()
{
}
TransformFeedbackD3D::~TransformFeedbackD3D()
{
}
void TransformFeedbackD3D::begin(GLenum primitiveMode)
{
}
void TransformFeedbackD3D::end()
{
}
void TransformFeedbackD3D::pause()
{
}
void TransformFeedbackD3D::resume()
{
}
}
//
// 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.
//
// TransformFeedbackD3D.h: Implements the abstract rx::TransformFeedbackImpl class.
#ifndef LIBGLESV2_RENDERER_D3D_TRANSFORMFEEDBACKD3D_H_
#define LIBGLESV2_RENDERER_D3D_TRANSFORMFEEDBACKD3D_H_
#include "libGLESv2/renderer/TransformFeedbackImpl.h"
#include "libGLESv2/angletypes.h"
namespace rx
{
class TransformFeedbackD3D : public TransformFeedbackImpl
{
public:
TransformFeedbackD3D();
virtual ~TransformFeedbackD3D();
virtual void begin(GLenum primitiveMode);
virtual void end();
virtual void pause();
virtual void resume();
};
}
#endif // LIBGLESV2_RENDERER_D3D_TRANSFORMFEEDBACKD3D_H_
......@@ -14,6 +14,7 @@
#include "libGLESv2/ProgramBinary.h"
#include "libGLESv2/Framebuffer.h"
#include "libGLESv2/renderer/d3d/TextureD3D.h"
#include "libGLESv2/renderer/d3d/TransformFeedbackD3D.h"
#include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
#include "libGLESv2/renderer/d3d/d3d11/RenderTarget11.h"
#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
......@@ -2488,6 +2489,11 @@ FenceImpl *Renderer11::createFence()
return new Fence11(this);
}
TransformFeedbackImpl* Renderer11::createTransformFeedback()
{
return new TransformFeedbackD3D();
}
bool Renderer11::supportsFastCopyBufferToTexture(GLenum internalFormat) const
{
ASSERT(getRendererExtensions().pixelBufferObject);
......
......@@ -178,6 +178,9 @@ class Renderer11 : public Renderer
virtual QueryImpl *createQuery(GLenum type);
virtual FenceImpl *createFence();
// Transform Feedback creation
virtual TransformFeedbackImpl* createTransformFeedback();
// D3D11-renderer specific methods
ID3D11Device *getDevice() { return mDevice; }
ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
......
......@@ -18,6 +18,7 @@
#include "libGLESv2/ProgramBinary.h"
#include "libGLESv2/renderer/d3d/IndexDataManager.h"
#include "libGLESv2/renderer/d3d/TextureD3D.h"
#include "libGLESv2/renderer/d3d/TransformFeedbackD3D.h"
#include "libGLESv2/renderer/d3d/d3d9/Renderer9.h"
#include "libGLESv2/renderer/d3d/d3d9/renderer9_utils.h"
#include "libGLESv2/renderer/d3d/d3d9/formatutils9.h"
......@@ -600,6 +601,11 @@ FenceImpl *Renderer9::createFence()
return new Fence9(this);
}
TransformFeedbackImpl* Renderer9::createTransformFeedback()
{
return new TransformFeedbackD3D();
}
bool Renderer9::supportsFastCopyBufferToTexture(GLenum internalFormat) const
{
// Pixel buffer objects are not supported in D3D9, since D3D9 is ES2-only and PBOs are ES3.
......
......@@ -180,6 +180,9 @@ class Renderer9 : public Renderer
virtual QueryImpl *createQuery(GLenum type);
virtual FenceImpl *createFence();
// Transform Feedback creation
virtual TransformFeedbackImpl* createTransformFeedback();
// Buffer-to-texture and Texture-to-buffer copies
virtual bool supportsFastCopyBufferToTexture(GLenum internalFormat) const;
virtual bool fastCopyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTarget *destRenderTarget,
......
//
// Copyright (c) 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.
//
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "libGLESv2/TransformFeedback.h"
#include "libGLESv2/renderer/TransformFeedbackImpl.h"
namespace {
class MockTransformFeedbackImpl : public rx::TransformFeedbackImpl
{
public:
virtual ~MockTransformFeedbackImpl() { destroy(); }
MOCK_METHOD1(begin, void(GLenum primitiveMode));
MOCK_METHOD0(end, void());
MOCK_METHOD0(pause, void());
MOCK_METHOD0(resume, void());
MOCK_METHOD0(destroy, void());
};
class TransformFeedbackTest : public testing::Test
{
protected:
virtual void SetUp()
{
mImpl = new MockTransformFeedbackImpl;
EXPECT_CALL(*mImpl, destroy());
mFeedback = new gl::TransformFeedback(mImpl, 1);
mFeedback->addRef();
}
virtual void TearDown()
{
mFeedback->release();
}
MockTransformFeedbackImpl* mImpl;
gl::TransformFeedback* mFeedback;
};
TEST_F(TransformFeedbackTest, DestructionDeletesImpl)
{
MockTransformFeedbackImpl* impl = new MockTransformFeedbackImpl;
EXPECT_CALL(*impl, destroy()).Times(1).RetiresOnSaturation();
gl::TransformFeedback* feedback = new gl::TransformFeedback(impl, 1);
feedback->addRef();
feedback->release();
// Only needed because the mock is leaked if bugs are present,
// which logs an error, but does not cause the test to fail.
// Ordinarily mocks are verified when destroyed.
testing::Mock::VerifyAndClear(impl);
}
TEST_F(TransformFeedbackTest, SideEffectsOfStartAndStop)
{
testing::InSequence seq;
EXPECT_EQ(GL_FALSE, mFeedback->isStarted());
EXPECT_CALL(*mImpl, begin(GL_TRIANGLES));
mFeedback->start(GL_TRIANGLES);
EXPECT_EQ(GL_TRUE, mFeedback->isStarted());
EXPECT_EQ(GL_TRIANGLES, mFeedback->getDrawMode());
EXPECT_CALL(*mImpl, end());
mFeedback->stop();
EXPECT_EQ(GL_FALSE, mFeedback->isStarted());
}
TEST_F(TransformFeedbackTest, SideEffectsOfPauseAndResume)
{
testing::InSequence seq;
EXPECT_FALSE(mFeedback->isStarted());
EXPECT_CALL(*mImpl, begin(GL_TRIANGLES));
mFeedback->start(GL_TRIANGLES);
EXPECT_EQ(GL_FALSE, mFeedback->isPaused());
EXPECT_CALL(*mImpl, pause());
mFeedback->pause();
EXPECT_EQ(GL_TRUE, mFeedback->isPaused());
EXPECT_CALL(*mImpl, resume());
mFeedback->resume();
EXPECT_EQ(GL_FALSE, mFeedback->isPaused());
EXPECT_CALL(*mImpl, end());
mFeedback->stop();
}
} // namespace
# Copyright (c) 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.
{
'sources':
[
'<!@(python <(angle_path)/enumerate_files.py \
-dirs <(angle_path)/tests/angle_implementation_unit_tests \
-types *.cpp *.h \
-excludes <(angle_path)/tests/angle_implementation_unit_tests/angle_implementation_unit_tests_main.cpp)'
],
}
//
// Copyright (c) 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.
//
#include "gmock/gmock.h"
#include "gtest/gtest.h"
int main(int argc, char** argv)
{
testing::InitGoogleMock(&argc, argv);
int rt = RUN_ALL_TESTS();
return rt;
}
......@@ -113,6 +113,33 @@
'compiler_tests/compiler_test_main.cpp',
],
},
{
'target_name': 'angle_implementation_unit_tests',
'type': 'executable',
'dependencies':
[
'../src/angle.gyp:libGLESv2_static',
'gtest',
'gmock',
],
'include_dirs':
[
'../include',
'../src',
'third_party/googletest/include',
'third_party/googlemock/include',
],
'includes':
[
'../build/common_defines.gypi',
'angle_implementation_unit_tests/angle_implementation_unit_tests.gypi',
],
'sources':
[
'angle_implementation_unit_tests/angle_implementation_unit_tests_main.cpp',
],
},
],
'conditions':
......
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