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 #include "gpu/command_buffer/service/program_manager.h" | 5 #include "gpu/command_buffer/service/program_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1231 EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data))); | 1231 EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data))); |
1232 } | 1232 } |
1233 | 1233 |
1234 TEST_F(ProgramManagerWithShaderTest, | 1234 TEST_F(ProgramManagerWithShaderTest, |
1235 ProgramInfoGetTransformFeedbackVaryingsNone) { | 1235 ProgramInfoGetTransformFeedbackVaryingsNone) { |
1236 CommonDecoder::Bucket bucket; | 1236 CommonDecoder::Bucket bucket; |
1237 const Program* program = manager_.GetProgram(kClientProgramId); | 1237 const Program* program = manager_.GetProgram(kClientProgramId); |
1238 ASSERT_TRUE(program != NULL); | 1238 ASSERT_TRUE(program != NULL); |
1239 // The program's previous link failed. | 1239 // The program's previous link failed. |
1240 EXPECT_CALL(*(gl_.get()), | 1240 EXPECT_CALL(*(gl_.get()), |
| 1241 GetProgramiv(kServiceProgramId, |
| 1242 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1243 _)) |
| 1244 .WillOnce(SetArgPointee<2>(GL_INTERLEAVED_ATTRIBS)) |
| 1245 .RetiresOnSaturation(); |
| 1246 EXPECT_CALL(*(gl_.get()), |
1241 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1247 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
1242 .WillOnce(SetArgPointee<2>(GL_FALSE)) | 1248 .WillOnce(SetArgPointee<2>(GL_FALSE)) |
1243 .RetiresOnSaturation(); | 1249 .RetiresOnSaturation(); |
1244 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); | 1250 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); |
1245 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); | 1251 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); |
1246 TransformFeedbackVaryingsHeader* header = | 1252 TransformFeedbackVaryingsHeader* header = |
1247 bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( | 1253 bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( |
1248 0, sizeof(TransformFeedbackVaryingsHeader)); | 1254 0, sizeof(TransformFeedbackVaryingsHeader)); |
1249 EXPECT_TRUE(header != NULL); | 1255 EXPECT_TRUE(header != NULL); |
1250 EXPECT_EQ(0u, header->num_transform_feedback_varyings); | 1256 EXPECT_EQ(0u, header->num_transform_feedback_varyings); |
1251 // Zero uniform blocks. | 1257 EXPECT_EQ(static_cast<uint32_t>(GL_INTERLEAVED_ATTRIBS), |
| 1258 header->transform_feedback_buffer_mode); |
| 1259 // Zero transform feedback blocks. |
| 1260 EXPECT_CALL(*(gl_.get()), |
| 1261 GetProgramiv(kServiceProgramId, |
| 1262 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1263 _)) |
| 1264 .WillOnce(SetArgPointee<2>(GL_SEPARATE_ATTRIBS)) |
| 1265 .RetiresOnSaturation(); |
1252 EXPECT_CALL(*(gl_.get()), | 1266 EXPECT_CALL(*(gl_.get()), |
1253 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1267 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
1254 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1268 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
1255 .RetiresOnSaturation(); | 1269 .RetiresOnSaturation(); |
1256 EXPECT_CALL(*(gl_.get()), | 1270 EXPECT_CALL(*(gl_.get()), |
1257 GetProgramiv( | 1271 GetProgramiv( |
1258 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) | 1272 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) |
1259 .WillOnce(SetArgPointee<2>(0)) | 1273 .WillOnce(SetArgPointee<2>(0)) |
1260 .RetiresOnSaturation(); | 1274 .RetiresOnSaturation(); |
1261 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); | 1275 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); |
1262 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); | 1276 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); |
1263 header = bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( | 1277 header = bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( |
1264 0, sizeof(TransformFeedbackVaryingsHeader)); | 1278 0, sizeof(TransformFeedbackVaryingsHeader)); |
1265 EXPECT_TRUE(header != NULL); | 1279 EXPECT_TRUE(header != NULL); |
| 1280 EXPECT_EQ(static_cast<uint32_t>(GL_SEPARATE_ATTRIBS), |
| 1281 header->transform_feedback_buffer_mode); |
1266 EXPECT_EQ(0u, header->num_transform_feedback_varyings); | 1282 EXPECT_EQ(0u, header->num_transform_feedback_varyings); |
1267 } | 1283 } |
1268 | 1284 |
1269 TEST_F(ProgramManagerWithShaderTest, | 1285 TEST_F(ProgramManagerWithShaderTest, |
1270 ProgramInfoGetTransformFeedbackVaryingsValid) { | 1286 ProgramInfoGetTransformFeedbackVaryingsValid) { |
1271 CommonDecoder::Bucket bucket; | 1287 CommonDecoder::Bucket bucket; |
1272 const Program* program = manager_.GetProgram(kClientProgramId); | 1288 const Program* program = manager_.GetProgram(kClientProgramId); |
1273 ASSERT_TRUE(program != NULL); | 1289 ASSERT_TRUE(program != NULL); |
1274 struct Data { | 1290 struct Data { |
1275 TransformFeedbackVaryingsHeader header; | 1291 TransformFeedbackVaryingsHeader header; |
1276 TransformFeedbackVaryingInfo entry[2]; | 1292 TransformFeedbackVaryingInfo entry[2]; |
1277 char name0[4]; | 1293 char name0[4]; |
1278 char name1[8]; | 1294 char name1[8]; |
1279 }; | 1295 }; |
1280 Data data; | 1296 Data data; |
1281 // The names needs to be of size 4*k-1 to avoid padding in the struct Data. | 1297 // The names needs to be of size 4*k-1 to avoid padding in the struct Data. |
1282 // This is a testing only problem. | 1298 // This is a testing only problem. |
1283 const char* kName[] = { "cow", "chicken" }; | 1299 const char* kName[] = { "cow", "chicken" }; |
| 1300 data.header.transform_feedback_buffer_mode = GL_INTERLEAVED_ATTRIBS; |
1284 data.header.num_transform_feedback_varyings = 2; | 1301 data.header.num_transform_feedback_varyings = 2; |
1285 data.entry[0].size = 1; | 1302 data.entry[0].size = 1; |
1286 data.entry[0].type = GL_FLOAT_VEC2; | 1303 data.entry[0].type = GL_FLOAT_VEC2; |
1287 data.entry[0].name_offset = ComputeOffset(&data, data.name0); | 1304 data.entry[0].name_offset = ComputeOffset(&data, data.name0); |
1288 data.entry[0].name_length = arraysize(data.name0); | 1305 data.entry[0].name_length = arraysize(data.name0); |
1289 data.entry[1].size = 2; | 1306 data.entry[1].size = 2; |
1290 data.entry[1].type = GL_FLOAT; | 1307 data.entry[1].type = GL_FLOAT; |
1291 data.entry[1].name_offset = ComputeOffset(&data, data.name1); | 1308 data.entry[1].name_offset = ComputeOffset(&data, data.name1); |
1292 data.entry[1].name_length = arraysize(data.name1); | 1309 data.entry[1].name_length = arraysize(data.name1); |
1293 memcpy(data.name0, kName[0], arraysize(data.name0)); | 1310 memcpy(data.name0, kName[0], arraysize(data.name0)); |
1294 memcpy(data.name1, kName[1], arraysize(data.name1)); | 1311 memcpy(data.name1, kName[1], arraysize(data.name1)); |
1295 | 1312 |
| 1313 |
| 1314 EXPECT_CALL(*(gl_.get()), |
| 1315 GetProgramiv(kServiceProgramId, |
| 1316 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1317 _)) |
| 1318 .WillOnce(SetArgPointee<2>(GL_INTERLEAVED_ATTRIBS)) |
| 1319 .RetiresOnSaturation(); |
1296 EXPECT_CALL(*(gl_.get()), | 1320 EXPECT_CALL(*(gl_.get()), |
1297 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1321 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
1298 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1322 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
1299 .RetiresOnSaturation(); | 1323 .RetiresOnSaturation(); |
1300 EXPECT_CALL(*(gl_.get()), | 1324 EXPECT_CALL(*(gl_.get()), |
1301 GetProgramiv( | 1325 GetProgramiv( |
1302 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) | 1326 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) |
1303 .WillOnce(SetArgPointee<2>(data.header.num_transform_feedback_varyings)) | 1327 .WillOnce(SetArgPointee<2>(data.header.num_transform_feedback_varyings)) |
1304 .RetiresOnSaturation(); | 1328 .RetiresOnSaturation(); |
1305 GLsizei max_length = 1 + std::max(strlen(kName[0]), strlen(kName[1])); | 1329 GLsizei max_length = 1 + std::max(strlen(kName[0]), strlen(kName[1])); |
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2133 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); | 2157 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); |
2134 SetExpectationsForNotCachingProgram(); | 2158 SetExpectationsForNotCachingProgram(); |
2135 SetExpectationsForProgramLoadSuccess(); | 2159 SetExpectationsForProgramLoadSuccess(); |
2136 | 2160 |
2137 EXPECT_TRUE(program_->Link(NULL, Program::kCountOnlyStaticallyUsed, | 2161 EXPECT_TRUE(program_->Link(NULL, Program::kCountOnlyStaticallyUsed, |
2138 base::Bind(&ShaderCacheCb))); | 2162 base::Bind(&ShaderCacheCb))); |
2139 } | 2163 } |
2140 | 2164 |
2141 } // namespace gles2 | 2165 } // namespace gles2 |
2142 } // namespace gpu | 2166 } // namespace gpu |
OLD | NEW |