0

Remove default textures in (!bind_generates_resource) context groups.

Previously texture ids for default textures in Renderer
compositor and Browser compositor contexts are different,
so during a context switch we'd be restoring default
textures for all units which can be slow.

This change makes all default textures 'null' for context groups
with bind_generates_resource == false.

Since Renderer and Browser compositors will both have 'null' default
textures, state switching will be avoided.

BUG=333063, 353822

Review URL: https://codereview.chromium.org/224763002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262288 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
vmiura@chromium.org
2014-04-08 03:51:57 +00:00
parent c5530f9c8f
commit 5ebf59f795
11 changed files with 658 additions and 159 deletions

@@ -178,7 +178,8 @@ bool ContextGroup::Initialize(
texture_manager_.reset(new TextureManager(memory_tracker_.get(),
feature_info_.get(),
max_texture_size,
max_cube_map_texture_size));
max_cube_map_texture_size,
bind_generates_resource_));
texture_manager_->set_framebuffer_manager(framebuffer_manager_.get());
const GLint kMinTextureImageUnits = 8;

@@ -30,8 +30,9 @@ namespace gles2 {
class ContextGroupTest : public testing::Test {
public:
ContextGroupTest() {
}
static const bool kBindGeneratesResource = false;
ContextGroupTest() {}
protected:
virtual void SetUp() {
@@ -39,7 +40,7 @@ class ContextGroupTest : public testing::Test {
::gfx::MockGLInterface::SetGLInterface(gl_.get());
decoder_.reset(new MockGLES2Decoder());
group_ = scoped_refptr<ContextGroup>(
new ContextGroup(NULL, NULL, NULL, NULL, NULL, true));
new ContextGroup(NULL, NULL, NULL, NULL, NULL, kBindGeneratesResource));
}
virtual void TearDown() {
@@ -70,8 +71,8 @@ TEST_F(ContextGroupTest, Basic) {
}
TEST_F(ContextGroupTest, InitializeNoExtensions) {
TestHelper::SetupContextGroupInitExpectations(gl_.get(),
DisallowedFeatures(), "", "");
TestHelper::SetupContextGroupInitExpectations(
gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
group_->Initialize(decoder_.get(), DisallowedFeatures());
EXPECT_EQ(static_cast<uint32>(TestHelper::kNumVertexAttribs),
group_->max_vertex_attribs());
@@ -105,8 +106,8 @@ TEST_F(ContextGroupTest, InitializeNoExtensions) {
TEST_F(ContextGroupTest, MultipleContexts) {
scoped_ptr<MockGLES2Decoder> decoder2_(new MockGLES2Decoder());
TestHelper::SetupContextGroupInitExpectations(gl_.get(),
DisallowedFeatures(), "", "");
TestHelper::SetupContextGroupInitExpectations(
gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
group_->Initialize(decoder_.get(), DisallowedFeatures());
group_->Initialize(decoder2_.get(), DisallowedFeatures());

@@ -22,6 +22,7 @@ const GLint kMaxCubemapSize = 64;
const GLint kMaxRenderbufferSize = 64;
const GLint kMaxSamples = 4;
const bool kDepth24Supported = false;
const bool kUseDefaultTextures = false;
} // namespace
@@ -29,11 +30,15 @@ class FramebufferManagerTest : public testing::Test {
public:
FramebufferManagerTest()
: manager_(1, 1),
texture_manager_(
NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize),
renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
kDepth24Supported) {
}
texture_manager_(NULL,
new FeatureInfo(),
kMaxTextureSize,
kMaxCubemapSize,
kUseDefaultTextures),
renderbuffer_manager_(NULL,
kMaxRenderbufferSize,
kMaxSamples,
kDepth24Supported) {}
virtual ~FramebufferManagerTest() {
manager_.Destroy(false);
texture_manager_.Destroy(false);
@@ -112,8 +117,11 @@ class FramebufferInfoTest : public testing::Test {
feature_info_(new FeatureInfo()),
renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
kDepth24Supported) {
texture_manager_.reset(new TextureManager(NULL, feature_info_.get(),
kMaxTextureSize, kMaxCubemapSize));
texture_manager_.reset(new TextureManager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubemapSize,
kUseDefaultTextures));
}
virtual ~FramebufferInfoTest() {
manager_.Destroy(false);

@@ -2394,20 +2394,20 @@ bool GLES2DecoderImpl::Initialize(
ref = texture_manager()->GetDefaultTextureInfo(
GL_TEXTURE_EXTERNAL_OES);
state_.texture_units[tt].bound_texture_external_oes = ref;
glBindTexture(GL_TEXTURE_EXTERNAL_OES, ref->service_id());
glBindTexture(GL_TEXTURE_EXTERNAL_OES, ref ? ref->service_id() : 0);
}
if (features().arb_texture_rectangle) {
ref = texture_manager()->GetDefaultTextureInfo(
GL_TEXTURE_RECTANGLE_ARB);
state_.texture_units[tt].bound_texture_rectangle_arb = ref;
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ref->service_id());
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ref ? ref->service_id() : 0);
}
ref = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP);
state_.texture_units[tt].bound_texture_cube_map = ref;
glBindTexture(GL_TEXTURE_CUBE_MAP, ref->service_id());
glBindTexture(GL_TEXTURE_CUBE_MAP, ref ? ref->service_id() : 0);
ref = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D);
state_.texture_units[tt].bound_texture_2d = ref;
glBindTexture(GL_TEXTURE_2D, ref->service_id());
glBindTexture(GL_TEXTURE_2D, ref ? ref->service_id() : 0);
}
glActiveTexture(GL_TEXTURE0);
CHECK_GL_ERROR();
@@ -4041,21 +4041,25 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) {
} else {
texture_ref = texture_manager()->GetDefaultTextureInfo(target);
}
Texture* texture = texture_ref->texture();
// Check the texture exists
// Check that we are not trying to bind it to a different target.
if (texture->target() != 0 && texture->target() != target) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glBindTexture", "texture bound to more than 1 target.");
return;
if (texture_ref) {
Texture* texture = texture_ref->texture();
// Check that we are not trying to bind it to a different target.
if (texture->target() != 0 && texture->target() != target) {
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
"glBindTexture",
"texture bound to more than 1 target.");
return;
}
LogClientServiceForInfo(texture, client_id, "glBindTexture");
if (texture->target() == 0) {
texture_manager()->SetTarget(texture_ref, target);
}
glBindTexture(target, texture->service_id());
} else {
glBindTexture(target, 0);
}
LogClientServiceForInfo(texture, client_id, "glBindTexture");
if (texture->target() == 0) {
texture_manager()->SetTarget(texture_ref, target);
}
glBindTexture(target, texture->service_id());
TextureUnit& unit = state_.texture_units[state_.active_texture_unit];
unit.bind_target = target;

@@ -5660,6 +5660,244 @@ TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
TEST_F(GLES2DecoderManualInitTest, DefaultTextureZero) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
BindTexture cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_F(GLES2DecoderManualInitTest, DefaultTextureBGR) {
InitState init;
init.gl_version = "3.0";
init.bind_generates_resource = true;
InitDecoder(init);
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(
*gl_, BindTexture(GL_TEXTURE_2D, TestHelper::kServiceDefaultTexture2dId));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
BindTexture cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_,
BindTexture(GL_TEXTURE_CUBE_MAP,
TestHelper::kServiceDefaultTextureCubemapId));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
// Test that default texture 0 is immutable.
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexParameterf) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameterf cmd2;
cmd2.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameterf cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
}
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexParameteri) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameteri cmd2;
cmd2.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameteri cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
}
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexParameterfv) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameterfv cmd2;
cmd2.Init(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
shared_memory_id_,
shared_memory_offset_);
GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameterfv cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MAG_FILTER,
shared_memory_id_,
shared_memory_offset_);
GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
}
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameteriv cmd2;
cmd2.Init(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
shared_memory_id_,
shared_memory_offset_);
GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexParameteriv cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MAG_FILTER,
shared_memory_id_,
shared_memory_offset_);
GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
}
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexImage2D) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexImage2D cmd2;
cmd2.Init(GL_TEXTURE_2D,
0,
GL_RGBA,
2,
2,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
kSharedMemoryId,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
TEST_F(GLES2DecoderManualInitTest, NoDefaultTexSubImage2D) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
TexSubImage2D cmd2;
cmd2.Init(GL_TEXTURE_2D,
0,
1,
1,
1,
1,
GL_RGBA,
GL_UNSIGNED_BYTE,
kSharedMemoryId,
kSharedMemoryOffset,
GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
InitState init;
init.extensions = "GL_ARB_texture_rectangle";
@@ -8632,9 +8870,10 @@ TEST_F(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) {
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
TEST_F(GLES2DecoderRestoreStateTest, NullPreviousState) {
TEST_F(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) {
InitState init;
init.gl_version = "3.0";
init.bind_generates_resource = true;
InitDecoder(init);
SetupTexture();
@@ -8660,6 +8899,56 @@ TEST_F(GLES2DecoderRestoreStateTest, NullPreviousState) {
GetDecoder()->RestoreAllTextureUnitBindings(NULL);
}
TEST_F(GLES2DecoderRestoreStateTest, NullPreviousState) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
SetupTexture();
InSequence sequence;
// Expect to restore texture bindings for unit GL_TEXTURE0.
AddExpectationsForActiveTexture(GL_TEXTURE0);
AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0);
// Expect to restore texture bindings for remaining units.
for (uint32 i = 1; i < group().max_texture_units(); ++i) {
AddExpectationsForActiveTexture(GL_TEXTURE0 + i);
AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0);
}
// Expect to restore the active texture unit to GL_TEXTURE0.
AddExpectationsForActiveTexture(GL_TEXTURE0);
GetDecoder()->RestoreAllTextureUnitBindings(NULL);
}
TEST_F(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) {
InitState init;
init.gl_version = "3.0";
init.bind_generates_resource = true;
InitDecoder(init);
SetupTexture();
// Construct a previous ContextState with all texture bindings
// set to default textures.
ContextState prev_state(NULL, NULL, NULL);
InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
InSequence sequence;
// Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit,
// since the rest of the bindings haven't changed between the current
// state and the |prev_state|.
AddExpectationsForActiveTexture(GL_TEXTURE0);
AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
// Expect to restore active texture unit to GL_TEXTURE0.
AddExpectationsForActiveTexture(GL_TEXTURE0);
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderRestoreStateTest, WithPreviousState) {
InitState init;
init.gl_version = "3.0";
@@ -8715,9 +9004,10 @@ TEST_F(GLES2DecoderRestoreStateTest, ActiveUnit1) {
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit0) {
TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) {
InitState init;
init.gl_version = "3.0";
init.bind_generates_resource = true;
InitDecoder(init);
// Bind a non-default texture to GL_TEXTURE1 unit.
@@ -8753,9 +9043,10 @@ TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit0) {
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1) {
TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1BGR) {
InitState init;
init.gl_version = "3.0";
init.bind_generates_resource = true;
InitDecoder(init);
// Bind a non-default texture to GL_TEXTURE0 unit.
@@ -8785,6 +9076,74 @@ TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1) {
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderRestoreStateTest, DefaultUnit0) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
// Bind a non-default texture to GL_TEXTURE1 unit.
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
SpecializedSetup<ActiveTexture, 0>(true);
ActiveTexture cmd;
cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
SetupTexture();
// Construct a previous ContextState with GL_TEXTURE_2D target in
// GL_TEXTURE0 unit bound to a non-default texture and the rest
// set to default textures.
ContextState prev_state(NULL, NULL, NULL);
InitializeContextState(&prev_state, 0, kServiceTextureId);
InSequence sequence;
// Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to
// the 0 texture.
AddExpectationsForActiveTexture(GL_TEXTURE0);
AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
// Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to
// non-default.
AddExpectationsForActiveTexture(GL_TEXTURE1);
AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
// Expect to restore active texture unit to GL_TEXTURE1.
AddExpectationsForActiveTexture(GL_TEXTURE1);
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderRestoreStateTest, DefaultUnit1) {
InitState init;
init.gl_version = "3.0";
InitDecoder(init);
// Bind a non-default texture to GL_TEXTURE0 unit.
SetupTexture();
// Construct a previous ContextState with GL_TEXTURE_2D target in
// GL_TEXTURE1 unit bound to a non-default texture and the rest
// set to default textures.
ContextState prev_state(NULL, NULL, NULL);
InitializeContextState(&prev_state, 1, kServiceTextureId);
InSequence sequence;
// Expect to restore GL_TEXTURE_2D binding to the non-default texture
// for GL_TEXTURE0 unit.
AddExpectationsForActiveTexture(GL_TEXTURE0);
AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
// Expect to restore GL_TEXTURE_2D binding to the 0 texture
// for GL_TEXTURE1 unit.
AddExpectationsForActiveTexture(GL_TEXTURE1);
AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
// Expect to restore active texture unit to GL_TEXTURE0.
AddExpectationsForActiveTexture(GL_TEXTURE0);
GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
}
TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
CommandLine command_line(0, NULL);
command_line.AppendSwitchASCII(

@@ -116,6 +116,7 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
new ShaderTranslatorCache,
feature_info.get(),
init.bind_generates_resource));
bool use_default_textures = init.bind_generates_resource;
InSequence sequence;
@@ -135,7 +136,8 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
TestHelper::SetupContextGroupInitExpectations(gl_.get(),
DisallowedFeatures(),
init.extensions.c_str(),
init.gl_version.c_str());
init.gl_version.c_str(),
init.bind_generates_resource);
// We initialize the ContextGroup with a MockGLES2Decoder so that
// we can use the ContextGroup to figure out how the real GLES2Decoder
@@ -182,25 +184,36 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
.Times(1)
.RetiresOnSaturation();
if (group_->feature_info()->feature_flags().oes_egl_image_external) {
EXPECT_CALL(*gl_, BindTexture(
GL_TEXTURE_EXTERNAL_OES,
TestHelper::kServiceDefaultExternalTextureId))
EXPECT_CALL(*gl_,
BindTexture(GL_TEXTURE_EXTERNAL_OES,
use_default_textures
? TestHelper::kServiceDefaultExternalTextureId
: 0))
.Times(1)
.RetiresOnSaturation();
}
if (group_->feature_info()->feature_flags().arb_texture_rectangle) {
EXPECT_CALL(*gl_, BindTexture(
GL_TEXTURE_RECTANGLE_ARB,
TestHelper::kServiceDefaultRectangleTextureId))
EXPECT_CALL(
*gl_,
BindTexture(GL_TEXTURE_RECTANGLE_ARB,
use_default_textures
? TestHelper::kServiceDefaultRectangleTextureId
: 0))
.Times(1)
.RetiresOnSaturation();
}
EXPECT_CALL(*gl_, BindTexture(
GL_TEXTURE_CUBE_MAP, TestHelper::kServiceDefaultTextureCubemapId))
EXPECT_CALL(*gl_,
BindTexture(GL_TEXTURE_CUBE_MAP,
use_default_textures
? TestHelper::kServiceDefaultTextureCubemapId
: 0))
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, BindTexture(
GL_TEXTURE_2D, TestHelper::kServiceDefaultTexture2dId))
EXPECT_CALL(
*gl_,
BindTexture(
GL_TEXTURE_2D,
use_default_textures ? TestHelper::kServiceDefaultTexture2dId : 0))
.Times(1)
.RetiresOnSaturation();
}

