OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS | 686 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS |
687 cmd.Init(client_program_id_); | 687 cmd.Init(client_program_id_); |
688 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 688 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
689 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 689 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
690 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS | 690 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS |
691 } | 691 } |
692 | 692 |
693 TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) { | 693 TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) { |
694 const uint32 kInBucketId = 123; | 694 const uint32 kInBucketId = 123; |
695 const uint32 kOutBucketId = 125; | 695 const uint32 kOutBucketId = 125; |
696 const char kSource[] = "hello"; | 696 const char kSource0[] = "hello"; |
697 const uint32 kSourceSize = sizeof(kSource) - 1; | 697 const char* kSource[] = { kSource0 }; |
698 SetBucketAsCString(kInBucketId, kSource); | 698 const char kValidStrEnd = 0; |
| 699 SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kValidStrEnd); |
699 ShaderSourceBucket cmd; | 700 ShaderSourceBucket cmd; |
700 cmd.Init(client_shader_id_, kInBucketId); | 701 cmd.Init(client_shader_id_, kInBucketId); |
701 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 702 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
702 ClearSharedMemory(); | 703 ClearSharedMemory(); |
703 GetShaderSource get_cmd; | 704 GetShaderSource get_cmd; |
704 get_cmd.Init(client_shader_id_, kOutBucketId); | 705 get_cmd.Init(client_shader_id_, kOutBucketId); |
705 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); | 706 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); |
706 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kOutBucketId); | 707 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kOutBucketId); |
707 ASSERT_TRUE(bucket != NULL); | 708 ASSERT_TRUE(bucket != NULL); |
708 EXPECT_EQ(kSourceSize + 1, bucket->size()); | 709 EXPECT_EQ(sizeof(kSource0), bucket->size()); |
709 EXPECT_EQ( | 710 EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), |
710 0, memcmp(bucket->GetData(0, bucket->size()), kSource, bucket->size())); | 711 kSource0, bucket->size())); |
711 } | 712 } |
712 | 713 |
713 TEST_P(GLES2DecoderTest, ShaderSourceBucketInvalidArgs) { | 714 TEST_P(GLES2DecoderTest, ShaderSourceBucketInvalidArgs) { |
714 const uint32 kBucketId = 123; | 715 const uint32 kBucketId = 123; |
715 const char kSource[] = "hello"; | 716 const char kSource0[] = "hello"; |
716 const uint32 kSourceSize = sizeof(kSource) - 1; | 717 const char* kSource[] = { kSource0 }; |
717 memcpy(shared_memory_address_, kSource, kSourceSize); | 718 const char kValidStrEnd = 0; |
718 ShaderSourceBucket cmd; | 719 ShaderSourceBucket cmd; |
719 // Test no bucket. | 720 // Test no bucket. |
720 cmd.Init(client_texture_id_, kBucketId); | 721 cmd.Init(client_shader_id_, kBucketId); |
721 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 722 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
722 // Test invalid client. | 723 // Test invalid client. |
723 SetBucketAsCString(kBucketId, kSource); | 724 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); |
724 cmd.Init(kInvalidClientId, kBucketId); | 725 cmd.Init(kInvalidClientId, kBucketId); |
725 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
726 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 727 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
727 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS | 728 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS |
728 SetBucketAsCString(kBucketId, kSource); | 729 SetBucketAsCStrings(kBucketId, 1, kSource); |
729 cmd.Init( | 730 cmd.Init( |
730 client_program_id_, kBucketId); | 731 client_program_id_, kBucketId); |
731 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 732 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
732 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 733 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
733 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS | 734 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS |
734 } | 735 } |
735 | 736 |
736 TEST_P(GLES2DecoderTest, ShaderSourceStripComments) { | 737 TEST_P(GLES2DecoderTest, ShaderSourceStripComments) { |
737 const uint32 kInBucketId = 123; | 738 const uint32 kInBucketId = 123; |
738 const char kSource[] = "hello/*te\ast*/world//a\ab"; | 739 const char kSource0[] = "hello/*te\ast*/world//a\ab"; |
739 SetBucketAsCString(kInBucketId, kSource); | 740 const char* kSource[] = { kSource0 }; |
| 741 const char kValidStrEnd = 0; |
| 742 SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kValidStrEnd); |
740 ShaderSourceBucket cmd; | 743 ShaderSourceBucket cmd; |
741 cmd.Init(client_shader_id_, kInBucketId); | 744 cmd.Init(client_shader_id_, kInBucketId); |
742 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 745 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
743 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 746 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
744 } | 747 } |
745 | 748 |
| 749 TEST_P(GLES2DecoderTest, ShaderSourceInvalidHeader) { |
| 750 const uint32 kInBucketId = 123; |
| 751 const char kSource0[] = "hello"; |
| 752 const char* kSource[] = { kSource0 }; |
| 753 const char kValidStrEnd = 0; |
| 754 const GLsizei kCount = 1; |
| 755 const GLsizei kTests[] = { |
| 756 kCount + 1, |
| 757 0, |
| 758 std::numeric_limits<GLsizei>::max(), |
| 759 -1, |
| 760 kCount |
| 761 }; |
| 762 size_t kTestCount = 5; |
| 763 for (size_t ii = 0; ii < kTestCount; ++ii) { |
| 764 SetBucketAsCStrings(kInBucketId, 1, kSource, kTests[ii], kValidStrEnd); |
| 765 ShaderSourceBucket cmd; |
| 766 cmd.Init(client_shader_id_, kInBucketId); |
| 767 if (kTests[ii] == kCount) { |
| 768 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 769 } else { |
| 770 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); |
| 771 } |
| 772 } |
| 773 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 774 } |
| 775 |
| 776 TEST_P(GLES2DecoderTest, ShaderSourceInvalidStringEnding) { |
| 777 const uint32 kInBucketId = 123; |
| 778 const char kSource0[] = "hello"; |
| 779 const char* kSource[] = { kSource0 }; |
| 780 const char kInvalidStrEnd = '*'; |
| 781 SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kInvalidStrEnd); |
| 782 ShaderSourceBucket cmd; |
| 783 cmd.Init(client_shader_id_, kInBucketId); |
| 784 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); |
| 785 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 786 } |
| 787 |
746 TEST_P(GLES2DecoderWithShaderTest, Uniform1iValidArgs) { | 788 TEST_P(GLES2DecoderWithShaderTest, Uniform1iValidArgs) { |
747 EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2)); | 789 EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2)); |
748 Uniform1i cmd; | 790 Uniform1i cmd; |
749 cmd.Init(kUniform1FakeLocation, 2); | 791 cmd.Init(kUniform1FakeLocation, 2); |
750 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 792 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
751 } | 793 } |
752 | 794 |
753 TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) { | 795 TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) { |
754 Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>(); | 796 Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>(); |
755 EXPECT_CALL(*gl_, | 797 EXPECT_CALL(*gl_, |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 } | 1078 } |
1037 | 1079 |
1038 // TODO(gman): DeleteProgram | 1080 // TODO(gman): DeleteProgram |
1039 | 1081 |
1040 // TODO(gman): UseProgram | 1082 // TODO(gman): UseProgram |
1041 | 1083 |
1042 // TODO(gman): DeleteShader | 1084 // TODO(gman): DeleteShader |
1043 | 1085 |
1044 } // namespace gles2 | 1086 } // namespace gles2 |
1045 } // namespace gpu | 1087 } // namespace gpu |
OLD | NEW |