OLD | NEW |
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 // Tests for GLES2Implementation. | 5 // Tests for GLES2Implementation. |
6 | 6 |
7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 EXPECT_EQ(range4[0], 3); | 894 EXPECT_EQ(range4[0], 3); |
895 EXPECT_EQ(range4[1], 5); | 895 EXPECT_EQ(range4[1], 5); |
896 EXPECT_EQ(precision4, 7); | 896 EXPECT_EQ(precision4, 7); |
897 } | 897 } |
898 | 898 |
899 TEST_F(GLES2ImplementationTest, ShaderSource) { | 899 TEST_F(GLES2ImplementationTest, ShaderSource) { |
900 const uint32 kBucketId = GLES2Implementation::kResultBucketId; | 900 const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
901 const GLuint kShaderId = 456; | 901 const GLuint kShaderId = 456; |
902 const char* kString1 = "foobar"; | 902 const char* kString1 = "foobar"; |
903 const char* kString2 = "barfoo"; | 903 const char* kString2 = "barfoo"; |
904 const size_t kString1Size = strlen(kString1); | 904 const size_t kString1Size = strlen(kString1) + 1; |
905 const size_t kString2Size = strlen(kString2); | 905 const size_t kString2Size = strlen(kString2) + 1; |
906 const size_t kString3Size = 1; // Want the NULL; | 906 const size_t kHeaderSize = sizeof(GLint) * 3; |
907 const size_t kSourceSize = kString1Size + kString2Size + kString3Size; | 907 const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size; |
| 908 const size_t kPaddedHeaderSize = |
| 909 transfer_buffer_->RoundToAlignment(kHeaderSize); |
908 const size_t kPaddedString1Size = | 910 const size_t kPaddedString1Size = |
909 transfer_buffer_->RoundToAlignment(kString1Size); | 911 transfer_buffer_->RoundToAlignment(kString1Size); |
910 const size_t kPaddedString2Size = | 912 const size_t kPaddedString2Size = |
911 transfer_buffer_->RoundToAlignment(kString2Size); | 913 transfer_buffer_->RoundToAlignment(kString2Size); |
912 const size_t kPaddedString3Size = | |
913 transfer_buffer_->RoundToAlignment(kString3Size); | |
914 struct Cmds { | 914 struct Cmds { |
915 cmd::SetBucketSize set_bucket_size; | 915 cmd::SetBucketSize set_bucket_size; |
| 916 cmd::SetBucketData set_bucket_header; |
| 917 cmd::SetToken set_token1; |
916 cmd::SetBucketData set_bucket_data1; | 918 cmd::SetBucketData set_bucket_data1; |
917 cmd::SetToken set_token1; | 919 cmd::SetToken set_token2; |
918 cmd::SetBucketData set_bucket_data2; | 920 cmd::SetBucketData set_bucket_data2; |
919 cmd::SetToken set_token2; | |
920 cmd::SetBucketData set_bucket_data3; | |
921 cmd::SetToken set_token3; | 921 cmd::SetToken set_token3; |
922 cmds::ShaderSourceBucket shader_source_bucket; | 922 cmds::ShaderSourceBucket shader_source_bucket; |
923 cmd::SetBucketSize clear_bucket_size; | 923 cmd::SetBucketSize clear_bucket_size; |
924 }; | 924 }; |
925 | 925 |
| 926 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); |
926 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size); | 927 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size); |
927 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size); | 928 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size); |
928 ExpectedMemoryInfo mem3 = GetExpectedMemory(kPaddedString3Size); | |
929 | 929 |
930 Cmds expected; | 930 Cmds expected; |
931 expected.set_bucket_size.Init(kBucketId, kSourceSize); | 931 expected.set_bucket_size.Init(kBucketId, kSourceSize); |
| 932 expected.set_bucket_header.Init( |
| 933 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); |
| 934 expected.set_token1.Init(GetNextToken()); |
932 expected.set_bucket_data1.Init( | 935 expected.set_bucket_data1.Init( |
933 kBucketId, 0, kString1Size, mem1.id, mem1.offset); | 936 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset); |
934 expected.set_token1.Init(GetNextToken()); | 937 expected.set_token2.Init(GetNextToken()); |
935 expected.set_bucket_data2.Init( | 938 expected.set_bucket_data2.Init( |
936 kBucketId, kString1Size, kString2Size, mem2.id, mem2.offset); | 939 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id, |
937 expected.set_token2.Init(GetNextToken()); | 940 mem2.offset); |
938 expected.set_bucket_data3.Init( | |
939 kBucketId, kString1Size + kString2Size, | |
940 kString3Size, mem3.id, mem3.offset); | |
941 expected.set_token3.Init(GetNextToken()); | 941 expected.set_token3.Init(GetNextToken()); |
942 expected.shader_source_bucket.Init(kShaderId, kBucketId); | 942 expected.shader_source_bucket.Init(kShaderId, kBucketId); |
943 expected.clear_bucket_size.Init(kBucketId, 0); | 943 expected.clear_bucket_size.Init(kBucketId, 0); |
944 const char* strings[] = { | 944 const char* kStrings[] = { |
945 kString1, | 945 kString1, |
946 kString2, | 946 kString2, |
947 }; | 947 }; |
948 gl_->ShaderSource(kShaderId, 2, strings, NULL); | 948 gl_->ShaderSource(kShaderId, 2, kStrings, NULL); |
949 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 949 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
950 } | 950 } |
951 | 951 |
| 952 TEST_F(GLES2ImplementationTest, ShaderSourceWithLength) { |
| 953 const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
| 954 const GLuint kShaderId = 456; |
| 955 const char* kString = "foobar******"; |
| 956 const size_t kStringSize = 6; // We only need "foobar". |
| 957 const size_t kHeaderSize = sizeof(GLint) * 2; |
| 958 const size_t kSourceSize = kHeaderSize + kStringSize + 1; |
| 959 const size_t kPaddedHeaderSize = |
| 960 transfer_buffer_->RoundToAlignment(kHeaderSize); |
| 961 const size_t kPaddedStringSize = |
| 962 transfer_buffer_->RoundToAlignment(kStringSize + 1); |
| 963 |
| 964 struct Cmds { |
| 965 cmd::SetBucketSize set_bucket_size; |
| 966 cmd::SetBucketData set_bucket_header; |
| 967 cmd::SetToken set_token1; |
| 968 cmd::SetBucketData set_bucket_data; |
| 969 cmd::SetToken set_token2; |
| 970 cmds::ShaderSourceBucket shader_source_bucket; |
| 971 cmd::SetBucketSize clear_bucket_size; |
| 972 }; |
| 973 |
| 974 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); |
| 975 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize); |
| 976 |
| 977 Cmds expected; |
| 978 expected.set_bucket_size.Init(kBucketId, kSourceSize); |
| 979 expected.set_bucket_header.Init( |
| 980 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); |
| 981 expected.set_token1.Init(GetNextToken()); |
| 982 expected.set_bucket_data.Init( |
| 983 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset); |
| 984 expected.set_token2.Init(GetNextToken()); |
| 985 expected.shader_source_bucket.Init(kShaderId, kBucketId); |
| 986 expected.clear_bucket_size.Init(kBucketId, 0); |
| 987 const char* kStrings[] = { kString }; |
| 988 const GLint kLength[] = { kStringSize }; |
| 989 gl_->ShaderSource(kShaderId, 1, kStrings, kLength); |
| 990 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
| 991 } |
| 992 |
952 TEST_F(GLES2ImplementationTest, GetShaderSource) { | 993 TEST_F(GLES2ImplementationTest, GetShaderSource) { |
953 const uint32 kBucketId = GLES2Implementation::kResultBucketId; | 994 const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
954 const GLuint kShaderId = 456; | 995 const GLuint kShaderId = 456; |
955 const Str7 kString = {"foobar"}; | 996 const Str7 kString = {"foobar"}; |
956 const char kBad = 0x12; | 997 const char kBad = 0x12; |
957 struct Cmds { | 998 struct Cmds { |
958 cmd::SetBucketSize set_bucket_size1; | 999 cmd::SetBucketSize set_bucket_size1; |
959 cmds::GetShaderSource get_shader_source; | 1000 cmds::GetShaderSource get_shader_source; |
960 cmd::GetBucketStart get_bucket_start; | 1001 cmd::GetBucketStart get_bucket_start; |
961 cmd::SetToken set_token1; | 1002 cmd::SetToken set_token1; |
(...skipping 2545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3507 EXPECT_EQ(GL_NO_ERROR, CheckError()); | 3548 EXPECT_EQ(GL_NO_ERROR, CheckError()); |
3508 | 3549 |
3509 gl_->TraceEndCHROMIUM(); | 3550 gl_->TraceEndCHROMIUM(); |
3510 EXPECT_EQ(GL_NO_ERROR, CheckError()); | 3551 EXPECT_EQ(GL_NO_ERROR, CheckError()); |
3511 | 3552 |
3512 // No more corresponding begin tracer marker should error. | 3553 // No more corresponding begin tracer marker should error. |
3513 gl_->TraceEndCHROMIUM(); | 3554 gl_->TraceEndCHROMIUM(); |
3514 EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); | 3555 EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); |
3515 } | 3556 } |
3516 | 3557 |
| 3558 TEST_F(GLES2ImplementationTest, IsEnabled) { |
| 3559 // If we use a valid enum, its state is cached on client side, so no command |
| 3560 // is actually generated, and this test will fail. |
| 3561 // TODO(zmo): it seems we never need the command. Maybe remove it. |
| 3562 GLenum kCap = 1; |
| 3563 struct Cmds { |
| 3564 cmds::IsEnabled cmd; |
| 3565 }; |
| 3566 |
| 3567 Cmds expected; |
| 3568 ExpectedMemoryInfo result1 = |
| 3569 GetExpectedResultMemory(sizeof(cmds::IsEnabled::Result)); |
| 3570 expected.cmd.Init(kCap, result1.id, result1.offset); |
| 3571 |
| 3572 EXPECT_CALL(*command_buffer(), OnFlush()) |
| 3573 .WillOnce(SetMemory(result1.ptr, uint32_t(kCap))) |
| 3574 .RetiresOnSaturation(); |
| 3575 |
| 3576 GLboolean result = gl_->IsEnabled(kCap); |
| 3577 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
| 3578 EXPECT_TRUE(result); |
| 3579 } |
| 3580 |
3517 TEST_F(GLES2ImplementationManualInitTest, LoseContextOnOOM) { | 3581 TEST_F(GLES2ImplementationManualInitTest, LoseContextOnOOM) { |
3518 ContextInitOptions init_options; | 3582 ContextInitOptions init_options; |
3519 init_options.lose_context_when_out_of_memory = true; | 3583 init_options.lose_context_when_out_of_memory = true; |
3520 ASSERT_TRUE(Initialize(init_options)); | 3584 ASSERT_TRUE(Initialize(init_options)); |
3521 | 3585 |
3522 struct Cmds { | 3586 struct Cmds { |
3523 cmds::LoseContextCHROMIUM cmd; | 3587 cmds::LoseContextCHROMIUM cmd; |
3524 }; | 3588 }; |
3525 | 3589 |
3526 GLsizei max = std::numeric_limits<GLsizei>::max(); | 3590 GLsizei max = std::numeric_limits<GLsizei>::max(); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3566 TEST_F(GLES2ImplementationManualInitTest, FailInitOnTransferBufferFail) { | 3630 TEST_F(GLES2ImplementationManualInitTest, FailInitOnTransferBufferFail) { |
3567 ContextInitOptions init_options; | 3631 ContextInitOptions init_options; |
3568 init_options.transfer_buffer_initialize_fail = true; | 3632 init_options.transfer_buffer_initialize_fail = true; |
3569 EXPECT_FALSE(Initialize(init_options)); | 3633 EXPECT_FALSE(Initialize(init_options)); |
3570 } | 3634 } |
3571 | 3635 |
3572 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" | 3636 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" |
3573 | 3637 |
3574 } // namespace gles2 | 3638 } // namespace gles2 |
3575 } // namespace gpu | 3639 } // namespace gpu |
OLD | NEW |