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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 114 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
115 bucket = decoder_->GetBucket(kBucketId); | 115 bucket = decoder_->GetBucket(kBucketId); |
116 ASSERT_TRUE(bucket != NULL); | 116 ASSERT_TRUE(bucket != NULL); |
117 EXPECT_EQ(sizeof(UniformBlocksHeader), bucket->size()); | 117 EXPECT_EQ(sizeof(UniformBlocksHeader), bucket->size()); |
118 UniformBlocksHeader* header = | 118 UniformBlocksHeader* header = |
119 bucket->GetDataAs<UniformBlocksHeader*>(0, sizeof(UniformBlocksHeader)); | 119 bucket->GetDataAs<UniformBlocksHeader*>(0, sizeof(UniformBlocksHeader)); |
120 ASSERT_TRUE(header != NULL); | 120 ASSERT_TRUE(header != NULL); |
121 EXPECT_EQ(0u, header->num_uniform_blocks); | 121 EXPECT_EQ(0u, header->num_uniform_blocks); |
122 } | 122 } |
123 | 123 |
| 124 TEST_P(GLES2DecoderWithShaderTest, GetUniformsES3CHROMIUMValidArgs) { |
| 125 const uint32 kBucketId = 123; |
| 126 GetUniformsES3CHROMIUM cmd; |
| 127 cmd.Init(client_program_id_, kBucketId); |
| 128 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 129 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 130 .RetiresOnSaturation(); |
| 131 EXPECT_CALL(*gl_, |
| 132 GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _)) |
| 133 .WillOnce(SetArgPointee<2>(0)) |
| 134 .RetiresOnSaturation(); |
| 135 decoder_->set_unsafe_es3_apis_enabled(true); |
| 136 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 137 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); |
| 138 EXPECT_EQ(sizeof(UniformsES3Header), bucket->size()); |
| 139 UniformsES3Header* header = |
| 140 bucket->GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header)); |
| 141 EXPECT_TRUE(header != NULL); |
| 142 EXPECT_EQ(0u, header->num_uniforms); |
| 143 decoder_->set_unsafe_es3_apis_enabled(false); |
| 144 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 145 } |
| 146 |
| 147 TEST_P(GLES2DecoderWithShaderTest, GetUniformsES3CHROMIUMInvalidArgs) { |
| 148 const uint32 kBucketId = 123; |
| 149 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); |
| 150 EXPECT_TRUE(bucket == NULL); |
| 151 GetUniformsES3CHROMIUM cmd; |
| 152 cmd.Init(kInvalidClientId, kBucketId); |
| 153 decoder_->set_unsafe_es3_apis_enabled(true); |
| 154 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 155 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 156 bucket = decoder_->GetBucket(kBucketId); |
| 157 ASSERT_TRUE(bucket != NULL); |
| 158 EXPECT_EQ(sizeof(UniformsES3Header), bucket->size()); |
| 159 UniformsES3Header* header = |
| 160 bucket->GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header)); |
| 161 ASSERT_TRUE(header != NULL); |
| 162 EXPECT_EQ(0u, header->num_uniforms); |
| 163 } |
| 164 |
124 TEST_P(GLES2DecoderWithShaderTest, | 165 TEST_P(GLES2DecoderWithShaderTest, |
125 GetTransformFeedbackVaryingsCHROMIUMValidArgs) { | 166 GetTransformFeedbackVaryingsCHROMIUMValidArgs) { |
126 const uint32 kBucketId = 123; | 167 const uint32 kBucketId = 123; |
127 GetTransformFeedbackVaryingsCHROMIUM cmd; | 168 GetTransformFeedbackVaryingsCHROMIUM cmd; |
128 cmd.Init(client_program_id_, kBucketId); | 169 cmd.Init(client_program_id_, kBucketId); |
129 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 170 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
130 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 171 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
131 .RetiresOnSaturation(); | 172 .RetiresOnSaturation(); |
132 EXPECT_CALL(*gl_, | 173 EXPECT_CALL(*gl_, |
133 GetProgramiv( | 174 GetProgramiv( |
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 result->size = 0; | 1182 result->size = 0; |
1142 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1183 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1143 cmd.Init(client_program_id_, | 1184 cmd.Init(client_program_id_, |
1144 kBucketId, | 1185 kBucketId, |
1145 kSharedMemoryId, | 1186 kSharedMemoryId, |
1146 kInvalidSharedMemoryOffset); | 1187 kInvalidSharedMemoryOffset); |
1147 result->size = 0; | 1188 result->size = 0; |
1148 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 1189 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
1149 } | 1190 } |
1150 | 1191 |
| 1192 TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivSucceeds) { |
| 1193 const uint32 kBucketId = 123; |
| 1194 const GLuint kIndices[] = { 1, 2 }; |
| 1195 const GLint kResults[] = { 1976, 321 }; |
| 1196 const size_t kCount = arraysize(kIndices); |
| 1197 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1198 GetActiveUniformsiv::Result* result = |
| 1199 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1200 GetActiveUniformsiv cmd; |
| 1201 cmd.Init(client_program_id_, |
| 1202 kBucketId, |
| 1203 GL_UNIFORM_TYPE, |
| 1204 kSharedMemoryId, |
| 1205 kSharedMemoryOffset); |
| 1206 EXPECT_CALL(*gl_, |
| 1207 GetActiveUniformsiv( |
| 1208 kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _)) |
| 1209 .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount)) |
| 1210 .RetiresOnSaturation(); |
| 1211 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1212 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1213 .RetiresOnSaturation(); |
| 1214 EXPECT_CALL(*gl_, GetError()) |
| 1215 .WillOnce(Return(GL_NO_ERROR)) |
| 1216 .WillOnce(Return(GL_NO_ERROR)) |
| 1217 .RetiresOnSaturation(); |
| 1218 decoder_->set_unsafe_es3_apis_enabled(true); |
| 1219 result->size = 0; |
| 1220 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1221 EXPECT_EQ(kCount, static_cast<size_t>(result->GetNumResults())); |
| 1222 for (size_t ii = 0; ii < kCount; ++ii) { |
| 1223 EXPECT_EQ(kResults[ii], result->GetData()[ii]); |
| 1224 } |
| 1225 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 1226 decoder_->set_unsafe_es3_apis_enabled(false); |
| 1227 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 1228 } |
| 1229 |
| 1230 TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadProgramFails) { |
| 1231 const uint32 kBucketId = 123; |
| 1232 const GLuint kIndices[] = { 1, 2 }; |
| 1233 const size_t kCount = arraysize(kIndices); |
| 1234 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1235 GetActiveUniformsiv::Result* result = |
| 1236 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1237 decoder_->set_unsafe_es3_apis_enabled(true); |
| 1238 GetActiveUniformsiv cmd; |
| 1239 // None-existant program |
| 1240 cmd.Init(kInvalidClientId, |
| 1241 kBucketId, |
| 1242 GL_UNIFORM_TYPE, |
| 1243 kSharedMemoryId, |
| 1244 kSharedMemoryOffset); |
| 1245 result->size = 0; |
| 1246 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1247 EXPECT_EQ(0, result->GetNumResults()); |
| 1248 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 1249 // Unlinked program. |
| 1250 cmd.Init(client_program_id_, |
| 1251 kBucketId, |
| 1252 GL_UNIFORM_TYPE, |
| 1253 kSharedMemoryId, |
| 1254 kSharedMemoryOffset); |
| 1255 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1256 .WillOnce(SetArgPointee<2>(GL_FALSE)) |
| 1257 .RetiresOnSaturation(); |
| 1258 result->size = 0; |
| 1259 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1260 EXPECT_EQ(0, result->GetNumResults()); |
| 1261 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 1262 } |
| 1263 |
| 1264 TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadParamsFails) { |
| 1265 const uint32 kBucketId = 123; |
| 1266 const GLuint kIndices[] = { 1, 2 }; |
| 1267 const GLint kResults[] = { 1976, 321 }; |
| 1268 const size_t kCount = arraysize(kIndices); |
| 1269 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1270 GetActiveUniformsiv::Result* result = |
| 1271 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1272 GetActiveUniformsiv cmd; |
| 1273 cmd.Init(client_program_id_, |
| 1274 kBucketId, |
| 1275 GL_UNIFORM_TYPE, |
| 1276 kSharedMemoryId, |
| 1277 kSharedMemoryOffset); |
| 1278 EXPECT_CALL(*gl_, |
| 1279 GetActiveUniformsiv( |
| 1280 kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _)) |
| 1281 .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount)) |
| 1282 .RetiresOnSaturation(); |
| 1283 EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1284 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1285 .RetiresOnSaturation(); |
| 1286 EXPECT_CALL(*gl_, GetError()) |
| 1287 .WillOnce(Return(GL_NO_ERROR)) |
| 1288 .WillOnce(Return(GL_INVALID_VALUE)) |
| 1289 .RetiresOnSaturation(); |
| 1290 decoder_->set_unsafe_es3_apis_enabled(true); |
| 1291 result->size = 0; |
| 1292 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1293 EXPECT_EQ(0, result->GetNumResults()); |
| 1294 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
| 1295 } |
| 1296 |
| 1297 TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivResultNotInitFails) { |
| 1298 const uint32 kBucketId = 123; |
| 1299 const GLuint kIndices[] = { 1, 2 }; |
| 1300 const size_t kCount = arraysize(kIndices); |
| 1301 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1302 GetActiveUniformsiv::Result* result = |
| 1303 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1304 GetActiveUniformsiv cmd; |
| 1305 cmd.Init(client_program_id_, |
| 1306 kBucketId, |
| 1307 GL_UNIFORM_TYPE, |
| 1308 kSharedMemoryId, |
| 1309 kSharedMemoryOffset); |
| 1310 decoder_->set_unsafe_es3_apis_enabled(true); |
| 1311 result->size = 1976; // Any value other than 0. |
| 1312 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1313 } |
| 1314 |
| 1315 TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadSharedMemoryFails) { |
| 1316 const uint32 kBucketId = 123; |
| 1317 const GLuint kIndices[] = { 1, 2 }; |
| 1318 const size_t kCount = arraysize(kIndices); |
| 1319 SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount); |
| 1320 GetActiveUniformsiv::Result* result = |
| 1321 static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_); |
| 1322 GetActiveUniformsiv cmd; |
| 1323 decoder_->set_unsafe_es3_apis_enabled(true); |
| 1324 result->size = 0; |
| 1325 cmd.Init(client_program_id_, |
| 1326 kBucketId, |
| 1327 GL_UNIFORM_TYPE, |
| 1328 kInvalidSharedMemoryId, |
| 1329 kSharedMemoryOffset); |
| 1330 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1331 result->size = 0; |
| 1332 cmd.Init(client_program_id_, |
| 1333 kBucketId, |
| 1334 GL_UNIFORM_TYPE, |
| 1335 kSharedMemoryId, |
| 1336 kInvalidSharedMemoryOffset); |
| 1337 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
| 1338 } |
| 1339 |
1151 TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) { | 1340 TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) { |
1152 const char* kInfo = "hello"; | 1341 const char* kInfo = "hello"; |
1153 const uint32 kBucketId = 123; | 1342 const uint32 kBucketId = 123; |
1154 CompileShader compile_cmd; | 1343 CompileShader compile_cmd; |
1155 GetShaderInfoLog cmd; | 1344 GetShaderInfoLog cmd; |
1156 EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _)); | 1345 EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _)); |
1157 EXPECT_CALL(*gl_, CompileShader(kServiceShaderId)); | 1346 EXPECT_CALL(*gl_, CompileShader(kServiceShaderId)); |
1158 EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _)) | 1347 EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _)) |
1159 .WillOnce(SetArgPointee<2>(GL_FALSE)) | 1348 .WillOnce(SetArgPointee<2>(GL_FALSE)) |
1160 .RetiresOnSaturation(); | 1349 .RetiresOnSaturation(); |
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1815 } | 2004 } |
1816 | 2005 |
1817 // TODO(gman): DeleteProgram | 2006 // TODO(gman): DeleteProgram |
1818 | 2007 |
1819 // TODO(gman): UseProgram | 2008 // TODO(gman): UseProgram |
1820 | 2009 |
1821 // TODO(gman): DeleteShader | 2010 // TODO(gman): DeleteShader |
1822 | 2011 |
1823 } // namespace gles2 | 2012 } // namespace gles2 |
1824 } // namespace gpu | 2013 } // namespace gpu |
OLD | NEW |