EXPECT_EQ(static_cast<GLuint>(*result_value), client_texture_id_);
}
+TEST_P(GLES2DecoderWithShaderTest,
+ GetRenderbufferParameterivRebindRenderbuffer) {
+ SetupTexture();
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
+
+ GetRenderbufferParameteriv cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ GL_RENDERBUFFER_RED_SIZE,
+ shared_memory_id_,
+ shared_memory_offset_);
+
+ RestoreRenderbufferBindings();
+ EnsureRenderbufferBound(true);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ GetRenderbufferParameterivEXT(
+ GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, _));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
TEST_P(GLES2DecoderTest, GetRenderbufferParameterivWithNoBoundTarget) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
+TEST_P(GLES2DecoderWithShaderTest, RenderbufferStorageRebindRenderbuffer) {
+ SetupTexture();
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ RestoreRenderbufferBindings();
+ EnsureRenderbufferBound(true);
+ DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
+}
+
TEST_P(GLES2DecoderTest, RenderbufferStorageWithNoBoundTarget) {
EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
RenderbufferStorage cmd;
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EnsureRenderbufferBound(false);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
.WillOnce(Return(GL_NO_ERROR))
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EnsureRenderbufferBound(false);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
.WillOnce(Return(GL_NO_ERROR))
TEST_P(GLES2DecoderTest, RenderbufferStorageGLError) {
DoBindRenderbuffer(
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EnsureRenderbufferBound(false);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_OUT_OF_MEMORY))
InitDecoder(init);
DoBindRenderbuffer(
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EnsureRenderbufferBound(false);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_OUT_OF_MEMORY))
DoBindRenderbuffer(
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
InSequence sequence;
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_,
- RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
- TestHelper::kMaxSamples,
- GL_RGBA,
- TestHelper::kMaxRenderbufferSize,
- 1))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
- cmd.Init(GL_RENDERBUFFER,
- TestHelper::kMaxSamples,
- GL_RGBA4,
- TestHelper::kMaxRenderbufferSize,
- 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EnsureRenderbufferBound(false);
+ DoRenderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ GL_RGBA,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ RenderbufferStorageMultisampleCHROMIUMRebindRenderbuffer) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ RestoreRenderbufferBindings();
+ InSequence sequence;
+ EnsureRenderbufferBound(true);
+ DoRenderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ GL_RGBA,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
}
TEST_P(GLES2DecoderManualInitTest,
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
- void TestRenderbufferStorageMultisampleEXT(const char* extension) {
+ void TestRenderbufferStorageMultisampleEXT(const char* extension,
+ bool rb_rebind) {
DoBindRenderbuffer(
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
InSequence sequence;
+ if (rb_rebind) {
+ RestoreRenderbufferBindings();
+ EnsureRenderbufferBound(true);
+ } else {
+ EnsureRenderbufferBound(false);
+ }
+
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
RenderbufferStorageMultisampleEXT_EXT) {
Init("GL_EXT_multisampled_render_to_texture");
- TestRenderbufferStorageMultisampleEXT(
- "GL_EXT_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT("GL_EXT_multisampled_render_to_texture",
+ false);
}
TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
RenderbufferStorageMultisampleEXT_IMG) {
Init("GL_IMG_multisampled_render_to_texture");
- TestRenderbufferStorageMultisampleEXT(
- "GL_IMG_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT("GL_IMG_multisampled_render_to_texture",
+ false);
+}
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ RenderbufferStorageMultisampleEXT_EXT_RebindRenderbuffer) {
+ Init("GL_EXT_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT("GL_EXT_multisampled_render_to_texture",
+ true);
+}
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ RenderbufferStorageMultisampleEXT_IMG_RebindRenderbuffer) {
+ Init("GL_IMG_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT("GL_IMG_multisampled_render_to_texture",
+ true);
}
TEST_P(GLES2DecoderTest, ReadPixelsGLError) {