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 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 cmd.Init(kInvalidClientId); | 684 cmd.Init(kInvalidClientId); |
685 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 685 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
686 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 686 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
687 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS | 687 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS |
688 cmd.Init(client_program_id_); | 688 cmd.Init(client_program_id_); |
689 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 689 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
690 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 690 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
691 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS | 691 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS |
692 } | 692 } |
693 | 693 |
694 TEST_P(GLES2DecoderTest, ShaderSourceAndGetShaderSourceValidArgs) { | |
695 const uint32 kBucketId = 123; | |
696 const char kSource[] = "hello"; | |
697 const uint32 kSourceSize = sizeof(kSource) - 1; | |
698 memcpy(shared_memory_address_, kSource, kSourceSize); | |
699 ShaderSource cmd; | |
700 cmd.Init( | |
701 client_shader_id_, kSharedMemoryId, kSharedMemoryOffset, kSourceSize); | |
702 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
703 memset(shared_memory_address_, 0, kSourceSize); | |
704 GetShaderSource get_cmd; | |
705 get_cmd.Init(client_shader_id_, kBucketId); | |
706 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); | |
707 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); | |
708 ASSERT_TRUE(bucket != NULL); | |
709 EXPECT_EQ(kSourceSize + 1, bucket->size()); | |
710 EXPECT_EQ( | |
711 0, memcmp(bucket->GetData(0, bucket->size()), kSource, bucket->size())); | |
712 } | |
713 | |
714 TEST_P(GLES2DecoderTest, ShaderSourceInvalidArgs) { | |
715 const char kSource[] = "hello"; | |
716 const uint32 kSourceSize = sizeof(kSource) - 1; | |
717 memcpy(shared_memory_address_, kSource, kSourceSize); | |
718 ShaderSource cmd; | |
719 cmd.Init(kInvalidClientId, kSharedMemoryId, kSharedMemoryOffset, kSourceSize); | |
720 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
721 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
722 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS | |
723 cmd.Init( | |
724 client_program_id_, kSharedMemoryId, kSharedMemoryOffset, kSourceSize); | |
725 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
726 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | |
727 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS | |
728 cmd.Init(client_shader_id_, | |
729 kInvalidSharedMemoryId, | |
730 kSharedMemoryOffset, | |
731 kSourceSize); | |
732 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
733 cmd.Init(client_shader_id_, | |
734 kSharedMemoryId, | |
735 kInvalidSharedMemoryOffset, | |
736 kSourceSize); | |
737 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
738 cmd.Init(client_shader_id_, | |
739 kSharedMemoryId, | |
740 kSharedMemoryOffset, | |
741 kSharedBufferSize); | |
742 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
743 } | |
744 | |
745 TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) { | 694 TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) { |
746 const uint32 kInBucketId = 123; | 695 const uint32 kInBucketId = 123; |
747 const uint32 kOutBucketId = 125; | 696 const uint32 kOutBucketId = 125; |
748 const char kSource[] = "hello"; | 697 const char kSource[] = "hello"; |
749 const uint32 kSourceSize = sizeof(kSource) - 1; | 698 const uint32 kSourceSize = sizeof(kSource) - 1; |
750 SetBucketAsCString(kInBucketId, kSource); | 699 SetBucketAsCString(kInBucketId, kSource); |
751 ShaderSourceBucket cmd; | 700 ShaderSourceBucket cmd; |
752 cmd.Init(client_shader_id_, kInBucketId); | 701 cmd.Init(client_shader_id_, kInBucketId); |
753 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 702 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
754 ClearSharedMemory(); | 703 ClearSharedMemory(); |
(...skipping 14 matching lines...) Expand all Loading... |
769 memcpy(shared_memory_address_, kSource, kSourceSize); | 718 memcpy(shared_memory_address_, kSource, kSourceSize); |
770 ShaderSourceBucket cmd; | 719 ShaderSourceBucket cmd; |
771 // Test no bucket. | 720 // Test no bucket. |
772 cmd.Init(client_texture_id_, kBucketId); | 721 cmd.Init(client_texture_id_, kBucketId); |
773 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 722 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
774 // Test invalid client. | 723 // Test invalid client. |
775 SetBucketAsCString(kBucketId, kSource); | 724 SetBucketAsCString(kBucketId, kSource); |
776 cmd.Init(kInvalidClientId, kBucketId); | 725 cmd.Init(kInvalidClientId, kBucketId); |
777 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
778 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 727 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 728 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS |
| 729 SetBucketAsCString(kBucketId, kSource); |
| 730 cmd.Init( |
| 731 client_program_id_, kBucketId); |
| 732 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 733 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 734 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS |
779 } | 735 } |
780 | 736 |
781 TEST_P(GLES2DecoderTest, ShaderSourceStripComments) { | 737 TEST_P(GLES2DecoderTest, ShaderSourceStripComments) { |
782 const uint32 kInBucketId = 123; | 738 const uint32 kInBucketId = 123; |
783 const char kSource[] = "hello/*te\ast*/world//a\ab"; | 739 const char kSource[] = "hello/*te\ast*/world//a\ab"; |
784 SetBucketAsCString(kInBucketId, kSource); | 740 SetBucketAsCString(kInBucketId, kSource); |
785 ShaderSourceBucket cmd; | 741 ShaderSourceBucket cmd; |
786 cmd.Init(client_shader_id_, kInBucketId); | 742 cmd.Init(client_shader_id_, kInBucketId); |
787 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 743 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
788 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 744 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 | 794 |
839 TEST_P(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) { | 795 TEST_P(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) { |
840 EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0); | 796 EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0); |
841 Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>(); | 797 Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>(); |
842 GLint temp[] = {kNumTextureUnits}; | 798 GLint temp[] = {kNumTextureUnits}; |
843 cmd.Init(kUniform1FakeLocation, 1, &temp[0]); | 799 cmd.Init(kUniform1FakeLocation, 1, &temp[0]); |
844 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); | 800 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); |
845 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 801 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
846 } | 802 } |
847 | 803 |
848 TEST_P(GLES2DecoderTest, BindAttribLocation) { | |
849 const GLint kLocation = 2; | |
850 const char* kName = "testing"; | |
851 const uint32 kNameSize = strlen(kName); | |
852 EXPECT_CALL(*gl_, | |
853 BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) | |
854 .Times(1); | |
855 memcpy(shared_memory_address_, kName, kNameSize); | |
856 BindAttribLocation cmd; | |
857 cmd.Init(client_program_id_, | |
858 kLocation, | |
859 kSharedMemoryId, | |
860 kSharedMemoryOffset, | |
861 kNameSize); | |
862 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
863 } | |
864 | |
865 TEST_P(GLES2DecoderTest, BindAttribLocationInvalidArgs) { | |
866 const GLint kLocation = 2; | |
867 const char* kName = "testing"; | |
868 const char* kBadName = "test\aing"; | |
869 const uint32 kNameSize = strlen(kName); | |
870 const uint32 kBadNameSize = strlen(kBadName); | |
871 EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0); | |
872 memcpy(shared_memory_address_, kName, kNameSize); | |
873 BindAttribLocation cmd; | |
874 cmd.Init(kInvalidClientId, | |
875 kLocation, | |
876 kSharedMemoryId, | |
877 kSharedMemoryOffset, | |
878 kNameSize); | |
879 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
880 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
881 cmd.Init(client_program_id_, | |
882 kLocation, | |
883 kInvalidSharedMemoryId, | |
884 kSharedMemoryOffset, | |
885 kNameSize); | |
886 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
887 cmd.Init(client_program_id_, | |
888 kLocation, | |
889 kSharedMemoryId, | |
890 kInvalidSharedMemoryOffset, | |
891 kNameSize); | |
892 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
893 cmd.Init(client_program_id_, | |
894 kLocation, | |
895 kSharedMemoryId, | |
896 kSharedMemoryOffset, | |
897 kSharedBufferSize); | |
898 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
899 memcpy(shared_memory_address_, kBadName, kBadNameSize); | |
900 cmd.Init(client_program_id_, | |
901 kLocation, | |
902 kSharedMemoryId, | |
903 kSharedMemoryOffset, | |
904 kBadNameSize); | |
905 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
906 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
907 } | |
908 | |
909 TEST_P(GLES2DecoderTest, BindAttribLocationBucket) { | 804 TEST_P(GLES2DecoderTest, BindAttribLocationBucket) { |
910 const uint32 kBucketId = 123; | 805 const uint32 kBucketId = 123; |
911 const GLint kLocation = 2; | 806 const GLint kLocation = 2; |
912 const char* kName = "testing"; | 807 const char* kName = "testing"; |
913 EXPECT_CALL(*gl_, | 808 EXPECT_CALL(*gl_, |
914 BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) | 809 BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) |
915 .Times(1); | 810 .Times(1); |
916 SetBucketAsCString(kBucketId, kName); | 811 SetBucketAsCString(kBucketId, kName); |
917 BindAttribLocationBucket cmd; | 812 BindAttribLocationBucket cmd; |
918 cmd.Init(client_program_id_, kLocation, kBucketId); | 813 cmd.Init(client_program_id_, kLocation, kBucketId); |
(...skipping 14 matching lines...) Expand all Loading... |
933 cmd.Init(client_program_id_, kLocation, kBucketId); | 828 cmd.Init(client_program_id_, kLocation, kBucketId); |
934 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 829 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
935 // Check bad program id | 830 // Check bad program id |
936 SetBucketAsCString(kBucketId, kName); | 831 SetBucketAsCString(kBucketId, kName); |
937 cmd.Init(kInvalidClientId, kLocation, kBucketId); | 832 cmd.Init(kInvalidClientId, kLocation, kBucketId); |
938 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 833 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
939 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 834 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
940 } | 835 } |
941 | 836 |
942 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocation) { | 837 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocation) { |
943 const uint32 kNameSize = strlen(kAttrib2Name); | |
944 const char* kNonExistentName = "foobar"; | |
945 const uint32 kNonExistentNameSize = strlen(kNonExistentName); | |
946 typedef GetAttribLocation::Result Result; | |
947 Result* result = GetSharedMemoryAs<Result*>(); | |
948 *result = -1; | |
949 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | |
950 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | |
951 memcpy(name, kAttrib2Name, kNameSize); | |
952 GetAttribLocation cmd; | |
953 cmd.Init(client_program_id_, | |
954 kSharedMemoryId, | |
955 kNameOffset, | |
956 kSharedMemoryId, | |
957 kSharedMemoryOffset, | |
958 kNameSize); | |
959 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
960 EXPECT_EQ(kAttrib2Location, *result); | |
961 *result = -1; | |
962 memcpy(name, kNonExistentName, kNonExistentNameSize); | |
963 cmd.Init(client_program_id_, | |
964 kSharedMemoryId, | |
965 kNameOffset, | |
966 kSharedMemoryId, | |
967 kSharedMemoryOffset, | |
968 kNonExistentNameSize); | |
969 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
970 EXPECT_EQ(-1, *result); | |
971 } | |
972 | |
973 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) { | |
974 const uint32 kNameSize = strlen(kAttrib2Name); | |
975 const char* kBadName = "foo\abar"; | |
976 const uint32 kBadNameSize = strlen(kBadName); | |
977 typedef GetAttribLocation::Result Result; | |
978 Result* result = GetSharedMemoryAs<Result*>(); | |
979 *result = -1; | |
980 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | |
981 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | |
982 memcpy(name, kAttrib2Name, kNameSize); | |
983 GetAttribLocation cmd; | |
984 cmd.Init(kInvalidClientId, | |
985 kSharedMemoryId, | |
986 kNameOffset, | |
987 kSharedMemoryId, | |
988 kSharedMemoryOffset, | |
989 kNameSize); | |
990 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
991 EXPECT_EQ(-1, *result); | |
992 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
993 *result = -1; | |
994 cmd.Init(client_program_id_, | |
995 kInvalidSharedMemoryId, | |
996 kNameOffset, | |
997 kSharedMemoryId, | |
998 kSharedMemoryOffset, | |
999 kNameSize); | |
1000 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1001 EXPECT_EQ(-1, *result); | |
1002 cmd.Init(client_program_id_, | |
1003 kSharedMemoryId, | |
1004 kInvalidSharedMemoryOffset, | |
1005 kSharedMemoryId, | |
1006 kSharedMemoryOffset, | |
1007 kNameSize); | |
1008 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1009 EXPECT_EQ(-1, *result); | |
1010 cmd.Init(client_program_id_, | |
1011 kSharedMemoryId, | |
1012 kNameOffset, | |
1013 kInvalidSharedMemoryId, | |
1014 kSharedMemoryOffset, | |
1015 kNameSize); | |
1016 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1017 EXPECT_EQ(-1, *result); | |
1018 cmd.Init(client_program_id_, | |
1019 kSharedMemoryId, | |
1020 kNameOffset, | |
1021 kSharedMemoryId, | |
1022 kInvalidSharedMemoryOffset, | |
1023 kNameSize); | |
1024 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1025 EXPECT_EQ(-1, *result); | |
1026 cmd.Init(client_program_id_, | |
1027 kSharedMemoryId, | |
1028 kNameOffset, | |
1029 kSharedMemoryId, | |
1030 kSharedMemoryOffset, | |
1031 kSharedBufferSize); | |
1032 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1033 EXPECT_EQ(-1, *result); | |
1034 memcpy(name, kBadName, kBadNameSize); | |
1035 cmd.Init(client_program_id_, | |
1036 kSharedMemoryId, | |
1037 kNameOffset, | |
1038 kSharedMemoryId, | |
1039 kSharedMemoryOffset, | |
1040 kBadNameSize); | |
1041 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
1042 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
1043 } | |
1044 | |
1045 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationBucket) { | |
1046 const uint32 kBucketId = 123; | 838 const uint32 kBucketId = 123; |
1047 const char* kNonExistentName = "foobar"; | 839 const char* kNonExistentName = "foobar"; |
1048 typedef GetAttribLocationBucket::Result Result; | 840 typedef GetAttribLocation::Result Result; |
1049 Result* result = GetSharedMemoryAs<Result*>(); | 841 Result* result = GetSharedMemoryAs<Result*>(); |
1050 SetBucketAsCString(kBucketId, kAttrib2Name); | 842 SetBucketAsCString(kBucketId, kAttrib2Name); |
1051 *result = -1; | 843 *result = -1; |
1052 GetAttribLocationBucket cmd; | 844 GetAttribLocation cmd; |
1053 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 845 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1054 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 846 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1055 EXPECT_EQ(kAttrib2Location, *result); | 847 EXPECT_EQ(kAttrib2Location, *result); |
1056 SetBucketAsCString(kBucketId, kNonExistentName); | 848 SetBucketAsCString(kBucketId, kNonExistentName); |
1057 *result = -1; | 849 *result = -1; |
1058 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 850 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1059 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 851 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1060 EXPECT_EQ(-1, *result); | 852 EXPECT_EQ(-1, *result); |
1061 } | 853 } |
1062 | 854 |
1063 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationBucketInvalidArgs) { | 855 TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) { |
1064 const uint32 kBucketId = 123; | 856 const uint32 kBucketId = 123; |
1065 typedef GetAttribLocationBucket::Result Result; | 857 typedef GetAttribLocation::Result Result; |
1066 Result* result = GetSharedMemoryAs<Result*>(); | 858 Result* result = GetSharedMemoryAs<Result*>(); |
1067 *result = -1; | 859 *result = -1; |
1068 GetAttribLocationBucket cmd; | 860 GetAttribLocation cmd; |
1069 // Check no bucket | 861 // Check no bucket |
1070 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 862 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1071 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 863 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1072 EXPECT_EQ(-1, *result); | 864 EXPECT_EQ(-1, *result); |
1073 // Check bad program id. | 865 // Check bad program id. |
1074 SetBucketAsCString(kBucketId, kAttrib2Name); | 866 SetBucketAsCString(kBucketId, kAttrib2Name); |
1075 cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 867 cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1076 *result = -1; | 868 *result = -1; |
1077 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 869 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1078 EXPECT_EQ(-1, *result); | 870 EXPECT_EQ(-1, *result); |
1079 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 871 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1080 // Check bad memory | 872 // Check bad memory |
1081 cmd.Init(client_program_id_, | 873 cmd.Init(client_program_id_, |
1082 kBucketId, | 874 kBucketId, |
1083 kInvalidSharedMemoryId, | 875 kInvalidSharedMemoryId, |
1084 kSharedMemoryOffset); | 876 kSharedMemoryOffset); |
1085 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 877 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1086 cmd.Init(client_program_id_, | 878 cmd.Init(client_program_id_, |
1087 kBucketId, | 879 kBucketId, |
1088 kSharedMemoryId, | 880 kSharedMemoryId, |
1089 kInvalidSharedMemoryOffset); | 881 kInvalidSharedMemoryOffset); |
1090 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 882 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1091 } | 883 } |
1092 | 884 |
1093 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) { | 885 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) { |
1094 const uint32 kNameSize = strlen(kUniform2Name); | |
1095 const char* kNonExistentName = "foobar"; | |
1096 const uint32 kNonExistentNameSize = strlen(kNonExistentName); | |
1097 typedef GetUniformLocation::Result Result; | |
1098 Result* result = GetSharedMemoryAs<Result*>(); | |
1099 *result = -1; | |
1100 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | |
1101 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | |
1102 memcpy(name, kUniform2Name, kNameSize); | |
1103 GetUniformLocation cmd; | |
1104 cmd.Init(client_program_id_, | |
1105 kSharedMemoryId, | |
1106 kNameOffset, | |
1107 kSharedMemoryId, | |
1108 kSharedMemoryOffset, | |
1109 kNameSize); | |
1110 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
1111 EXPECT_EQ(kUniform2FakeLocation, *result); | |
1112 memcpy(name, kNonExistentName, kNonExistentNameSize); | |
1113 *result = -1; | |
1114 cmd.Init(client_program_id_, | |
1115 kSharedMemoryId, | |
1116 kNameOffset, | |
1117 kSharedMemoryId, | |
1118 kSharedMemoryOffset, | |
1119 kNonExistentNameSize); | |
1120 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
1121 EXPECT_EQ(-1, *result); | |
1122 } | |
1123 | |
1124 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) { | |
1125 const uint32 kNameSize = strlen(kUniform2Name); | |
1126 const char* kBadName = "foo\abar"; | |
1127 const uint32 kBadNameSize = strlen(kBadName); | |
1128 typedef GetUniformLocation::Result Result; | |
1129 Result* result = GetSharedMemoryAs<Result*>(); | |
1130 *result = -1; | |
1131 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | |
1132 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | |
1133 memcpy(name, kUniform2Name, kNameSize); | |
1134 GetUniformLocation cmd; | |
1135 cmd.Init(kInvalidClientId, | |
1136 kSharedMemoryId, | |
1137 kNameOffset, | |
1138 kSharedMemoryId, | |
1139 kSharedMemoryOffset, | |
1140 kNameSize); | |
1141 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
1142 EXPECT_EQ(-1, *result); | |
1143 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
1144 *result = -1; | |
1145 cmd.Init(client_program_id_, | |
1146 kInvalidSharedMemoryId, | |
1147 kNameOffset, | |
1148 kSharedMemoryId, | |
1149 kSharedMemoryOffset, | |
1150 kNameSize); | |
1151 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1152 EXPECT_EQ(-1, *result); | |
1153 cmd.Init(client_program_id_, | |
1154 kSharedMemoryId, | |
1155 kInvalidSharedMemoryOffset, | |
1156 kSharedMemoryId, | |
1157 kSharedMemoryOffset, | |
1158 kNameSize); | |
1159 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1160 EXPECT_EQ(-1, *result); | |
1161 cmd.Init(client_program_id_, | |
1162 kSharedMemoryId, | |
1163 kNameOffset, | |
1164 kInvalidSharedMemoryId, | |
1165 kSharedMemoryOffset, | |
1166 kNameSize); | |
1167 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1168 EXPECT_EQ(-1, *result); | |
1169 cmd.Init(client_program_id_, | |
1170 kSharedMemoryId, | |
1171 kNameOffset, | |
1172 kSharedMemoryId, | |
1173 kInvalidSharedMemoryOffset, | |
1174 kNameSize); | |
1175 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1176 EXPECT_EQ(-1, *result); | |
1177 cmd.Init(client_program_id_, | |
1178 kSharedMemoryId, | |
1179 kNameOffset, | |
1180 kSharedMemoryId, | |
1181 kSharedMemoryOffset, | |
1182 kSharedBufferSize); | |
1183 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | |
1184 EXPECT_EQ(-1, *result); | |
1185 memcpy(name, kBadName, kBadNameSize); | |
1186 cmd.Init(client_program_id_, | |
1187 kSharedMemoryId, | |
1188 kNameOffset, | |
1189 kSharedMemoryId, | |
1190 kSharedMemoryOffset, | |
1191 kBadNameSize); | |
1192 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | |
1193 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | |
1194 } | |
1195 | |
1196 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationBucket) { | |
1197 const uint32 kBucketId = 123; | 886 const uint32 kBucketId = 123; |
1198 const char* kNonExistentName = "foobar"; | 887 const char* kNonExistentName = "foobar"; |
1199 typedef GetUniformLocationBucket::Result Result; | 888 typedef GetUniformLocation::Result Result; |
1200 Result* result = GetSharedMemoryAs<Result*>(); | 889 Result* result = GetSharedMemoryAs<Result*>(); |
1201 SetBucketAsCString(kBucketId, kUniform2Name); | 890 SetBucketAsCString(kBucketId, kUniform2Name); |
1202 *result = -1; | 891 *result = -1; |
1203 GetUniformLocationBucket cmd; | 892 GetUniformLocation cmd; |
1204 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 893 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1205 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 894 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1206 EXPECT_EQ(kUniform2FakeLocation, *result); | 895 EXPECT_EQ(kUniform2FakeLocation, *result); |
1207 SetBucketAsCString(kBucketId, kNonExistentName); | 896 SetBucketAsCString(kBucketId, kNonExistentName); |
1208 *result = -1; | 897 *result = -1; |
1209 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 898 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1210 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 899 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1211 EXPECT_EQ(-1, *result); | 900 EXPECT_EQ(-1, *result); |
1212 } | 901 } |
1213 | 902 |
1214 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationBucketInvalidArgs) { | 903 TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) { |
1215 const uint32 kBucketId = 123; | 904 const uint32 kBucketId = 123; |
1216 typedef GetUniformLocationBucket::Result Result; | 905 typedef GetUniformLocation::Result Result; |
1217 Result* result = GetSharedMemoryAs<Result*>(); | 906 Result* result = GetSharedMemoryAs<Result*>(); |
1218 *result = -1; | 907 *result = -1; |
1219 GetUniformLocationBucket cmd; | 908 GetUniformLocation cmd; |
1220 // Check no bucket | 909 // Check no bucket |
1221 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 910 cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1222 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 911 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1223 EXPECT_EQ(-1, *result); | 912 EXPECT_EQ(-1, *result); |
1224 // Check bad program id. | 913 // Check bad program id. |
1225 SetBucketAsCString(kBucketId, kUniform2Name); | 914 SetBucketAsCString(kBucketId, kUniform2Name); |
1226 cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset); | 915 cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset); |
1227 *result = -1; | 916 *result = -1; |
1228 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 917 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1229 EXPECT_EQ(-1, *result); | 918 EXPECT_EQ(-1, *result); |
1230 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 919 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1231 // Check bad memory | 920 // Check bad memory |
1232 cmd.Init(client_program_id_, | 921 cmd.Init(client_program_id_, |
1233 kBucketId, | 922 kBucketId, |
1234 kInvalidSharedMemoryId, | 923 kInvalidSharedMemoryId, |
1235 kSharedMemoryOffset); | 924 kSharedMemoryOffset); |
1236 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 925 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1237 cmd.Init(client_program_id_, | 926 cmd.Init(client_program_id_, |
1238 kBucketId, | 927 kBucketId, |
1239 kSharedMemoryId, | 928 kSharedMemoryId, |
1240 kInvalidSharedMemoryOffset); | 929 kInvalidSharedMemoryOffset); |
1241 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 930 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1242 } | 931 } |
1243 | 932 |
1244 TEST_P(GLES2DecoderWithShaderTest, BindUniformLocationCHROMIUM) { | 933 TEST_P(GLES2DecoderWithShaderTest, BindUniformLocationCHROMIUMBucket) { |
| 934 const uint32 kBucketId = 123; |
1245 const GLint kLocation = 2; | 935 const GLint kLocation = 2; |
1246 const char* kName = "testing"; | 936 const char* kName = "testing"; |
1247 const uint32 kNameSize = strlen(kName); | |
1248 const char* kBadName1 = "gl_testing"; | 937 const char* kBadName1 = "gl_testing"; |
1249 const uint32 kBadName1Size = strlen(kBadName1); | |
1250 const char* kBadName2 = "testing[1]"; | 938 const char* kBadName2 = "testing[1]"; |
1251 const uint32 kBadName2Size = strlen(kBadName2); | 939 |
1252 memcpy(shared_memory_address_, kName, kNameSize); | 940 SetBucketAsCString(kBucketId, kName); |
1253 BindUniformLocationCHROMIUM cmd; | 941 BindUniformLocationCHROMIUMBucket cmd; |
1254 cmd.Init(client_program_id_, | 942 cmd.Init(client_program_id_, |
1255 kLocation, | 943 kLocation, |
1256 kSharedMemoryId, | 944 kBucketId); |
1257 kSharedMemoryOffset, | |
1258 kNameSize); | |
1259 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 945 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1260 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 946 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1261 // check negative location | 947 // check negative location |
1262 memcpy(shared_memory_address_, kName, kNameSize); | 948 SetBucketAsCString(kBucketId, kName); |
1263 cmd.Init( | 949 cmd.Init(client_program_id_, -1, kBucketId); |
1264 client_program_id_, -1, kSharedMemoryId, kSharedMemoryOffset, kNameSize); | |
1265 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 950 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1266 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 951 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1267 // check highest location | 952 // check highest location |
1268 memcpy(shared_memory_address_, kName, kNameSize); | 953 SetBucketAsCString(kBucketId, kName); |
1269 GLint kMaxLocation = | 954 GLint kMaxLocation = |
1270 (kMaxFragmentUniformVectors + kMaxVertexUniformVectors) * 4 - 1; | 955 (kMaxFragmentUniformVectors + kMaxVertexUniformVectors) * 4 - 1; |
1271 cmd.Init(client_program_id_, | 956 cmd.Init(client_program_id_, |
1272 kMaxLocation, | 957 kMaxLocation, |
1273 kSharedMemoryId, | 958 kBucketId); |
1274 kSharedMemoryOffset, | |
1275 kNameSize); | |
1276 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 959 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1277 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 960 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1278 // check too high location | 961 // check too high location |
1279 memcpy(shared_memory_address_, kName, kNameSize); | 962 SetBucketAsCString(kBucketId, kName); |
1280 cmd.Init(client_program_id_, | 963 cmd.Init(client_program_id_, |
1281 kMaxLocation + 1, | 964 kMaxLocation + 1, |
1282 kSharedMemoryId, | 965 kBucketId); |
1283 kSharedMemoryOffset, | |
1284 kNameSize); | |
1285 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 966 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1286 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 967 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1287 // check bad name "gl_..." | 968 // check bad name "gl_..." |
1288 memcpy(shared_memory_address_, kBadName1, kBadName1Size); | 969 SetBucketAsCString(kBucketId, kBadName1); |
1289 cmd.Init(client_program_id_, | 970 cmd.Init(client_program_id_, |
1290 kLocation, | 971 kLocation, |
1291 kSharedMemoryId, | 972 kBucketId); |
1292 kSharedMemoryOffset, | |
1293 kBadName1Size); | |
1294 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 973 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1295 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 974 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
1296 // check bad name "name[1]" non zero | 975 // check bad name "name[1]" non zero |
1297 memcpy(shared_memory_address_, kBadName2, kBadName2Size); | 976 SetBucketAsCString(kBucketId, kBadName2); |
1298 cmd.Init(client_program_id_, | 977 cmd.Init(client_program_id_, |
1299 kLocation, | 978 kLocation, |
1300 kSharedMemoryId, | 979 kBucketId); |
1301 kSharedMemoryOffset, | |
1302 kBadName2Size); | |
1303 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 980 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1304 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 981 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1305 } | 982 } |
1306 | 983 |
1307 TEST_P(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) { | 984 TEST_P(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) { |
1308 CommandLine command_line(0, NULL); | 985 CommandLine command_line(0, NULL); |
1309 command_line.AppendSwitchASCII( | 986 command_line.AppendSwitchASCII( |
1310 switches::kGpuDriverBugWorkarounds, | 987 switches::kGpuDriverBugWorkarounds, |
1311 base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE)); | 988 base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE)); |
1312 InitState init; | 989 InitState init; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 } | 1037 } |
1361 | 1038 |
1362 // TODO(gman): DeleteProgram | 1039 // TODO(gman): DeleteProgram |
1363 | 1040 |
1364 // TODO(gman): UseProgram | 1041 // TODO(gman): UseProgram |
1365 | 1042 |
1366 // TODO(gman): DeleteShader | 1043 // TODO(gman): DeleteShader |
1367 | 1044 |
1368 } // namespace gles2 | 1045 } // namespace gles2 |
1369 } // namespace gpu | 1046 } // namespace gpu |
OLD | NEW |