Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 22824009: Remove StreamTextureManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include "base/atomicops.h" 7 #include "base/atomicops.h"
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_format.h"
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
10 #include "gpu/command_buffer/common/id_allocator.h" 10 #include "gpu/command_buffer/common/id_allocator.h"
11 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h" 11 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
12 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" 12 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
13 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h" 13 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
14 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 14 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
15 #include "gpu/command_buffer/service/context_group.h" 15 #include "gpu/command_buffer/service/context_group.h"
16 #include "gpu/command_buffer/service/gl_surface_mock.h" 16 #include "gpu/command_buffer/service/gl_surface_mock.h"
17 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" 17 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
18 #include "gpu/command_buffer/service/image_manager.h" 18 #include "gpu/command_buffer/service/image_manager.h"
19 #include "gpu/command_buffer/service/mailbox_manager.h" 19 #include "gpu/command_buffer/service/mailbox_manager.h"
20 #include "gpu/command_buffer/service/mocks.h" 20 #include "gpu/command_buffer/service/mocks.h"
21 #include "gpu/command_buffer/service/program_manager.h" 21 #include "gpu/command_buffer/service/program_manager.h"
22 #include "gpu/command_buffer/service/stream_texture_manager_mock.h"
23 #include "gpu/command_buffer/service/stream_texture_mock.h"
24 #include "gpu/command_buffer/service/test_helper.h"
25 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 #include "ui/gl/gl_image_mock.h"
26 #include "ui/gl/gl_implementation.h" 24 #include "ui/gl/gl_implementation.h"
27 #include "ui/gl/gl_mock.h" 25 #include "ui/gl/gl_mock.h"
28 #include "ui/gl/gl_surface_stub.h" 26 #include "ui/gl/gl_surface_stub.h"
29 27
30 28
31 #if !defined(GL_DEPTH24_STENCIL8) 29 #if !defined(GL_DEPTH24_STENCIL8)
32 #define GL_DEPTH24_STENCIL8 0x88F0 30 #define GL_DEPTH24_STENCIL8 0x88F0
33 #endif 31 #endif
34 32
35 using ::gfx::MockGLInterface; 33 using ::gfx::MockGLInterface;
(...skipping 5588 matching lines...) Expand 10 before | Expand all | Expand 10 after
5624 5622
5625 BindFramebuffer cmd3; 5623 BindFramebuffer cmd3;
5626 cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId); 5624 cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId);
5627 EXPECT_NE(error::kNoError, ExecuteCmd(cmd3)); 5625 EXPECT_NE(error::kNoError, ExecuteCmd(cmd3));
5628 5626
5629 BindRenderbuffer cmd4; 5627 BindRenderbuffer cmd4;
5630 cmd4.Init(GL_RENDERBUFFER, kInvalidClientId); 5628 cmd4.Init(GL_RENDERBUFFER, kInvalidClientId);
5631 EXPECT_NE(error::kNoError, ExecuteCmd(cmd4)); 5629 EXPECT_NE(error::kNoError, ExecuteCmd(cmd4));
5632 } 5630 }
5633 5631
5634 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUM) { 5632 class GLES2StreamTextureTest : public GLES2DecoderManualInitTest {
5635 const GLuint kObjectId = 123; 5633 public:
5636 InitDecoder( 5634 GLES2StreamTextureTest() { }
5637 "GL_CHROMIUM_stream_texture", // extensions
5638 false, // has alpha
5639 false, // has depth
5640 false, // has stencil
5641 false, // request alpha
5642 false, // request depth
5643 false, // request stencil
5644 true); // bind generates resource
5645 5635
5646 EXPECT_CALL(*stream_texture_manager(), CreateStreamTexture( 5636 virtual void SetUp() {
5647 kServiceTextureId, client_texture_id_)) 5637 InitDecoder(
5648 .WillOnce(Return(kObjectId)) 5638 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5649 .RetiresOnSaturation(); 5639 true, // has alpha
5640 true, // has depth
5641 false, // has stencil
5642 true, // request alpha
5643 true, // request depth
5644 false, // request stencil
5645 true); // bind generates resource
5646 }
5650 5647
5651 CreateStreamTextureCHROMIUM cmd; 5648 protected:
5652 CreateStreamTextureCHROMIUM::Result* result = 5649 void CreateAndBindTexImage(GLuint client_texture_id,
5653 static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_); 5650 GLuint service_texture_id) {
5654 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5651 TextureRef* texture_ref = GetTexture(client_texture_id);
5655 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5652 DoBindTexture(
5656 EXPECT_EQ(kObjectId, *result); 5653 GL_TEXTURE_EXTERNAL_OES, client_texture_id, service_texture_id);
5654 scoped_refptr<gfx::GLImage> image = new gfx::GLImageStub;
5655 group().texture_manager()->SetLevelInfo(texture_ref,
5656 GL_TEXTURE_EXTERNAL_OES,
5657 0,
5658 GL_RGBA,
5659 0,
5660 0,
5661 1,
5662 0,
5663 GL_RGBA,
5664 GL_UNSIGNED_BYTE,
5665 true);
5666 group().texture_manager()->SetLevelImage(
5667 texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image);
5668 }
5669
5670 GLuint AddImage(Texture* texture) {
5671 GLuint image_id = GetIdAllocator(id_namespaces::kImages)->AllocateID();
5672 scoped_refptr<gfx::GLImage> image =
5673 texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0);
5674 EXPECT_TRUE(image != NULL);
5675 group().image_manager()->AddImage(image, image_id);
5676 return image_id;
5677 }
5678
5679 GLuint DoCreateStreamTexture(GLuint client_texture_id) {
5680 CreateStreamTextureCHROMIUM cmd;
5681 CreateStreamTextureCHROMIUM::Result* result =
5682 static_cast<CreateStreamTextureCHROMIUM::Result*>(
5683 shared_memory_address_);
5684 cmd.Init(client_texture_id, shared_memory_id_, shared_memory_offset_);
5685 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5686 return *result;
5687 }
5688
5689 scoped_refptr<gfx::GLImage> LookupImage(int32 image_id) {
5690 return group().image_manager()->LookupImage(image_id);
5691 }
5692 };
5693
5694 TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUM) {
5695 GLuint image_id = DoCreateStreamTexture(client_texture_id_);
5657 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5696 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5697
5658 TextureRef* texture_ref = GetTexture(client_texture_id_); 5698 TextureRef* texture_ref = GetTexture(client_texture_id_);
5659 EXPECT_TRUE(texture_ref != NULL); 5699 EXPECT_TRUE(texture_ref != NULL);
5660 EXPECT_TRUE(texture_ref->texture()->IsStreamTexture()); 5700 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES),
5661 EXPECT_CALL(*stream_texture_manager(), 5701 texture_ref->texture()->target());
5662 DestroyStreamTexture(kServiceTextureId)) 5702 EXPECT_NE(0U, image_id);
5663 .Times(1) 5703
5664 .RetiresOnSaturation(); 5704 scoped_refptr<gfx::GLImage> attached_image =
5705 texture_ref->texture()->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0);
5706 scoped_refptr<gfx::GLImage> image = LookupImage(image_id);
5707 EXPECT_TRUE(image.get() != NULL);
5708 EXPECT_EQ(image.get(), attached_image.get());
5665 } 5709 }
5666 5710
5667 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMBadId) { 5711 TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUMBadTextureId) {
5668 InitDecoder( 5712 GLuint image_id = DoCreateStreamTexture(kNewClientId);
5669 "GL_CHROMIUM_stream_texture", // extensions 5713 EXPECT_EQ(0U, image_id);
5670 false, // has alpha
5671 false, // has depth
5672 false, // has stencil
5673 false, // request alpha
5674 false, // request depth
5675 false, // request stencil
5676 true); // bind generates resource
5677
5678 CreateStreamTextureCHROMIUM cmd;
5679 CreateStreamTextureCHROMIUM::Result* result =
5680 static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
5681 cmd.Init(kNewClientId, shared_memory_id_, shared_memory_offset_);
5682 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5683 EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
5684 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 5714 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
5685 } 5715 }
5686 5716
5687 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadyBound) { 5717 TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUMAlreadyBound2D) {
5688 InitDecoder(
5689 "GL_CHROMIUM_stream_texture", // extensions
5690 false, // has alpha
5691 false, // has depth
5692 false, // has stencil
5693 false, // request alpha
5694 false, // request depth
5695 false, // request stencil
5696 true); // bind generates resource
5697 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 5718 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5698 5719
5699 CreateStreamTextureCHROMIUM cmd; 5720 // Cannot create stream from a texture that's already bound to an incompatible
5700 CreateStreamTextureCHROMIUM::Result* result = 5721 // target (not bound to GL_TEXTURE_EXTERNAL_OES).
5701 static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_); 5722 GLuint image_id = DoCreateStreamTexture(client_texture_id_);
5702 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); 5723 EXPECT_EQ(0U, image_id);
5703 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5704 EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
5705 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5724 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5706 } 5725 }
5707 5726
5708 TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadySet) { 5727 TEST_F(GLES2StreamTextureTest,
5709 InitDecoder( 5728 CreateStreamTextureCHROMIUMAlreadyBoundExternal) {
5710 "GL_CHROMIUM_stream_texture", // extensions 5729 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5711 false, // has alpha
5712 false, // has depth
5713 false, // has stencil
5714 false, // request alpha
5715 false, // request depth
5716 false, // request stencil
5717 true); // bind generates resource
5718 5730
5719 TextureRef* texture_ref = GetTexture(client_texture_id_); 5731 GLuint image_id = DoCreateStreamTexture(client_texture_id_);
5720 group().texture_manager()->SetStreamTexture(texture_ref, true); 5732 EXPECT_NE(0U, image_id);
5721 5733 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5722 CreateStreamTextureCHROMIUM cmd;
5723 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5724 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5725 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5726
5727 EXPECT_CALL(*stream_texture_manager(),
5728 DestroyStreamTexture(kServiceTextureId))
5729 .Times(1)
5730 .RetiresOnSaturation();
5731 } 5734 }
5732 5735
5733 TEST_F(GLES2DecoderManualInitTest, DrawStreamTextureCHROMIUM) {
5734 InitDecoder(
5735 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5736 true, // has alpha
5737 true, // has depth
5738 false, // has stencil
5739 true, // request alpha
5740 true, // request depth
5741 false, // request stencil
5742 true); // bind generates resource
5743 5736
5744 StrictMock<MockStreamTexture> stream_texture; 5737 TEST_F(GLES2StreamTextureTest, ReCreateStreamTextureCHROMIUM) {
5738 CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
5739 Texture* texture = GetTexture(client_texture_id_)->texture();
5740 GLuint image_id = AddImage(texture);
5745 5741
5742 scoped_refptr<gfx::GLImage> old_image(LookupImage(image_id));
5743 EXPECT_TRUE(old_image.get() != NULL);
5744
5745 DestroyStreamTextureCHROMIUM cmd;
5746 cmd.Init(image_id);
5747 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5748 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5749
5750 image_id = DoCreateStreamTexture(client_texture_id_);
5751 EXPECT_NE(0U, image_id);
5752 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5753
5754 scoped_refptr<gfx::GLImage> new_image(LookupImage(image_id));
5755 EXPECT_TRUE(new_image != NULL);
5756 EXPECT_EQ(new_image.get(),
5757 texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0));
5758 EXPECT_NE(old_image.get(), new_image.get());
5759 }
5760
5761 TEST_F(GLES2StreamTextureTest, DrawStreamTextureCHROMIUM) {
5762 scoped_refptr<gfx::GLImageMock> mock_image(new StrictMock<gfx::GLImageMock>);
5746 TextureRef* texture_ref = GetTexture(client_texture_id_); 5763 TextureRef* texture_ref = GetTexture(client_texture_id_);
5747 group().texture_manager()->SetStreamTexture(texture_ref, true);
5748
5749 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5764 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5750 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5765 group().texture_manager()->SetLevelInfo(texture_ref,
5766 GL_TEXTURE_EXTERNAL_OES,
5767 0,
5768 GL_RGBA,
5769 0,
5770 0,
5771 1,
5772 0,
5773 GL_RGBA,
5774 GL_UNSIGNED_BYTE,
5775 true);
5776 group().texture_manager()->SetLevelImage(
5777 texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, mock_image);
5751 5778
5752 SetupSamplerExternalProgram(); 5779 SetupSamplerExternalProgram();
5753 SetupIndexBuffer(); 5780 SetupIndexBuffer();
5754 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0); 5781 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
5755 SetupExpectationsForApplyingDefaultDirtyState(); 5782 SetupExpectationsForApplyingDefaultDirtyState();
5756 EXPECT_TRUE(group().texture_manager()->CanRender(texture_ref)); 5783 EXPECT_TRUE(group().texture_manager()->CanRender(texture_ref));
5757 5784
5758 InSequence s; 5785 InSequence s;
5759 EXPECT_CALL(*stream_texture_manager(), LookupStreamTexture(kServiceTextureId)) 5786 EXPECT_CALL(*mock_image, WillUseTexImage())
5760 .WillOnce(Return(&stream_texture))
5761 .RetiresOnSaturation();
5762 EXPECT_CALL(stream_texture, Update())
5763 .Times(1) 5787 .Times(1)
5764 .RetiresOnSaturation(); 5788 .RetiresOnSaturation();
5765 EXPECT_CALL(*gl_, DrawElements(_, _, _, _)) 5789 EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
5766 .Times(1); 5790 .Times(1);
5767 DrawElements cmd; 5791 DrawElements cmd;
5768 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 5792 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
5769 kValidIndexRangeStart * 2); 5793 kValidIndexRangeStart * 2);
5770 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5794 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5771 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5795 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5772
5773 EXPECT_CALL(*stream_texture_manager(),
5774 DestroyStreamTexture(kServiceTextureId))
5775 .Times(1)
5776 .RetiresOnSaturation();
5777 } 5796 }
5778 5797
5779 TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUMInvalid) { 5798 TEST_F(GLES2StreamTextureTest, DestroyStreamTextureCHROMIUM) {
5780 InitDecoder( 5799 CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
5781 "GL_CHROMIUM_stream_texture", // extensions 5800 Texture* texture = GetTexture(client_texture_id_)->texture();
5782 false, // has alpha 5801 const GLuint image_id = AddImage(texture);
5783 false, // has depth
5784 false, // has stencil
5785 false, // request alpha
5786 false, // request depth
5787 false, // request stencil
5788 true); // bind generates resource
5789 5802
5790 TextureRef* texture_ref = GetTexture(client_texture_id_); 5803 DestroyStreamTextureCHROMIUM cmd;
5791 group().texture_manager()->SetStreamTexture(texture_ref, true); 5804 cmd.Init(image_id);
5792
5793 BindTexture cmd;
5794 cmd.Init(GL_TEXTURE_2D, client_texture_id_);
5795 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5805 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5796 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5806 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5797 5807 EXPECT_TRUE(LookupImage(image_id) == NULL);
5798 BindTexture cmd2;
5799 cmd2.Init(GL_TEXTURE_CUBE_MAP, client_texture_id_);
5800 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
5801 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5802
5803 EXPECT_CALL(*stream_texture_manager(),
5804 DestroyStreamTexture(kServiceTextureId))
5805 .Times(1)
5806 .RetiresOnSaturation();
5807 } 5808 }
5808 5809
5809 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUM) { 5810 TEST_F(GLES2StreamTextureTest, DestroyStreamTextureCHROMIUMUntracked) {
5810 InitDecoder( 5811 CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
5811 "GL_CHROMIUM_stream_texture", // extensions
5812 false, // has alpha
5813 false, // has depth
5814 false, // has stencil
5815 false, // request alpha
5816 false, // request depth
5817 false, // request stencil
5818 true); // bind generates resource
5819 5812
5820 TextureRef* texture_ref = GetTexture(client_texture_id_); 5813 // This should fail because the image is not tracked by the manager.
5821 group().texture_manager()->SetStreamTexture(texture_ref, true);
5822
5823 EXPECT_CALL(*stream_texture_manager(),
5824 DestroyStreamTexture(kServiceTextureId))
5825 .Times(1)
5826 .RetiresOnSaturation();
5827
5828 DestroyStreamTextureCHROMIUM cmd;
5829 cmd.Init(client_texture_id_);
5830 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5831 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5832 EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
5833 EXPECT_EQ(0U, texture_ref->texture()->target());
5834 }
5835
5836 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMInvalid) {
5837 InitDecoder(
5838 "GL_CHROMIUM_stream_texture", // extensions
5839 false, // has alpha
5840 false, // has depth
5841 false, // has stencil
5842 false, // request alpha
5843 false, // request depth
5844 false, // request stencil
5845 true); // bind generates resource
5846
5847 DestroyStreamTextureCHROMIUM cmd; 5814 DestroyStreamTextureCHROMIUM cmd;
5848 cmd.Init(client_texture_id_); 5815 cmd.Init(client_texture_id_);
5849 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5816 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5850 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 5817 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
5851 } 5818 }
5852 5819
5853 TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMBadId) {
5854 InitDecoder(
5855 "GL_CHROMIUM_stream_texture", // extensions
5856 false, // has alpha
5857 false, // has depth
5858 false, // has stencil
5859 false, // request alpha
5860 false, // request depth
5861 false, // request stencil
5862 true); // bind generates resource
5863
5864 DestroyStreamTextureCHROMIUM cmd;
5865 cmd.Init(GL_ZERO);
5866 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5867 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
5868 }
5869
5870 TEST_F(GLES2DecoderManualInitTest, StreamTextureCHROMIUMNullMgr) {
5871 InitDecoder(
5872 "", // extensions
5873 false, // has alpha
5874 false, // has depth
5875 false, // has stencil
5876 false, // request alpha
5877 false, // request depth
5878 false, // request stencil
5879 true); // bind generates resource
5880
5881 CreateStreamTextureCHROMIUM cmd;
5882 cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5883 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
5884 GetGLError(); // ignore internal error
5885
5886 TextureRef* texture_ref = GetTexture(client_texture_id_);
5887 group().texture_manager()->SetStreamTexture(texture_ref, true);
5888
5889 DestroyStreamTextureCHROMIUM cmd2;
5890 cmd2.Init(client_texture_id_);
5891 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd2));
5892 GetGLError(); // ignore internal error
5893 }
5894
5895 TEST_F(GLES2DecoderManualInitTest, ReCreateStreamTextureCHROMIUM) {
5896 const GLuint kObjectId = 123;
5897 InitDecoder(
5898 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5899 false, // has alpha
5900 false, // has depth
5901 false, // has stencil
5902 false, // request alpha
5903 false, // request depth
5904 false, // request stencil
5905 true); // bind generates resource
5906
5907 EXPECT_CALL(*stream_texture_manager(),
5908 DestroyStreamTexture(kServiceTextureId))
5909 .Times(1)
5910 .RetiresOnSaturation();
5911 EXPECT_CALL(*stream_texture_manager(),
5912 CreateStreamTexture(kServiceTextureId, client_texture_id_))
5913 .WillOnce(Return(kObjectId))
5914 .RetiresOnSaturation();
5915
5916 TextureRef* texture_ref = GetTexture(client_texture_id_);
5917 group().texture_manager()->SetStreamTexture(texture_ref, true);
5918
5919 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5920 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5921
5922 DestroyStreamTextureCHROMIUM cmd;
5923 cmd.Init(client_texture_id_);
5924 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5925 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5926 EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
5927
5928 CreateStreamTextureCHROMIUM cmd2;
5929 cmd2.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
5930 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
5931 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5932 EXPECT_TRUE(texture_ref->texture()->IsStreamTexture());
5933
5934 EXPECT_CALL(*stream_texture_manager(),
5935 DestroyStreamTexture(kServiceTextureId))
5936 .Times(1)
5937 .RetiresOnSaturation();
5938 }
5939
5940 TEST_F(GLES2DecoderManualInitTest, ProduceAndConsumeStreamTextureCHROMIUM) {
5941 InitDecoder(
5942 "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
5943 false, // has alpha
5944 false, // has depth
5945 false, // has stencil
5946 false, // request alpha
5947 false, // request depth
5948 false, // request stencil
5949 true); // bind generates resource
5950
5951 TextureRef* texture_ref = GetTexture(client_texture_id_);
5952 group().texture_manager()->SetStreamTexture(texture_ref, true);
5953
5954 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5955
5956 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM];
5957 group().mailbox_manager()->GenerateMailboxName(
5958 reinterpret_cast<MailboxName*>(mailbox));
5959
5960 memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
5961
5962 EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
5963
5964 ProduceTextureCHROMIUM produce_cmd;
5965 produce_cmd.Init(
5966 GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
5967 EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd));
5968 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5969
5970 // Create new texture for consume.
5971 EXPECT_CALL(*gl_, GenTextures(_, _))
5972 .WillOnce(SetArgumentPointee<1>(kNewServiceId))
5973 .RetiresOnSaturation();
5974 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, kNewClientId, kNewServiceId);
5975
5976 // Assigns and binds original service size texture ID.
5977 EXPECT_CALL(*gl_, DeleteTextures(1, _))
5978 .Times(1)
5979 .RetiresOnSaturation();
5980 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kServiceTextureId))
5981 .Times(1)
5982 .RetiresOnSaturation();
5983
5984 // Shared mem got clobbered from GetError() above.
5985 memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
5986 ConsumeTextureCHROMIUM consume_cmd;
5987 consume_cmd.Init(
5988 GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
5989 EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd));
5990 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5991
5992 // Service ID is restored.
5993 EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
5994
5995 EXPECT_CALL(*stream_texture_manager(),
5996 DestroyStreamTexture(kServiceTextureId))
5997 .Times(1)
5998 .RetiresOnSaturation();
5999 }
6000
6001 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) { 5820 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
6002 InitDecoder( 5821 InitDecoder(
6003 "GL_ARB_texture_rectangle", // extensions 5822 "GL_ARB_texture_rectangle", // extensions
6004 false, // has alpha 5823 false, // has alpha
6005 false, // has depth 5824 false, // has depth
6006 false, // has stencil 5825 false, // has stencil
6007 false, // request alpha 5826 false, // request alpha
6008 false, // request depth 5827 false, // request depth
6009 false, // request stencil 5828 false, // request stencil
6010 true); // bind generates resource 5829 true); // bind generates resource
(...skipping 2650 matching lines...) Expand 10 before | Expand all | Expand 10 after
8661 // TODO(gman): TexImage2DImmediate 8480 // TODO(gman): TexImage2DImmediate
8662 8481
8663 // TODO(gman): TexSubImage2DImmediate 8482 // TODO(gman): TexSubImage2DImmediate
8664 8483
8665 // TODO(gman): UseProgram 8484 // TODO(gman): UseProgram
8666 8485
8667 // TODO(gman): SwapBuffers 8486 // TODO(gman): SwapBuffers
8668 8487
8669 } // namespace gles2 8488 } // namespace gles2
8670 } // namespace gpu 8489 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_mock.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698