@@ -61,7 +61,9 @@ const GLint TestHelper::kMaxVertexUniformComponents;
#endif
void TestHelper::SetupTextureInitializationExpectations(
::gfx::MockGLInterface* gl, GLenum target) {
::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures) {
InSequence sequence;
bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES);
@@ -98,7 +100,7 @@ void TestHelper::SetupTextureInitializationExpectations(
NOTREACHED();
}
int array_size = 2;
int array_size = use_default_textures ? 2 : 1;
EXPECT_CALL(*gl, GenTextures(array_size, _))
.WillOnce(SetArrayArgument<1>(texture_ids,
@@ -139,11 +141,14 @@ void TestHelper::SetupTextureInitializationExpectations(
void TestHelper::SetupTextureManagerInitExpectations(
::gfx::MockGLInterface* gl,
const char* extensions) {
const char* extensions,
bool use_default_textures) {
InSequence sequence;
SetupTextureInitializationExpectations(gl, GL_TEXTURE_2D);
SetupTextureInitializationExpectations(gl, GL_TEXTURE_CUBE_MAP);
SetupTextureInitializationExpectations(
gl, GL_TEXTURE_2D, use_default_textures);
SetupTextureInitializationExpectations(
gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -160,15 +165,22 @@ void TestHelper::SetupTextureManagerInitExpectations(
}
if (ext_image_external) {
SetupTextureInitializationExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
SetupTextureInitializationExpectations(
gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
SetupTextureInitializationExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
SetupTextureInitializationExpectations(
gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
}
void TestHelper::SetupTextureDestructionExpectations(
::gfx::MockGLInterface* gl, GLenum target) {
::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures) {
if (!use_default_textures)
return;
GLuint texture_id = 0;
switch (target) {
case GL_TEXTURE_2D:
@@ -194,9 +206,11 @@ void TestHelper::SetupTextureDestructionExpectations(
void TestHelper::SetupTextureManagerDestructionExpectations(
::gfx::MockGLInterface* gl,
const char* extensions) {
SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D);
SetupTextureDestructionExpectations(gl, GL_TEXTURE_CUBE_MAP);
const char* extensions,
bool use_default_textures) {
SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures);
SetupTextureDestructionExpectations(
gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -213,10 +227,12 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
if (ext_image_external) {
SetupTextureDestructionExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
SetupTextureDestructionExpectations(
gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
SetupTextureDestructionExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
SetupTextureDestructionExpectations(
gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
EXPECT_CALL(*gl, DeleteTextures(4, _))
@@ -225,10 +241,11 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
void TestHelper::SetupContextGroupInitExpectations(
::gfx::MockGLInterface* gl,
const DisallowedFeatures& disallowed_features,
const char* extensions,
const char* gl_version) {
::gfx::MockGLInterface* gl,
const DisallowedFeatures& disallowed_features,
const char* extensions,
const char* gl_version,
bool bind_generates_resource) {
InSequence sequence;
SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version);
@@ -277,7 +294,8 @@ void TestHelper::SetupContextGroupInitExpectations(
.WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents))
.RetiresOnSaturation();
SetupTextureManagerInitExpectations(gl, extensions);
bool use_default_textures = bind_generates_resource;
SetupTextureManagerInitExpectations(gl, extensions, use_default_textures);
}
void TestHelper::SetupFeatureInfoInitExpectations(

@@ -66,7 +66,8 @@ class TestHelper {
::gfx::MockGLInterface* gl,
const DisallowedFeatures& disallowed_features,
const char* extensions,
const char* gl_version);
const char* gl_version,
bool bind_generates_resource);
static void SetupFeatureInfoInitExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
static void SetupFeatureInfoInitExpectationsWithGLVersion(
@@ -74,10 +75,13 @@ class TestHelper {
const char* extensions,
const char* gl_renderer,
const char* gl_version);
static void SetupTextureManagerInitExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
static void SetupTextureManagerInitExpectations(::gfx::MockGLInterface* gl,
const char* extensions,
bool use_default_textures);
static void SetupTextureManagerDestructionExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
::gfx::MockGLInterface* gl,
const char* extensions,
bool use_default_textures);
static void SetupExpectationsForClearingUniforms(
::gfx::MockGLInterface* gl, UniformInfo* uniforms, size_t num_uniforms);
@@ -104,10 +108,12 @@ class TestHelper {
GLenum pname, GLint value, GLenum error);
private:
static void SetupTextureInitializationExpectations(
::gfx::MockGLInterface* gl, GLenum target);
static void SetupTextureDestructionExpectations(
::gfx::MockGLInterface* gl, GLenum target);
static void SetupTextureInitializationExpectations(::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures);
static void SetupTextureDestructionExpectations(::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures);
};
// This object temporaritly Sets what gfx::GetGLImplementation returns. During

@@ -895,9 +895,10 @@ TextureRef::~TextureRef() {
TextureManager::TextureManager(MemoryTracker* memory_tracker,
FeatureInfo* feature_info,
GLint max_texture_size,
GLint max_cube_map_texture_size)
: memory_tracker_managed_(new MemoryTypeTracker(memory_tracker,
MemoryTracker::kManaged)),
GLint max_cube_map_texture_size,
bool use_default_textures)
: memory_tracker_managed_(
new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)),
memory_tracker_unmanaged_(
new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
feature_info_(feature_info),
@@ -912,6 +913,7 @@ TextureManager::TextureManager(MemoryTracker* memory_tracker,
max_cube_map_texture_size,
max_cube_map_texture_size,
max_cube_map_texture_size)),
use_default_textures_(use_default_textures),
num_unrenderable_textures_(0),
num_unsafe_textures_(0),
num_uncleared_mips_(0),
@@ -959,8 +961,9 @@ scoped_refptr<TextureRef>
// Make default textures and texture for replacing non-renderable textures.
GLuint ids[2];
glGenTextures(arraysize(ids), ids);
for (unsigned long ii = 0; ii < arraysize(ids); ++ii) {
const unsigned long num_ids = use_default_textures_ ? 2 : 1;
glGenTextures(num_ids, ids);
for (unsigned long ii = 0; ii < num_ids; ++ii) {
glBindTexture(target, ids[ii]);
if (needs_initialization) {
if (needs_faces) {
@@ -976,48 +979,50 @@ scoped_refptr<TextureRef>
}
glBindTexture(target, 0);
scoped_refptr<TextureRef> default_texture(
TextureRef::Create(this, 0, ids[1]));
SetTarget(default_texture.get(), target);
if (needs_faces) {
for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) {
SetLevelInfo(default_texture.get(),
GLES2Util::IndexToGLFaceTarget(ii),
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
}
} else {
if (needs_initialization) {
SetLevelInfo(default_texture.get(),
GL_TEXTURE_2D,
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
scoped_refptr<TextureRef> default_texture;
if (use_default_textures_) {
default_texture = TextureRef::Create(this, 0, ids[1]);
SetTarget(default_texture.get(), target);
if (needs_faces) {
for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) {
SetLevelInfo(default_texture.get(),
GLES2Util::IndexToGLFaceTarget(ii),
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
}
} else {
SetLevelInfo(default_texture.get(),
GL_TEXTURE_EXTERNAL_OES,
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
if (needs_initialization) {
SetLevelInfo(default_texture.get(),
GL_TEXTURE_2D,
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
} else {
SetLevelInfo(default_texture.get(),
GL_TEXTURE_EXTERNAL_OES,
0,
GL_RGBA,
1,
1,
1,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
}
}
}

@@ -481,7 +481,8 @@ class GPU_EXPORT TextureManager {
TextureManager(MemoryTracker* memory_tracker,
FeatureInfo* feature_info,
GLsizei max_texture_size,
GLsizei max_cube_map_texture_size);
GLsizei max_cube_map_texture_size,
bool use_default_textures);
~TextureManager();
void set_framebuffer_manager(FramebufferManager* manager) {
@@ -774,6 +775,8 @@ class GPU_EXPORT TextureManager {
GLint max_levels_;
GLint max_cube_map_levels_;
const bool use_default_textures_;
int num_unrenderable_textures_;
int num_unsafe_textures_;
int num_uncleared_mips_;

@@ -47,10 +47,9 @@ class TextureManagerTest : public testing::Test {
static const GLint kMax2dLevels = 5;
static const GLint kMaxCubeMapLevels = 4;
static const GLint kMaxExternalLevels = 1;
static const bool kUseDefaultTextures = false;
TextureManagerTest()
: feature_info_(new FeatureInfo()) {
}
TextureManagerTest() : feature_info_(new FeatureInfo()) {}
virtual ~TextureManagerTest() {
}
@@ -60,10 +59,13 @@ class TextureManagerTest : public testing::Test {
gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
::gfx::MockGLInterface::SetGLInterface(gl_.get());
manager_.reset(new TextureManager(
NULL, feature_info_.get(),
kMaxTextureSize, kMaxCubeMapTextureSize));
TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
manager_.reset(new TextureManager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures));
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "", kUseDefaultTextures);
manager_->Initialize();
error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
}
@@ -162,11 +164,54 @@ TEST_F(TextureManagerTest, SetParameter) {
SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE);
}
TEST_F(TextureManagerTest, UseDefaultTexturesTrue) {
bool use_default_textures = true;
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "GL_ANGLE_texture_usage", use_default_textures);
TextureManager manager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
use_default_textures);
manager.Initialize();
EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL);
EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL);
// TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
manager.Destroy(false);
}
TEST_F(TextureManagerTest, UseDefaultTexturesFalse) {
bool use_default_textures = false;
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "GL_ANGLE_texture_usage", use_default_textures);
TextureManager manager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
use_default_textures);
manager.Initialize();
EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL);
EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL);
// TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
manager.Destroy(false);
}
TEST_F(TextureManagerTest, TextureUsageExt) {
TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
"GL_ANGLE_texture_usage");
TextureManager manager(
NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "GL_ANGLE_texture_usage", kUseDefaultTextures);
TextureManager manager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.Initialize();
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
@@ -186,9 +231,13 @@ TEST_F(TextureManagerTest, TextureUsageExt) {
TEST_F(TextureManagerTest, Destroy) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
TextureManager manager(
NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "", kUseDefaultTextures);
TextureManager manager(NULL,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.Initialize();
// Check we can create texture.
manager.CreateTexture(kClient1Id, kService1Id);
@@ -198,7 +247,8 @@ TEST_F(TextureManagerTest, Destroy) {
EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), "");
TestHelper::SetupTextureManagerDestructionExpectations(
gl_.get(), "", kUseDefaultTextures);
manager.Destroy(true);
// Check that resources got freed.
texture = manager.GetTexture(kClient1Id);
@@ -319,8 +369,11 @@ TEST_F(TextureManagerTest, ValidForTargetNPOT) {
gl_.get(), "GL_OES_texture_npot");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
// Check NPOT width on level 0
EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1));
// Check NPOT height on level 0
@@ -340,6 +393,7 @@ class TextureTestBase : public testing::Test {
static const GLint kMaxCubeMapLevels = 4;
static const GLuint kClient1Id = 1;
static const GLuint kService1Id = 11;
static const bool kUseDefaultTextures = false;
TextureTestBase()
: feature_info_(new FeatureInfo()) {
@@ -359,9 +413,11 @@ class TextureTestBase : public testing::Test {
feature_info_->Initialize();
}
manager_.reset(new TextureManager(
memory_tracker, feature_info_.get(),
kMaxTextureSize, kMaxCubeMapTextureSize));
manager_.reset(new TextureManager(memory_tracker,
feature_info_.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures));
decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>());
error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
manager_->CreateTexture(kClient1Id, kService1Id);
@@ -795,8 +851,11 @@ TEST_F(TextureTest, NPOT2DNPOTOK) {
gl_.get(), "GL_OES_texture_npot");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1083,8 +1142,11 @@ TEST_F(TextureTest, FloatNotLinear) {
gl_.get(), "GL_OES_texture_float");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1110,8 +1172,11 @@ TEST_F(TextureTest, FloatLinear) {
gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1129,8 +1194,11 @@ TEST_F(TextureTest, HalfFloatNotLinear) {
gl_.get(), "GL_OES_texture_half_float");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1156,8 +1224,11 @@ TEST_F(TextureTest, HalfFloatLinear) {
gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1175,8 +1246,11 @@ TEST_F(TextureTest, EGLImageExternal) {
gl_.get(), "GL_OES_EGL_image_external");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1192,8 +1266,11 @@ TEST_F(TextureTest, DepthTexture) {
gl_.get(), "GL_ANGLE_depth_texture");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
TextureManager manager(
NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
TextureManager manager(NULL,
feature_info.get(),
kMaxTextureSize,
kMaxCubeMapTextureSize,
kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -2126,9 +2203,9 @@ class CountingMemoryTracker : public MemoryTracker {
class SharedTextureTest : public testing::Test {
public:
SharedTextureTest()
: feature_info_(new FeatureInfo()) {
}
static const bool kUseDefaultTextures = false;
SharedTextureTest() : feature_info_(new FeatureInfo()) {}
virtual ~SharedTextureTest() {
}
@@ -2142,16 +2219,20 @@ class SharedTextureTest : public testing::Test {
new TextureManager(memory_tracker1_.get(),
feature_info_.get(),
TextureManagerTest::kMaxTextureSize,
TextureManagerTest::kMaxCubeMapTextureSize));
TextureManagerTest::kMaxCubeMapTextureSize,
kUseDefaultTextures));
memory_tracker2_ = new CountingMemoryTracker;
texture_manager2_.reset(
new TextureManager(memory_tracker2_.get(),
feature_info_.get(),
TextureManagerTest::kMaxTextureSize,
TextureManagerTest::kMaxCubeMapTextureSize));
TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
TextureManagerTest::kMaxCubeMapTextureSize,
kUseDefaultTextures));
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "", kUseDefaultTextures);
texture_manager1_->Initialize();
TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
TestHelper::SetupTextureManagerInitExpectations(
gl_.get(), "", kUseDefaultTextures);
texture_manager2_->Initialize();
}