summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service')
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.cc34
-rw-r--r--gpu/command_buffer/service/framebuffer_manager.h7
-rw-r--r--gpu/command_buffer/service/framebuffer_manager_unittest.cc30
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc216
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc477
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc16
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h6
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h6
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc97
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h25
-rw-r--r--gpu/command_buffer/service/texture_manager.h17
11 files changed, 119 insertions, 812 deletions
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc
index 316bc32..190a910 100644
--- a/gpu/command_buffer/service/framebuffer_manager.cc
+++ b/gpu/command_buffer/service/framebuffer_manager.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -43,10 +43,6 @@ class RenderbufferAttachment
render_buffer_->set_cleared();
}
- virtual bool IsTexture(TextureManager::TextureInfo* /* texture */) const {
- return false;
- }
-
RenderbufferManager::RenderbufferInfo* render_buffer() const {
return render_buffer_.get();
}
@@ -103,10 +99,6 @@ class TextureAttachment
NOTREACHED();
}
- virtual bool IsTexture(TextureManager::TextureInfo* texture) const {
- return texture == texture_.get();
- }
-
TextureManager::TextureInfo* texture() const {
return texture_.get();
}
@@ -177,25 +169,6 @@ void FramebufferManager::FramebufferInfo::MarkAttachedRenderbuffersAsCleared() {
}
}
-bool FramebufferManager::FramebufferInfo::HasDepthAttachment() const {
- return attachments_.find(GL_DEPTH_STENCIL_ATTACHMENT) != attachments_.end() ||
- attachments_.find(GL_DEPTH_ATTACHMENT) != attachments_.end();
-}
-
-bool FramebufferManager::FramebufferInfo::HasStencilAttachment() const {
- return attachments_.find(GL_DEPTH_STENCIL_ATTACHMENT) != attachments_.end() ||
- attachments_.find(GL_STENCIL_ATTACHMENT) != attachments_.end();
-}
-
-GLenum FramebufferManager::FramebufferInfo::GetColorAttachmentFormat() const {
- AttachmentMap::const_iterator it = attachments_.find(GL_COLOR_ATTACHMENT0);
- if (it == attachments_.end()) {
- return 0;
- }
- const Attachment* attachment = it->second;
- return attachment->internal_format();
-}
-
bool FramebufferManager::FramebufferInfo::IsNotComplete() const {
for (AttachmentMap::const_iterator it = attachments_.begin();
it != attachments_.end(); ++it) {
@@ -242,14 +215,9 @@ void FramebufferManager::FramebufferInfo::AttachTexture(
attachment == GL_DEPTH_ATTACHMENT ||
attachment == GL_STENCIL_ATTACHMENT ||
attachment == GL_DEPTH_STENCIL_ATTACHMENT);
- const Attachment* a = GetAttachment(attachment);
- if (a && a->IsTexture(texture)) {
- texture->DetachFromFramebuffer();
- }
if (texture) {
attachments_[attachment] = Attachment::Ref(
new TextureAttachment(texture, target, level));
- texture->AttachToFramebuffer();
} else {
attachments_.erase(attachment);
}
diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h
index 0641c35..362e0b8 100644
--- a/gpu/command_buffer/service/framebuffer_manager.h
+++ b/gpu/command_buffer/service/framebuffer_manager.h
@@ -36,7 +36,6 @@ class FramebufferManager {
virtual GLsizei samples() const = 0;
virtual bool cleared() const = 0;
virtual void set_cleared() = 0;
- virtual bool IsTexture(TextureManager::TextureInfo* texture) const = 0;
};
explicit FramebufferInfo(GLuint service_id);
@@ -73,12 +72,8 @@ class FramebufferManager {
return has_been_bound_ && !IsDeleted();
}
- bool HasDepthAttachment() const;
- bool HasStencilAttachment() const;
- GLenum GetColorAttachmentFormat() const;
-
// We can't know if the frame buffer is complete since that is
- // implementation dependent and we'd have to check after every glTexImage
+ // implementation dependent and we'd have to check after every glTexImage
// call but we can know in certain cases that it's NOT complete which we
// need to enforce the OpenGL ES 2.0 spec on top of DesktopGL.
bool IsNotComplete() const;
diff --git a/gpu/command_buffer/service/framebuffer_manager_unittest.cc b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
index 77c6622..d3c3879 100644
--- a/gpu/command_buffer/service/framebuffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -122,9 +122,6 @@ TEST_F(FramebufferInfoTest, Basic) {
EXPECT_TRUE(NULL == info_->GetAttachment(GL_DEPTH_ATTACHMENT));
EXPECT_TRUE(NULL == info_->GetAttachment(GL_STENCIL_ATTACHMENT));
EXPECT_TRUE(NULL == info_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
- EXPECT_FALSE(info_->HasDepthAttachment());
- EXPECT_FALSE(info_->HasStencilAttachment());
- EXPECT_EQ(static_cast<GLenum>(0), info_->GetColorAttachmentFormat());
}
TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
@@ -164,23 +161,12 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
EXPECT_TRUE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
EXPECT_FALSE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
EXPECT_TRUE(info_->IsNotComplete());
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), info_->GetColorAttachmentFormat());
- EXPECT_FALSE(info_->HasDepthAttachment());
- EXPECT_FALSE(info_->HasStencilAttachment());
-
- rb_info1->SetInfo(1, GL_RGB, 0, 0);
- EXPECT_EQ(static_cast<GLenum>(GL_RGB), info_->GetColorAttachmentFormat());
- EXPECT_FALSE(info_->HasDepthAttachment());
- EXPECT_FALSE(info_->HasStencilAttachment());
// check adding another
info_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, rb_info1);
EXPECT_TRUE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
EXPECT_TRUE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
EXPECT_TRUE(info_->IsNotComplete());
- EXPECT_EQ(static_cast<GLenum>(GL_RGB), info_->GetColorAttachmentFormat());
- EXPECT_TRUE(info_->HasDepthAttachment());
- EXPECT_FALSE(info_->HasStencilAttachment());
// check marking them as cleared.
info_->MarkAttachedRenderbuffersAsCleared();
@@ -191,16 +177,10 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
// Check adding one that is already cleared.
info_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, rb_info1);
EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
- EXPECT_EQ(static_cast<GLenum>(GL_RGB), info_->GetColorAttachmentFormat());
- EXPECT_TRUE(info_->HasDepthAttachment());
- EXPECT_TRUE(info_->HasStencilAttachment());
// Check marking the renderbuffer as unclared.
rb_info1->SetInfo(kSamples1, kFormat1, kWidth1, kHeight1);
EXPECT_FALSE(info_->IsNotComplete());
- EXPECT_EQ(static_cast<GLenum>(kFormat1), info_->GetColorAttachmentFormat());
- EXPECT_TRUE(info_->HasDepthAttachment());
- EXPECT_TRUE(info_->HasStencilAttachment());
const FramebufferManager::FramebufferInfo::Attachment* attachment =
info_->GetAttachment(GL_COLOR_ATTACHMENT0);
@@ -250,9 +230,6 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
// Check removing it.
info_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL);
EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
- EXPECT_EQ(static_cast<GLenum>(kFormat1), info_->GetColorAttachmentFormat());
- EXPECT_TRUE(info_->HasDepthAttachment());
- EXPECT_FALSE(info_->HasStencilAttachment());
rb_manager.Destroy(false);
}
@@ -301,14 +278,12 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
info_->AttachTexture(GL_COLOR_ATTACHMENT0, tex_info1, kTarget1, kLevel1);
EXPECT_FALSE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
EXPECT_TRUE(info_->IsNotComplete());
- EXPECT_EQ(static_cast<GLenum>(0), info_->GetColorAttachmentFormat());
tex_manager.SetInfoTarget(tex_info1, GL_TEXTURE_2D);
tex_manager.SetLevelInfo(
&feature_info, tex_info1, GL_TEXTURE_2D, kLevel1,
kFormat1, kWidth1, kHeight1, kDepth, kBorder, kFormat1, kType);
EXPECT_FALSE(info_->IsNotComplete());
- EXPECT_EQ(static_cast<GLenum>(kFormat1), info_->GetColorAttachmentFormat());
const FramebufferManager::FramebufferInfo::Attachment* attachment =
info_->GetAttachment(GL_COLOR_ATTACHMENT0);
@@ -331,7 +306,6 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
kFormat2, kWidth2, kHeight2, kDepth, kBorder, kFormat2, kType);
info_->AttachTexture(GL_COLOR_ATTACHMENT0, tex_info2, kTarget2, kLevel2);
- EXPECT_EQ(static_cast<GLenum>(kFormat2), info_->GetColorAttachmentFormat());
attachment = info_->GetAttachment(GL_COLOR_ATTACHMENT0);
ASSERT_TRUE(attachment != NULL);
@@ -352,12 +326,10 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_EQ(kSamples3, attachment->samples());
EXPECT_EQ(kFormat3, attachment->internal_format());
EXPECT_TRUE(attachment->cleared());
- EXPECT_EQ(static_cast<GLenum>(kFormat3), info_->GetColorAttachmentFormat());
// Check removing it.
info_->AttachTexture(GL_COLOR_ATTACHMENT0, NULL, 0, 0);
EXPECT_TRUE(info_->GetAttachment(GL_COLOR_ATTACHMENT0) == NULL);
- EXPECT_EQ(static_cast<GLenum>(0), info_->GetColorAttachmentFormat());
tex_manager.Destroy(false);
}
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index e23c05b..3e0e02a 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -126,7 +126,7 @@ static bool IsAngle() {
#endif
}
-static void WrappedTexImage2D(
+void WrappedTexImage2D(
GLenum target,
GLint level,
GLenum internal_format,
@@ -735,15 +735,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
void RestoreCurrentRenderbufferBindings();
void RestoreCurrentTexture2DBindings();
- // Sets DEPTH_TEST, STENCIL_TEST and color mask for the current framebuffer.
- void ApplyDirtyState();
-
- // These check the state of the currently bound framebuffer or the
- // backbuffer if no framebuffer is bound.
- bool BoundFramebufferHasColorAttachmentWithAlpha();
- bool BoundFramebufferHasDepthAttachment();
- bool BoundFramebufferHasStencilAttachment();
-
private:
friend class ScopedGLErrorSuppressor;
friend class ScopedResolvedFrameBufferBinder;
@@ -833,7 +824,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
// Get the format of the currently bound frame buffer (either FBO or regular
// back buffer)
GLenum GetBoundReadFrameBufferInternalFormat();
- GLenum GetBoundDrawFrameBufferInternalFormat();
// Wrapper for CompressedTexImage2D commands.
error::Error DoCompressedTexImage2D(
@@ -1269,8 +1259,8 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
// Wrapper for glValidateProgram.
void DoValidateProgram(GLuint program_client_id);
- void DoCopyTextureToParentTextureCHROMIUM(
- GLuint client_texture_id, GLuint parent_client_texture_id);
+ void DoCopyTextureToParentTextureCHROMIUM(GLuint client_texture_id,
+ GLuint parent_client_texture_id);
void DoResizeCHROMIUM(GLuint width, GLuint height);
@@ -1472,7 +1462,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
GLclampf clear_depth_;
GLboolean mask_depth_;
bool enable_scissor_test_;
- bool state_dirty_;
// The program in use by glUseProgram
ProgramManager::ProgramInfo::Ref current_program_;
@@ -1512,8 +1501,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>,
// The format of the back buffer_
GLenum back_buffer_color_format_;
- bool back_buffer_has_depth_;
- bool back_buffer_has_stencil_;
bool teximage2d_faster_than_texsubimage2d_;
bool bufferdata_faster_than_buffersubdata_;
@@ -1857,7 +1844,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(SurfaceManager* surface_manager,
clear_depth_(1.0f),
mask_depth_(true),
enable_scissor_test_(false),
- state_dirty_(true),
offscreen_target_color_format_(0),
offscreen_target_depth_format_(0),
offscreen_target_stencil_format_(0),
@@ -1865,8 +1851,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(SurfaceManager* surface_manager,
copy_texture_to_parent_texture_fb_(0),
offscreen_saved_color_format_(0),
back_buffer_color_format_(0),
- back_buffer_has_depth_(false),
- back_buffer_has_stencil_(false),
teximage2d_faster_than_texsubimage2d_(true),
bufferdata_faster_than_buffersubdata_(true),
current_decoder_error_(error::kNoError),
@@ -1946,6 +1930,10 @@ bool GLES2DecoderImpl::Initialize(
vertex_attrib_manager_.Initialize(group_->max_vertex_attribs());
+ GLint v = 0;
+ glGetIntegerv(GL_ALPHA_BITS, &v);
+ back_buffer_color_format_ = v ? GL_RGBA : GL_RGB;
+
if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
// We have to enable vertex array 0 on OpenGL or it won't render. Note that
// OpenGL ES 2.0 does not have this issue.
@@ -1973,30 +1961,11 @@ bool GLES2DecoderImpl::Initialize(
glActiveTexture(GL_TEXTURE0);
CHECK_GL_ERROR();
- ContextCreationAttribParser attrib_parser;
- if (!attrib_parser.Parse(attribs))
- return false;
-
- // These are NOT if the back buffer has these proprorties. They are
- // if we want the command buffer to enforce them regardless of what
- // the real backbuffer is assuming the real back buffer gives us more than
- // we ask for. In other words, if we ask for RGB and we get RGBA then we'll
- // make it appear RGB. If on the other hand we ask for RGBA nd get RGB we
- // can't do anything about that.
-
- GLint v = 0;
- glGetIntegerv(GL_ALPHA_BITS, &v);
- // This checks if the user requested RGBA and we have RGBA then RGBA. If the
- // user requested RGB then RGB. If the user did not specify a preference than
- // use whatever we were given. Same for DEPTH and STENCIL.
- back_buffer_color_format_ =
- (attrib_parser.alpha_size_ != 0 && v > 0) ? GL_RGBA : GL_RGB;
- glGetIntegerv(GL_DEPTH_BITS, &v);
- back_buffer_has_depth_ = attrib_parser.depth_size_ != 0 && v > 0;
- glGetIntegerv(GL_STENCIL_BITS, &v);
- back_buffer_has_stencil_ = attrib_parser.stencil_size_ != 0 && v > 0;
-
if (surface_->IsOffscreen()) {
+ ContextCreationAttribParser attrib_parser;
+ if (!attrib_parser.Parse(attribs))
+ return false;
+
if (attrib_parser.samples_ > 0 && attrib_parser.sample_buffers_ > 0 &&
(context_->HasExtension("GL_EXT_framebuffer_multisample") ||
context_->HasExtension("GL_ANGLE_framebuffer_multisample"))) {
@@ -2265,10 +2234,6 @@ void GLES2DecoderImpl::DeleteFramebuffersHelper(
FramebufferManager::FramebufferInfo* info =
GetFramebufferInfo(client_ids[ii]);
if (info) {
- if (info == bound_draw_framebuffer_) {
- bound_draw_framebuffer_ = NULL;
- state_dirty_ = true;
- }
GLuint service_id = info->service_id();
glDeleteFramebuffersEXT(1, &service_id);
RemoveFramebufferInfo(client_ids[ii]);
@@ -2282,7 +2247,6 @@ void GLES2DecoderImpl::DeleteRenderbuffersHelper(
RenderbufferManager::RenderbufferInfo* info =
GetRenderbufferInfo(client_ids[ii]);
if (info) {
- state_dirty_ = true;
GLuint service_id = info->service_id();
glDeleteRenderbuffersEXT(1, &service_id);
RemoveRenderbufferInfo(client_ids[ii]);
@@ -2295,9 +2259,6 @@ void GLES2DecoderImpl::DeleteTexturesHelper(
for (GLsizei ii = 0; ii < n; ++ii) {
TextureManager::TextureInfo* info = GetTextureInfo(client_ids[ii]);
if (info) {
- if (info->IsAttachedToFramebuffer()) {
- state_dirty_ = true;
- }
GLuint service_id = info->service_id();
glDeleteTextures(1, &service_id);
RemoveTextureInfo(client_ids[ii]);
@@ -2322,17 +2283,13 @@ static void RebindCurrentFramebuffer(
FramebufferManager::FramebufferInfo* info,
FrameBuffer* offscreen_frame_buffer) {
GLuint framebuffer_id = info ? info->service_id() : 0;
-
if (framebuffer_id == 0 && offscreen_frame_buffer) {
framebuffer_id = offscreen_frame_buffer->id();
}
-
glBindFramebufferEXT(target, framebuffer_id);
}
void GLES2DecoderImpl::RestoreCurrentFramebufferBindings() {
- state_dirty_ = true;
-
if (!feature_info_->feature_flags().chromium_framebuffer_multisample) {
RebindCurrentFramebuffer(
GL_FRAMEBUFFER,
@@ -2389,17 +2346,12 @@ gfx::Size GLES2DecoderImpl::GetBoundReadFrameBufferSize() {
GLenum GLES2DecoderImpl::GetBoundReadFrameBufferInternalFormat() {
if (bound_read_framebuffer_ != 0) {
- return bound_read_framebuffer_->GetColorAttachmentFormat();
- } else if (offscreen_target_frame_buffer_.get()) {
- return offscreen_target_color_format_;
- } else {
- return back_buffer_color_format_;
- }
-}
-
-GLenum GLES2DecoderImpl::GetBoundDrawFrameBufferInternalFormat() {
- if (bound_draw_framebuffer_ != 0) {
- return bound_draw_framebuffer_->GetColorAttachmentFormat();
+ const FramebufferManager::FramebufferInfo::Attachment* attachment =
+ bound_read_framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
+ if (attachment) {
+ return attachment->internal_format();
+ }
+ return 0;
} else if (offscreen_target_frame_buffer_.get()) {
return offscreen_target_color_format_;
} else {
@@ -2491,7 +2443,7 @@ bool GLES2DecoderImpl::UpdateOffscreenFrameBufferSize() {
// Clear the target frame buffer.
{
ScopedFrameBufferBinder binder(this, offscreen_target_frame_buffer_->id());
- glClearColor(0, 0, 0, offscreen_target_color_format_ == GL_RGB);
+ glClearColor(0, 0, 0, 0);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearStencil(0);
glStencilMaskSeparate(GL_FRONT, GL_TRUE);
@@ -2872,47 +2824,6 @@ void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint client_id) {
glBindBuffer(target, service_id);
}
-bool GLES2DecoderImpl::BoundFramebufferHasColorAttachmentWithAlpha() {
- return (GLES2Util::GetChannelsForFormat(
- GetBoundDrawFrameBufferInternalFormat()) & 0x0008) != 0;
-}
-
-bool GLES2DecoderImpl::BoundFramebufferHasDepthAttachment() {
- if (bound_draw_framebuffer_) {
- return bound_draw_framebuffer_->HasDepthAttachment();
- }
- if (offscreen_target_frame_buffer_.get()) {
- return offscreen_target_depth_format_ != 0;
- }
- return back_buffer_has_depth_;
-}
-
-bool GLES2DecoderImpl::BoundFramebufferHasStencilAttachment() {
- if (bound_draw_framebuffer_) {
- return bound_draw_framebuffer_->HasStencilAttachment();
- }
- if (offscreen_target_frame_buffer_.get()) {
- return offscreen_target_stencil_format_ != 0;
- }
- return back_buffer_has_stencil_;
-}
-
-void GLES2DecoderImpl::ApplyDirtyState() {
- if (state_dirty_) {
- glColorMask(
- mask_red_, mask_green_, mask_blue_,
- mask_alpha_ && BoundFramebufferHasColorAttachmentWithAlpha());
- glDepthMask(mask_depth_ && BoundFramebufferHasDepthAttachment());
- glStencilMaskSeparate(
- GL_FRONT,
- BoundFramebufferHasStencilAttachment() ? mask_stencil_front_ : 0);
- glStencilMaskSeparate(
- GL_BACK,
- BoundFramebufferHasStencilAttachment() ? mask_stencil_back_ : 0);
- state_dirty_ = false;
- }
-}
-
void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
FramebufferManager::FramebufferInfo* info = NULL;
GLuint service_id = 0;
@@ -2941,13 +2852,10 @@ void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
bound_read_framebuffer_ = info;
}
- state_dirty_ = true;
-
// When rendering to an offscreen frame buffer, instead of unbinding from
// the current frame buffer, bind to the offscreen target frame buffer.
- if (info == NULL && offscreen_target_frame_buffer_.get()) {
+ if (info == NULL && offscreen_target_frame_buffer_.get())
service_id = offscreen_target_frame_buffer_->id();
- }
glBindFramebufferEXT(target, service_id);
}
@@ -3101,57 +3009,6 @@ bool GLES2DecoderImpl::GetHelper(
}
}
switch (pname) {
- case GL_COLOR_WRITEMASK:
- *num_written = 4;
- if (params) {
- params[0] = mask_red_;
- params[1] = mask_green_;
- params[2] = mask_blue_;
- params[3] = mask_alpha_;
- }
- return true;
- case GL_DEPTH_WRITEMASK:
- *num_written = 1;
- if (params) {
- params[0] = mask_depth_;
- }
- return true;
- case GL_STENCIL_BACK_WRITEMASK:
- *num_written = 1;
- if (params) {
- params[0] = mask_stencil_back_;
- }
- return true;
- case GL_STENCIL_WRITEMASK:
- *num_written = 1;
- if (params) {
- params[0] = mask_stencil_front_;
- }
- return true;
- case GL_ALPHA_BITS:
- *num_written = 1;
- if (params) {
- GLint v = 0;
- glGetIntegerv(GL_ALPHA_BITS, &v);
- params[0] = BoundFramebufferHasColorAttachmentWithAlpha() ? v : 0;
- }
- return true;
- case GL_DEPTH_BITS:
- *num_written = 1;
- if (params) {
- GLint v = 0;
- glGetIntegerv(GL_DEPTH_BITS, &v);
- params[0] = BoundFramebufferHasDepthAttachment() ? v : 0;
- }
- return true;
- case GL_STENCIL_BITS:
- *num_written = 1;
- if (params) {
- GLint v = 0;
- glGetIntegerv(GL_STENCIL_BITS, &v);
- params[0] = BoundFramebufferHasStencilAttachment() ? v : 0;
- }
- return true;
case GL_COMPRESSED_TEXTURE_FORMATS:
*num_written = 0;
// We don't support compressed textures.
@@ -3543,7 +3400,6 @@ error::Error GLES2DecoderImpl::HandleRegisterSharedIdsCHROMIUM(
void GLES2DecoderImpl::DoClear(GLbitfield mask) {
if (CheckFramebufferComplete("glClear")) {
- ApplyDirtyState();
glClear(mask);
}
}
@@ -3570,7 +3426,6 @@ void GLES2DecoderImpl::DoDrawArrays(
bool simulated_fixed_attribs = false;
if (SimulateFixedAttribs(max_vertex_accessed, &simulated_fixed_attribs)) {
bool textures_set = SetBlackTextureForNonRenderableTextures();
- ApplyDirtyState();
glDrawArrays(mode, first, count);
if (textures_set) {
RestoreStateForNonRenderableTextures();
@@ -3619,9 +3474,6 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
}
}
}
- if (framebuffer_info == bound_draw_framebuffer_) {
- state_dirty_ = true;
- }
}
void GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
@@ -3669,28 +3521,27 @@ void GLES2DecoderImpl::DoColorMask(
mask_green_ = green;
mask_blue_ = blue;
mask_alpha_ = alpha;
- state_dirty_ = true;
+ glColorMask(red, green, blue, alpha);
}
void GLES2DecoderImpl::DoDepthMask(GLboolean depth) {
mask_depth_ = depth;
- state_dirty_ = true;
+ glDepthMask(depth);
}
void GLES2DecoderImpl::DoStencilMask(GLuint mask) {
mask_stencil_front_ = mask;
mask_stencil_back_ = mask;
- state_dirty_ = true;
+ glStencilMask(mask);
}
void GLES2DecoderImpl::DoStencilMaskSeparate(GLenum face, GLuint mask) {
- if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
+ if (face == GL_FRONT) {
mask_stencil_front_ = mask;
- }
- if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
+ } else {
mask_stencil_back_ = mask;
}
- state_dirty_ = true;
+ glStencilMaskSeparate(face, mask);
}
// NOTE: There's an assumption here that Texture attachments
@@ -3735,10 +3586,13 @@ void GLES2DecoderImpl::ClearUnclearedRenderbuffers(
}
void GLES2DecoderImpl::RestoreClearState() {
- state_dirty_ = true;
glClearColor(clear_red_, clear_green_, clear_blue_, clear_alpha_);
+ glColorMask(mask_red_, mask_green_, mask_blue_, mask_alpha_);
glClearStencil(clear_stencil_);
+ glStencilMaskSeparate(GL_FRONT, mask_stencil_front_);
+ glStencilMaskSeparate(GL_BACK, mask_stencil_back_);
glClearDepth(clear_depth_);
+ glDepthMask(mask_depth_);
if (enable_scissor_test_) {
glEnable(GL_SCISSOR_TEST);
}
@@ -3784,9 +3638,6 @@ void GLES2DecoderImpl::DoFramebufferTexture2D(
ClearUnclearedRenderbuffers(target, framebuffer_info);
}
}
- if (framebuffer_info == bound_draw_framebuffer_) {
- state_dirty_ = true;
- }
}
void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv(
@@ -4582,7 +4433,6 @@ error::Error GLES2DecoderImpl::HandleDrawElements(
bool simulated_fixed_attribs = false;
if (SimulateFixedAttribs(max_vertex_accessed, &simulated_fixed_attribs)) {
bool textures_set = SetBlackTextureForNonRenderableTextures();
- ApplyDirtyState();
const GLvoid* indices = reinterpret_cast<const GLvoid*>(offset);
glDrawElements(mode, count, type, indices);
if (textures_set) {
@@ -5798,10 +5648,6 @@ error::Error GLES2DecoderImpl::DoTexImage2D(
pixels = zero.get();
}
- if (info->IsAttachedToFramebuffer()) {
- state_dirty_ = true;
- }
-
if (!teximage2d_faster_than_texsubimage2d_) {
GLsizei tex_width = 0;
GLsizei tex_height = 0;
@@ -5982,10 +5828,6 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
ScopedResolvedFrameBufferBinder binder(this, false);
gfx::Size size = GetBoundReadFrameBufferSize();
- if (info->IsAttachedToFramebuffer()) {
- state_dirty_ = true;
- }
-
// Clip to size to source dimensions
GLint copyX = 0;
GLint copyY = 0;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index 05c4073..d50bb6d 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -45,6 +45,15 @@ class GLES2DecoderTest : public GLES2DecoderTestBase {
bool init);
};
+class GLES2DecoderRGBBackbufferTest : public GLES2DecoderTest {
+ public:
+ GLES2DecoderRGBBackbufferTest() { }
+
+ virtual void SetUp() {
+ InitDecoder("", false);
+ }
+};
+
class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
public:
GLES2DecoderWithShaderTest()
@@ -80,29 +89,9 @@ class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
}
};
-class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderRGBBackbufferTest() { }
-
- virtual void SetUp() {
- InitDecoder("", false, false, false, false, false, false);
- SetupDefaultProgram();
- }
-};
-
-class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderManualInitTest() { }
-
- // Override default setup so nothing gets setup.
- virtual void SetUp() {
- }
-};
-
TEST_F(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) {
SetupTexture();
AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
@@ -142,7 +131,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
.Times(1)
.RetiresOnSaturation();
}
- SetupExpectationsForApplyingDefaultDirtyState();
DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -175,10 +163,8 @@ TEST_F(GLES2DecoderWithShaderTest,
TEST_F(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) {
SetupTexture();
SetupVertexBuffer();
- DoEnableVertexAttribArray(1);
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
@@ -205,7 +191,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) {
TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
SetupTexture();
AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
DoDeleteProgram(client_program_id_, kServiceProgramId);
EXPECT_CALL(*gl_, DrawArrays(_, _, _))
@@ -274,7 +259,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) {
SetupTexture();
SetupIndexBuffer();
AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
BufferOffset(kValidIndexRangeStart * 2)))
@@ -333,7 +317,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) {
SetupIndexBuffer();
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -366,7 +349,6 @@ TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
SetupTexture();
SetupIndexBuffer();
AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
DoDeleteProgram(client_program_id_, kServiceProgramId);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
@@ -1263,29 +1245,13 @@ TEST_F(GLES2DecoderTest, CheckFramebufferStatusWithNoBoundTarget) {
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), *result);
}
-TEST_F(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoDeleteFramebuffer(client_framebuffer_id_, kServiceFramebufferId);
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
TEST_F(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _))
.Times(0);
FramebufferRenderbuffer cmd;
cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+ client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
@@ -1334,8 +1300,12 @@ TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithRenderbuffer) {
SetupExpectationsForFramebufferAttachment(
GL_COLOR_BUFFER_BIT, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
0, // stencil
+ -1, // stencil mask back,
+ -1, // stencil mask front,
1.0f, // depth
+ 1, // depth mask
false); // scissor test
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
@@ -1390,8 +1360,12 @@ TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithTexture) {
SetupExpectationsForFramebufferAttachment(
0, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
0, // stencil
+ -1, // stencil mask back,
+ -1, // stencil mask front,
1.0f, // depth
+ 1, // depth mask
false); // scissor test
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
@@ -1568,8 +1542,12 @@ void GLES2DecoderTest::CheckReadPixelsOutOfRange(
SetupExpectationsForFramebufferAttachment(
0, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
0, // stencil
+ -1, // stencil mask back,
+ -1, // stencil mask front,
1.0f, // depth
+ 1, // depth mask
false); // scissor test
FramebufferTexture2D fbtex_cmd;
fbtex_cmd.Init(
@@ -2551,9 +2529,9 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearColor) {
EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f))
.Times(1)
.RetiresOnSaturation();
-// EXPECT_CALL(*gl_, ColorMask(0, 1, 0, 1))
-// .Times(0)
-// .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ColorMask(0, 1, 0, 1))
+ .Times(1)
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST))
.Times(1)
.RetiresOnSaturation();
@@ -2571,8 +2549,12 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearColor) {
SetupExpectationsForFramebufferAttachment(
GL_COLOR_BUFFER_BIT, // clear bits
0.1f, 0.2f, 0.3f, 0.4f, // color
+ 0x0101, // color bits
0, // stencil
+ -1, // stencil mask back
+ -1, // stencil mask front
1.0f, // depth
+ 1, // depth mask
true); // scissor test
EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd));
EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
@@ -2595,9 +2577,9 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
EXPECT_CALL(*gl_, ClearDepth(0.5f))
.Times(1)
.RetiresOnSaturation();
-// EXPECT_CALL(*gl_, DepthMask(0))
-// .Times(1)
-// .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DepthMask(0))
+ .Times(1)
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
@@ -2612,8 +2594,12 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
SetupExpectationsForFramebufferAttachment(
GL_DEPTH_BUFFER_BIT, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
0, // stencil
+ -1, // stencil mask back,
+ -1, // stencil mask front,
0.5f, // depth
+ 0, // depth mask
false); // scissor test
EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
@@ -2635,9 +2621,9 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
EXPECT_CALL(*gl_, ClearStencil(123))
.Times(1)
.RetiresOnSaturation();
-// EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, 0x1234u))
-// .Times(1)
-// .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, 0x1234u))
+ .Times(1)
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
@@ -2652,8 +2638,12 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
SetupExpectationsForFramebufferAttachment(
GL_STENCIL_BUFFER_BIT, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
123, // stencil
+ -1, // stencil mask back,
+ 0x1234u, // stencil mask front,
1.0f, // depth
+ 1, // depth mask
false); // scissor test
EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd));
@@ -2735,8 +2725,12 @@ TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepthStencil) {
SetupExpectationsForFramebufferAttachment(
GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
0, 0, 0, 0, // color
+ 0x1111, // color bits
123, // stencil
+ -1, // stencil mask back,
+ -1, // stencil mask front,
0.5f, // depth
+ 1, // depth mask
false); // scissor test
EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
@@ -2980,381 +2974,6 @@ TEST_F(GLES2DecoderTest,
EXPECT_EQ(surface.get(), decoder_->GetGLSurface());
}
-// Test that with an RGB backbuffer if we set the color mask to 1,1,1,1 it is
-// set to 1,1,1,0 at Draw time but is 1,1,1,1 at query time.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
- ColorMask cmd;
- cmd.Init(true, true, true, true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_COLOR_WRITEMASK, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_COLOR_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_COLOR_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
- EXPECT_EQ(1, result->GetData()[1]);
- EXPECT_EQ(1, result->GetData()[2]);
- EXPECT_EQ(1, result->GetData()[3]);
-}
-
-// Test that with no depth if we set DepthMask true that it's set to false at
-// draw time but querying it returns true.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
- EXPECT_CALL(*gl_, DepthMask(true))
- .Times(0)
- .RetiresOnSaturation();
- DepthMask cmd;
- cmd.Init(true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_WRITEMASK, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-// Test that with no stencil if we set the stencil mask it's still set to 0 at
-// draw time but gets our value if we query.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
- const GLint kMask = 123;
- EXPECT_CALL(*gl_, StencilMask(kMask))
- .Times(0)
- .RetiresOnSaturation();
- StencilMask cmd;
- cmd.Init(kMask);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(kMask, result->GetData()[0]);
-}
-
-// Test that if an FBO is bound we get the correct masks.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
- ColorMask cmd;
- cmd.Init(true, true, true, true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- DoEnableVertexAttribArray(2);
- DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Check that no extra calls are made on the next draw.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Setup Frame buffer.
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _))
- .Times(0);
- FramebufferRenderbuffer fbrb_cmd;
- fbrb_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
- // This time state needs to be set.
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Check that no extra calls are made on the next draw.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Unbind
- DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
-
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
- InitDecoder("", true, false, false, true, false, false);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
- InitDecoder("", true, false, false, false, false, false);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
- InitDecoder("", false, true, false, false, true, false);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(24, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
- InitDecoder("", false, true, false, false, false, false);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
- InitDecoder("", false, false, true, false, false, true);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
- InitDecoder("", false, false, true, false, false, false);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
// TODO(gman): BufferData
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
index dc086f3..9497dbc 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
@@ -59,22 +59,6 @@ void GLES2DecoderTestBase::SpecializedSetup<CheckFramebufferStatus, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<Clear, 0>(bool valid) {
- if (valid) {
- SetupExpectationsForApplyingDefaultDirtyState();
- }
-};
-
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<ColorMask, 0>(
- bool /* valid */) {
- // We bind a framebuffer color the colormask test since the framebuffer
- // will be considered RGB.
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<CopyTexImage2D, 0>(
bool valid) {
if (valid) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
index 58f5a86..477c3bf 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
@@ -326,9 +326,10 @@ TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) {
}
TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) {
+ EXPECT_CALL(*gl_, ColorMask(1, 2, 3, 4));
SpecializedSetup<ColorMask, 0>(true);
ColorMask cmd;
- cmd.Init(true, true, true, true);
+ cmd.Init(1, 2, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
@@ -641,9 +642,10 @@ TEST_F(GLES2DecoderTest1, DepthFuncValidArgs) {
}
TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) {
+ EXPECT_CALL(*gl_, DepthMask(1));
SpecializedSetup<DepthMask, 0>(true);
DepthMask cmd;
- cmd.Init(true);
+ cmd.Init(1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
index 8f93103..5d7375b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
@@ -282,10 +282,10 @@ TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs3_0) {
}
TEST_F(GLES2DecoderTest2, SampleCoverageValidArgs) {
- EXPECT_CALL(*gl_, SampleCoverage(1, true));
+ EXPECT_CALL(*gl_, SampleCoverage(1, 2));
SpecializedSetup<SampleCoverage, 0>(true);
SampleCoverage cmd;
- cmd.Init(1, true);
+ cmd.Init(1, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
@@ -343,6 +343,7 @@ TEST_F(GLES2DecoderTest2, StencilFuncSeparateValidArgs) {
}
TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) {
+ EXPECT_CALL(*gl_, StencilMask(1));
SpecializedSetup<StencilMask, 0>(true);
StencilMask cmd;
cmd.Init(1);
@@ -351,6 +352,7 @@ TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) {
}
TEST_F(GLES2DecoderTest2, StencilMaskSeparateValidArgs) {
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, 2));
SpecializedSetup<StencilMaskSeparate, 0>(true);
StencilMaskSeparate cmd;
cmd.Init(GL_FRONT, 2);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
index 1322d58c..9470d08 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -48,17 +48,11 @@ GLES2DecoderTestBase::GLES2DecoderTestBase()
GLES2DecoderTestBase::~GLES2DecoderTestBase() {}
void GLES2DecoderTestBase::SetUp() {
- InitDecoder("", true, true, false, true, true, false);
+ InitDecoder("", true);
}
void GLES2DecoderTestBase::InitDecoder(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil) {
+ const char* extensions, bool has_alpha_backbuffer) {
gl_.reset(new StrictMock<MockGLInterface>());
::gfx::GLInterface::SetGLInterface(gl_.get());
surface_manager_.reset(new StrictMock<MockSurfaceManager>);
@@ -71,6 +65,9 @@ void GLES2DecoderTestBase::InitDecoder(
EXPECT_TRUE(group_->Initialize(DisallowedExtensions(), extensions));
+ EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(has_alpha_backbuffer ? 8 : 0))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, EnableVertexAttribArray(0))
.Times(1)
.RetiresOnSaturation();
@@ -116,16 +113,6 @@ void GLES2DecoderTestBase::InitDecoder(
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_alpha ? 8 : 0))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_depth ? 24 : 0))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_stencil ? 8 : 0))
- .RetiresOnSaturation();
-
EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE))
.Times(1)
.RetiresOnSaturation();
@@ -147,22 +134,10 @@ void GLES2DecoderTestBase::InitDecoder(
context_ = new gfx::GLContextStub;
- // From <EGL/egl.h>.
- const int32 EGL_ALPHA_SIZE = 0x3021;
- const int32 EGL_DEPTH_SIZE = 0x3025;
- const int32 EGL_STENCIL_SIZE = 0x3026;
-
- int32 attributes[] = {
- EGL_ALPHA_SIZE, request_alpha ? 8 : 0,
- EGL_DEPTH_SIZE, request_depth ? 24 : 0,
- EGL_STENCIL_SIZE, request_stencil ? 8 : 0,
- };
- std::vector<int32> attribs(attributes, attributes + arraysize(attributes));
-
decoder_.reset(GLES2Decoder::Create(surface_manager_.get(), group_.get()));
decoder_->Initialize(
surface_, context_, surface_->GetSize(), DisallowedExtensions(),
- NULL, attribs, NULL, 0);
+ NULL, std::vector<int32>(), NULL, 0);
decoder_->set_engine(engine_.get());
EXPECT_CALL(*gl_, GenBuffersARB(_, _))
@@ -288,8 +263,12 @@ void GLES2DecoderTestBase::SetupExpectationsForFramebufferAttachment(
GLclampf restore_green,
GLclampf restore_blue,
GLclampf restore_alpha,
+ GLuint restore_color_mask,
GLuint restore_stencil,
+ GLuint restore_stencil_front_mask,
+ GLuint restore_stencil_back_mask,
GLclampf restore_depth,
+ GLboolean restore_depth_mask,
bool restore_scissor_test) {
InSequence sequence;
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
@@ -329,12 +308,28 @@ void GLES2DecoderTestBase::SetupExpectationsForFramebufferAttachment(
restore_red, restore_green, restore_blue, restore_alpha))
.Times(1)
.RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ColorMask(
+ ((restore_color_mask & 0x1000) != 0) ? 1 : 0,
+ ((restore_color_mask & 0x0100) != 0) ? 1 : 0,
+ ((restore_color_mask & 0x0010) != 0) ? 1 : 0,
+ ((restore_color_mask & 0x0001) != 0) ? 1 : 0))
+ .Times(1)
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, ClearStencil(restore_stencil))
.Times(1)
.RetiresOnSaturation();
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, restore_stencil_front_mask))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, restore_stencil_back_mask))
+ .Times(1)
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, ClearDepth(restore_depth))
.Times(1)
.RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DepthMask(restore_depth_mask))
+ .Times(1)
+ .RetiresOnSaturation();
if (restore_scissor_test) {
EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST))
.Times(1)
@@ -391,43 +386,6 @@ void GLES2DecoderTestBase::DoDeleteBuffer(
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
-void GLES2DecoderTestBase::SetupExpectationsForApplyingDirtyState(
- bool framebuffer_is_rgb,
- bool framebuffer_has_depth,
- bool framebuffer_has_stencil,
- GLuint color_bits,
- bool depth_mask,
- GLuint front_stencil_mask,
- GLuint back_stencil_mask) {
- EXPECT_CALL(*gl_, ColorMask(
- (color_bits & 0x1000) != 0,
- (color_bits & 0x0100) != 0,
- (color_bits & 0x0010) != 0,
- (color_bits & 0x0001) && !framebuffer_is_rgb))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthMask(depth_mask))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, front_stencil_mask))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, back_stencil_mask))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-void GLES2DecoderTestBase::SetupExpectationsForApplyingDefaultDirtyState() {
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- true, // depth mask
- 0, // front stencil mask
- 0); // back stencil mask
-}
-
void GLES2DecoderTestBase::DoBindFramebuffer(
GLenum target, GLuint client_id, GLuint service_id) {
EXPECT_CALL(*gl_, BindFramebufferEXT(target, service_id))
@@ -577,10 +535,7 @@ const int GLES2DecoderTestBase::kBackBufferHeight;
void GLES2DecoderWithShaderTestBase::SetUp() {
GLES2DecoderTestBase::SetUp();
- SetupDefaultProgram();
-}
-void GLES2DecoderWithShaderTestBase::SetupDefaultProgram() {
{
static AttribInfo attribs[] = {
{ kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, },
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
index 2676f9f..d939e4f8 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
@@ -162,14 +162,7 @@ class GLES2DecoderTestBase : public testing::Test {
void SetBucketAsCString(uint32 bucket_id, const char* str);
- void InitDecoder(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil);
+ void InitDecoder(const char* extensions, bool has_alpha_backbuffer);
const ContextGroup& group() const {
return *group_.get();
@@ -239,21 +232,14 @@ class GLES2DecoderTestBase : public testing::Test {
GLclampf restore_green,
GLclampf restore_blue,
GLclampf restore_alpha,
+ GLuint restore_color_mask,
GLuint restore_stencil,
+ GLuint restore_stencil_front_mask,
+ GLuint restore_stencil_back_mask,
GLclampf restore_depth,
+ GLboolean restore_depth_mask,
bool restore_scissor_test);
- void SetupExpectationsForApplyingDirtyState(
- bool framebuffer_is_rgb,
- bool framebuffer_has_depth,
- bool framebuffer_has_stencil,
- GLuint color_bits, // NOTE! bits are 0x1000, 0x0100, 0x0010, and 0x0001
- bool depth_mask,
- GLuint front_stencil_mask,
- GLuint back_stencil_mask);
-
- void SetupExpectationsForApplyingDefaultDirtyState();
-
GLvoid* BufferOffset(unsigned i) {
return static_cast<int8 *>(NULL)+(i);
}
@@ -396,7 +382,6 @@ class GLES2DecoderWithShaderTestBase : public GLES2DecoderTestBase {
virtual void SetUp();
virtual void TearDown();
- void SetupDefaultProgram();
void SetupTexture();
void DoEnableVertexAttribArray(GLint index);
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index 2fc1cb9..6b7ff12 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -42,7 +42,6 @@ class TextureManager {
cube_complete_(false),
npot_(false),
has_been_bound_(false),
- framebuffer_attachment_count_(0),
owned_(true) {
}
@@ -132,19 +131,6 @@ class TextureManager {
owned_ = false;
}
- bool IsAttachedToFramebuffer() const {
- return framebuffer_attachment_count_ != 0;
- }
-
- void AttachToFramebuffer() {
- ++framebuffer_attachment_count_;
- }
-
- void DetachFromFramebuffer() {
- DCHECK(framebuffer_attachment_count_ > 0);
- --framebuffer_attachment_count_;
- }
-
private:
friend class TextureManager;
friend class base::RefCounted<TextureInfo>;
@@ -254,9 +240,6 @@ class TextureManager {
// Whether this texture has ever been bound.
bool has_been_bound_;
- // The number of framebuffers this texture is attached to.
- int framebuffer_attachment_count_;
-
// Whether the associated context group owns this texture and should delete
// it.
bool owned_;