Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc

Issue 921023002: Add glGetActiveUniformsiv to GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uniform
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698