OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/gl_mock.h" | 10 #include "gpu/command_buffer/common/gl_mock.h" |
(...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1144 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); | 1144 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); |
1145 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); | 1145 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); |
1146 ASSERT_TRUE(bucket != NULL); | 1146 ASSERT_TRUE(bucket != NULL); |
1147 EXPECT_EQ(kSourceSize + 1, bucket->size()); | 1147 EXPECT_EQ(kSourceSize + 1, bucket->size()); |
1148 EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource, | 1148 EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource, |
1149 bucket->size())); | 1149 bucket->size())); |
1150 } | 1150 } |
1151 | 1151 |
1152 TEST_F(GLES2DecoderTest, ShaderSourceInvalidArgs) { | 1152 TEST_F(GLES2DecoderTest, ShaderSourceInvalidArgs) { |
1153 const char kSource[] = "hello"; | 1153 const char kSource[] = "hello"; |
| 1154 const char kBadSource[] = "hello\a"; |
1154 const uint32 kSourceSize = sizeof(kSource) - 1; | 1155 const uint32 kSourceSize = sizeof(kSource) - 1; |
| 1156 const uint32 kBadSourceSize = sizeof(kBadSource) - 1; |
1155 memcpy(shared_memory_address_, kSource, kSourceSize); | 1157 memcpy(shared_memory_address_, kSource, kSourceSize); |
1156 ShaderSource cmd; | 1158 ShaderSource cmd; |
1157 cmd.Init(kInvalidClientId, | 1159 cmd.Init(kInvalidClientId, |
1158 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); | 1160 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); |
1159 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1161 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1160 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1162 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1161 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS | 1163 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS |
1162 cmd.Init(client_program_id_, | 1164 cmd.Init(client_program_id_, |
1163 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); | 1165 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); |
1164 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1166 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1165 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 1167 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
1166 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS | 1168 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS |
1167 cmd.Init(client_shader_id_, | 1169 cmd.Init(client_shader_id_, |
1168 kInvalidSharedMemoryId, kSharedMemoryOffset, kSourceSize); | 1170 kInvalidSharedMemoryId, kSharedMemoryOffset, kSourceSize); |
1169 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1171 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1170 cmd.Init(client_shader_id_, | 1172 cmd.Init(client_shader_id_, |
1171 kSharedMemoryId, kInvalidSharedMemoryOffset, kSourceSize); | 1173 kSharedMemoryId, kInvalidSharedMemoryOffset, kSourceSize); |
1172 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1174 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1173 cmd.Init(client_shader_id_, | 1175 cmd.Init(client_shader_id_, |
1174 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); | 1176 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); |
1175 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1177 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1178 memcpy(shared_memory_address_, kBadSource, kBadSourceSize); |
| 1179 cmd.Init(client_program_id_, |
| 1180 kSharedMemoryId, kSharedMemoryOffset, kBadSourceSize); |
| 1181 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1182 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1176 } | 1183 } |
1177 | 1184 |
1178 TEST_F(GLES2DecoderTest, ShaderSourceImmediateAndGetShaderSourceValidArgs) { | 1185 TEST_F(GLES2DecoderTest, ShaderSourceImmediateAndGetShaderSourceValidArgs) { |
1179 const uint32 kBucketId = 123; | 1186 const uint32 kBucketId = 123; |
1180 const char kSource[] = "hello"; | 1187 const char kSource[] = "hello"; |
1181 const uint32 kSourceSize = sizeof(kSource) - 1; | 1188 const uint32 kSourceSize = sizeof(kSource) - 1; |
1182 ShaderSourceImmediate& cmd = *GetImmediateAs<ShaderSourceImmediate>(); | 1189 ShaderSourceImmediate& cmd = *GetImmediateAs<ShaderSourceImmediate>(); |
1183 cmd.Init(client_shader_id_, kSourceSize); | 1190 cmd.Init(client_shader_id_, kSourceSize); |
1184 memcpy(GetImmediateDataAs<void*>(&cmd), kSource, kSourceSize); | 1191 memcpy(GetImmediateDataAs<void*>(&cmd), kSource, kSourceSize); |
1185 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, kSourceSize)); | 1192 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, kSourceSize)); |
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1917 memcpy(shared_memory_address_, kName, kNameSize); | 1924 memcpy(shared_memory_address_, kName, kNameSize); |
1918 BindAttribLocation cmd; | 1925 BindAttribLocation cmd; |
1919 cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset, | 1926 cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset, |
1920 kNameSize); | 1927 kNameSize); |
1921 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1928 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1922 } | 1929 } |
1923 | 1930 |
1924 TEST_F(GLES2DecoderTest, BindAttribLocationInvalidArgs) { | 1931 TEST_F(GLES2DecoderTest, BindAttribLocationInvalidArgs) { |
1925 const GLint kLocation = 2; | 1932 const GLint kLocation = 2; |
1926 const char* kName = "testing"; | 1933 const char* kName = "testing"; |
| 1934 const char* kBadName = "test\aing"; |
1927 const uint32 kNameSize = strlen(kName); | 1935 const uint32 kNameSize = strlen(kName); |
| 1936 const uint32 kBadNameSize = strlen(kBadName); |
1928 EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0); | 1937 EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0); |
| 1938 memcpy(shared_memory_address_, kName, kNameSize); |
1929 BindAttribLocation cmd; | 1939 BindAttribLocation cmd; |
1930 cmd.Init(kInvalidClientId, kLocation, | 1940 cmd.Init(kInvalidClientId, kLocation, |
1931 kSharedMemoryId, kSharedMemoryOffset, kNameSize); | 1941 kSharedMemoryId, kSharedMemoryOffset, kNameSize); |
1932 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1942 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1933 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1943 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1934 cmd.Init(client_program_id_, kLocation, | 1944 cmd.Init(client_program_id_, kLocation, |
1935 kInvalidSharedMemoryId, kSharedMemoryOffset, kNameSize); | 1945 kInvalidSharedMemoryId, kSharedMemoryOffset, kNameSize); |
1936 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1946 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1937 cmd.Init(client_program_id_, kLocation, | 1947 cmd.Init(client_program_id_, kLocation, |
1938 kSharedMemoryId, kInvalidSharedMemoryOffset, kNameSize); | 1948 kSharedMemoryId, kInvalidSharedMemoryOffset, kNameSize); |
1939 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1949 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1940 cmd.Init(client_program_id_, kLocation, | 1950 cmd.Init(client_program_id_, kLocation, |
1941 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); | 1951 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); |
1942 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1952 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1953 memcpy(shared_memory_address_, kBadName, kBadNameSize); |
| 1954 cmd.Init(client_program_id_, kLocation, |
| 1955 kSharedMemoryId, kSharedMemoryOffset, kBadNameSize); |
| 1956 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1957 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1943 } | 1958 } |
1944 | 1959 |
1945 TEST_F(GLES2DecoderTest, BindAttribLocationImmediate) { | 1960 TEST_F(GLES2DecoderTest, BindAttribLocationImmediate) { |
1946 const GLint kLocation = 2; | 1961 const GLint kLocation = 2; |
1947 const char* kName = "testing"; | 1962 const char* kName = "testing"; |
1948 const uint32 kNameSize = strlen(kName); | 1963 const uint32 kNameSize = strlen(kName); |
1949 EXPECT_CALL( | 1964 EXPECT_CALL( |
1950 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) | 1965 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) |
1951 .Times(1); | 1966 .Times(1); |
1952 BindAttribLocationImmediate& cmd = | 1967 BindAttribLocationImmediate& cmd = |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2022 cmd.Init(client_program_id_, | 2037 cmd.Init(client_program_id_, |
2023 kSharedMemoryId, kNameOffset, | 2038 kSharedMemoryId, kNameOffset, |
2024 kSharedMemoryId, kSharedMemoryOffset, | 2039 kSharedMemoryId, kSharedMemoryOffset, |
2025 kNonExistentNameSize); | 2040 kNonExistentNameSize); |
2026 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 2041 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
2027 EXPECT_EQ(-1, *result); | 2042 EXPECT_EQ(-1, *result); |
2028 } | 2043 } |
2029 | 2044 |
2030 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) { | 2045 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) { |
2031 const uint32 kNameSize = strlen(kAttrib2Name); | 2046 const uint32 kNameSize = strlen(kAttrib2Name); |
| 2047 const char* kBadName = "foo\abar"; |
| 2048 const uint32 kBadNameSize = strlen(kBadName); |
2032 typedef GetAttribLocation::Result Result; | 2049 typedef GetAttribLocation::Result Result; |
2033 Result* result = GetSharedMemoryAs<Result*>(); | 2050 Result* result = GetSharedMemoryAs<Result*>(); |
2034 *result = -1; | 2051 *result = -1; |
2035 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | 2052 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); |
2036 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | 2053 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); |
2037 memcpy(name, kAttrib2Name, kNameSize); | 2054 memcpy(name, kAttrib2Name, kNameSize); |
2038 GetAttribLocation cmd; | 2055 GetAttribLocation cmd; |
2039 cmd.Init(kInvalidClientId, | 2056 cmd.Init(kInvalidClientId, |
2040 kSharedMemoryId, kNameOffset, | 2057 kSharedMemoryId, kNameOffset, |
2041 kSharedMemoryId, kSharedMemoryOffset, | 2058 kSharedMemoryId, kSharedMemoryOffset, |
(...skipping 25 matching lines...) Expand all Loading... |
2067 kSharedMemoryId, kInvalidSharedMemoryOffset, | 2084 kSharedMemoryId, kInvalidSharedMemoryOffset, |
2068 kNameSize); | 2085 kNameSize); |
2069 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 2086 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
2070 EXPECT_EQ(-1, *result); | 2087 EXPECT_EQ(-1, *result); |
2071 cmd.Init(client_program_id_, | 2088 cmd.Init(client_program_id_, |
2072 kSharedMemoryId, kNameOffset, | 2089 kSharedMemoryId, kNameOffset, |
2073 kSharedMemoryId, kSharedMemoryOffset, | 2090 kSharedMemoryId, kSharedMemoryOffset, |
2074 kSharedBufferSize); | 2091 kSharedBufferSize); |
2075 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 2092 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
2076 EXPECT_EQ(-1, *result); | 2093 EXPECT_EQ(-1, *result); |
| 2094 memcpy(name, kBadName, kBadNameSize); |
| 2095 cmd.Init(client_program_id_, |
| 2096 kSharedMemoryId, kNameOffset, |
| 2097 kSharedMemoryId, kSharedMemoryOffset, |
| 2098 kBadNameSize); |
| 2099 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 2100 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
2077 } | 2101 } |
2078 | 2102 |
2079 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationImmediate) { | 2103 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationImmediate) { |
2080 const uint32 kNameSize = strlen(kAttrib2Name); | 2104 const uint32 kNameSize = strlen(kAttrib2Name); |
2081 const char* kNonExistentName = "foobar"; | 2105 const char* kNonExistentName = "foobar"; |
2082 const uint32 kNonExistentNameSize = strlen(kNonExistentName); | 2106 const uint32 kNonExistentNameSize = strlen(kNonExistentName); |
2083 typedef GetAttribLocationImmediate::Result Result; | 2107 typedef GetAttribLocationImmediate::Result Result; |
2084 Result* result = GetSharedMemoryAs<Result*>(); | 2108 Result* result = GetSharedMemoryAs<Result*>(); |
2085 *result = -1; | 2109 *result = -1; |
2086 GetAttribLocationImmediate& cmd = | 2110 GetAttribLocationImmediate& cmd = |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2189 cmd.Init(client_program_id_, | 2213 cmd.Init(client_program_id_, |
2190 kSharedMemoryId, kNameOffset, | 2214 kSharedMemoryId, kNameOffset, |
2191 kSharedMemoryId, kSharedMemoryOffset, | 2215 kSharedMemoryId, kSharedMemoryOffset, |
2192 kNonExistentNameSize); | 2216 kNonExistentNameSize); |
2193 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 2217 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
2194 EXPECT_EQ(-1, *result); | 2218 EXPECT_EQ(-1, *result); |
2195 } | 2219 } |
2196 | 2220 |
2197 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) { | 2221 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) { |
2198 const uint32 kNameSize = strlen(kUniform2Name); | 2222 const uint32 kNameSize = strlen(kUniform2Name); |
| 2223 const char* kBadName = "foo\abar"; |
| 2224 const uint32 kBadNameSize = strlen(kBadName); |
2199 typedef GetUniformLocation::Result Result; | 2225 typedef GetUniformLocation::Result Result; |
2200 Result* result = GetSharedMemoryAs<Result*>(); | 2226 Result* result = GetSharedMemoryAs<Result*>(); |
2201 *result = -1; | 2227 *result = -1; |
2202 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); | 2228 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); |
2203 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); | 2229 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); |
2204 memcpy(name, kUniform2Name, kNameSize); | 2230 memcpy(name, kUniform2Name, kNameSize); |
2205 GetUniformLocation cmd; | 2231 GetUniformLocation cmd; |
2206 cmd.Init(kInvalidClientId, | 2232 cmd.Init(kInvalidClientId, |
2207 kSharedMemoryId, kNameOffset, | 2233 kSharedMemoryId, kNameOffset, |
2208 kSharedMemoryId, kSharedMemoryOffset, | 2234 kSharedMemoryId, kSharedMemoryOffset, |
(...skipping 25 matching lines...) Expand all Loading... |
2234 kSharedMemoryId, kInvalidSharedMemoryOffset, | 2260 kSharedMemoryId, kInvalidSharedMemoryOffset, |
2235 kNameSize); | 2261 kNameSize); |
2236 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 2262 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
2237 EXPECT_EQ(-1, *result); | 2263 EXPECT_EQ(-1, *result); |
2238 cmd.Init(client_program_id_, | 2264 cmd.Init(client_program_id_, |
2239 kSharedMemoryId, kNameOffset, | 2265 kSharedMemoryId, kNameOffset, |
2240 kSharedMemoryId, kSharedMemoryOffset, | 2266 kSharedMemoryId, kSharedMemoryOffset, |
2241 kSharedBufferSize); | 2267 kSharedBufferSize); |
2242 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 2268 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
2243 EXPECT_EQ(-1, *result); | 2269 EXPECT_EQ(-1, *result); |
| 2270 memcpy(name, kBadName, kBadNameSize); |
| 2271 cmd.Init(client_program_id_, |
| 2272 kSharedMemoryId, kNameOffset, |
| 2273 kSharedMemoryId, kSharedMemoryOffset, |
| 2274 kBadNameSize); |
| 2275 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 2276 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
2244 } | 2277 } |
2245 | 2278 |
2246 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationImmediate) { | 2279 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationImmediate) { |
2247 const uint32 kNameSize = strlen(kUniform2Name); | 2280 const uint32 kNameSize = strlen(kUniform2Name); |
2248 const char* kNonExistentName = "foobar"; | 2281 const char* kNonExistentName = "foobar"; |
2249 const uint32 kNonExistentNameSize = strlen(kNonExistentName); | 2282 const uint32 kNonExistentNameSize = strlen(kNonExistentName); |
2250 typedef GetUniformLocationImmediate::Result Result; | 2283 typedef GetUniformLocationImmediate::Result Result; |
2251 Result* result = GetSharedMemoryAs<Result*>(); | 2284 Result* result = GetSharedMemoryAs<Result*>(); |
2252 *result = -1; | 2285 *result = -1; |
2253 GetUniformLocationImmediate& cmd = | 2286 GetUniformLocationImmediate& cmd = |
(...skipping 2685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4939 // TODO(gman): TexImage2DImmediate | 4972 // TODO(gman): TexImage2DImmediate |
4940 | 4973 |
4941 // TODO(gman): TexSubImage2DImmediate | 4974 // TODO(gman): TexSubImage2DImmediate |
4942 | 4975 |
4943 // TODO(gman): UseProgram | 4976 // TODO(gman): UseProgram |
4944 | 4977 |
4945 // TODO(gman): SwapBuffers | 4978 // TODO(gman): SwapBuffers |
4946 | 4979 |
4947 } // namespace gles2 | 4980 } // namespace gles2 |
4948 } // namespace gpu | 4981 } // namespace gpu |
OLD | NEW |