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

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

Issue 7158002: Revert 89002 - Enforce RGB even on buggy drivers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
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 27 matching lines...) Expand all
38 public: 38 public:
39 GLES2DecoderTest() { } 39 GLES2DecoderTest() { }
40 40
41 protected: 41 protected:
42 void CheckReadPixelsOutOfRange( 42 void CheckReadPixelsOutOfRange(
43 GLint in_read_x, GLint in_read_y, 43 GLint in_read_x, GLint in_read_y,
44 GLsizei in_read_width, GLsizei in_read_height, 44 GLsizei in_read_width, GLsizei in_read_height,
45 bool init); 45 bool init);
46 }; 46 };
47 47
48 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderTest {
49 public:
50 GLES2DecoderRGBBackbufferTest() { }
51
52 virtual void SetUp() {
53 InitDecoder("", false);
54 }
55 };
56
48 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase { 57 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
49 public: 58 public:
50 GLES2DecoderWithShaderTest() 59 GLES2DecoderWithShaderTest()
51 : GLES2DecoderWithShaderTestBase() { 60 : GLES2DecoderWithShaderTestBase() {
52 } 61 }
53 62
54 void AddExpectationsForSimulatedAttrib0( 63 void AddExpectationsForSimulatedAttrib0(
55 GLsizei num_vertices, GLuint buffer_id) { 64 GLsizei num_vertices, GLuint buffer_id) {
56 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId)) 65 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId))
57 .Times(1) 66 .Times(1)
(...skipping 15 matching lines...) Expand all
73 .RetiresOnSaturation(); 82 .RetiresOnSaturation();
74 EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL)) 83 EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL))
75 .Times(1) 84 .Times(1)
76 .RetiresOnSaturation(); 85 .RetiresOnSaturation();
77 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id)) 86 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id))
78 .Times(1) 87 .Times(1)
79 .RetiresOnSaturation(); 88 .RetiresOnSaturation();
80 } 89 }
81 }; 90 };
82 91
83 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
84 public:
85 GLES2DecoderRGBBackbufferTest() { }
86
87 virtual void SetUp() {
88 InitDecoder("", false, false, false, false, false, false);
89 SetupDefaultProgram();
90 }
91 };
92
93 class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest {
94 public:
95 GLES2DecoderManualInitTest() { }
96
97 // Override default setup so nothing gets setup.
98 virtual void SetUp() {
99 }
100 };
101
102 TEST_F(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) { 92 TEST_F(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) {
103 SetupTexture(); 93 SetupTexture();
104 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 94 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
105 SetupExpectationsForApplyingDefaultDirtyState();
106 95
107 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 96 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
108 .Times(1) 97 .Times(1)
109 .RetiresOnSaturation(); 98 .RetiresOnSaturation();
110 DrawArrays cmd; 99 DrawArrays cmd;
111 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 100 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
112 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 101 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
113 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 102 EXPECT_EQ(GL_NO_ERROR, GetGLError());
114 } 103 }
115 104
(...skipping 19 matching lines...) Expand all
135 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 124 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
136 .Times(1) 125 .Times(1)
137 .RetiresOnSaturation(); 126 .RetiresOnSaturation();
138 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)) 127 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
139 .Times(1) 128 .Times(1)
140 .RetiresOnSaturation(); 129 .RetiresOnSaturation();
141 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 130 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
142 .Times(1) 131 .Times(1)
143 .RetiresOnSaturation(); 132 .RetiresOnSaturation();
144 } 133 }
145 SetupExpectationsForApplyingDefaultDirtyState();
146 DrawArrays cmd; 134 DrawArrays cmd;
147 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 135 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
148 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 136 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
149 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 137 EXPECT_EQ(GL_NO_ERROR, GetGLError());
150 } 138 }
151 139
152 TEST_F(GLES2DecoderWithShaderTest, DrawArraysMissingAttributesFails) { 140 TEST_F(GLES2DecoderWithShaderTest, DrawArraysMissingAttributesFails) {
153 DoEnableVertexAttribArray(1); 141 DoEnableVertexAttribArray(1);
154 142
155 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 143 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
(...skipping 12 matching lines...) Expand all
168 .Times(0); 156 .Times(0);
169 DrawArrays cmd; 157 DrawArrays cmd;
170 cmd.Init(GL_TRIANGLES, 0, 0); 158 cmd.Init(GL_TRIANGLES, 0, 0);
171 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 159 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
172 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 160 EXPECT_EQ(GL_NO_ERROR, GetGLError());
173 } 161 }
174 162
175 TEST_F(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) { 163 TEST_F(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) {
176 SetupTexture(); 164 SetupTexture();
177 SetupVertexBuffer(); 165 SetupVertexBuffer();
178 DoEnableVertexAttribArray(1);
179 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 166 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
180 AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId); 167 AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
181 SetupExpectationsForApplyingDefaultDirtyState();
182 168
183 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 169 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
184 .Times(1) 170 .Times(1)
185 .RetiresOnSaturation(); 171 .RetiresOnSaturation();
186 DrawArrays cmd; 172 DrawArrays cmd;
187 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 173 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
188 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 174 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
189 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 175 EXPECT_EQ(GL_NO_ERROR, GetGLError());
190 } 176 }
191 177
192 TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) { 178 TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) {
193 SetupVertexBuffer(); 179 SetupVertexBuffer();
194 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 180 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
195 DeleteVertexBuffer(); 181 DeleteVertexBuffer();
196 182
197 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 183 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
198 .Times(0); 184 .Times(0);
199 DrawArrays cmd; 185 DrawArrays cmd;
200 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 186 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
201 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 187 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
202 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 188 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
203 } 189 }
204 190
205 TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) { 191 TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
206 SetupTexture(); 192 SetupTexture();
207 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 193 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
208 SetupExpectationsForApplyingDefaultDirtyState();
209 DoDeleteProgram(client_program_id_, kServiceProgramId); 194 DoDeleteProgram(client_program_id_, kServiceProgramId);
210 195
211 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 196 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
212 .Times(1) 197 .Times(1)
213 .RetiresOnSaturation(); 198 .RetiresOnSaturation();
214 DrawArrays cmd; 199 DrawArrays cmd;
215 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 200 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
216 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 201 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
217 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 202 EXPECT_EQ(GL_NO_ERROR, GetGLError());
218 } 203 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 DoVertexAttribPointer(1, 2, GL_FLOAT, sizeof(GLfloat) * 3, 0); 252 DoVertexAttribPointer(1, 2, GL_FLOAT, sizeof(GLfloat) * 3, 0);
268 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 253 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
269 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 254 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
270 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 255 EXPECT_EQ(GL_NO_ERROR, GetGLError());
271 } 256 }
272 257
273 TEST_F(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) { 258 TEST_F(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) {
274 SetupTexture(); 259 SetupTexture();
275 SetupIndexBuffer(); 260 SetupIndexBuffer();
276 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0); 261 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
277 SetupExpectationsForApplyingDefaultDirtyState();
278 EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount, 262 EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
279 GL_UNSIGNED_SHORT, 263 GL_UNSIGNED_SHORT,
280 BufferOffset(kValidIndexRangeStart * 2))) 264 BufferOffset(kValidIndexRangeStart * 2)))
281 .Times(1) 265 .Times(1)
282 .RetiresOnSaturation(); 266 .RetiresOnSaturation();
283 DrawElements cmd; 267 DrawElements cmd;
284 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 268 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
285 kValidIndexRangeStart * 2); 269 kValidIndexRangeStart * 2);
286 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 270 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
287 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 271 EXPECT_EQ(GL_NO_ERROR, GetGLError());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 310 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
327 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 311 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
328 } 312 }
329 313
330 TEST_F(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) { 314 TEST_F(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) {
331 SetupTexture(); 315 SetupTexture();
332 SetupVertexBuffer(); 316 SetupVertexBuffer();
333 SetupIndexBuffer(); 317 SetupIndexBuffer();
334 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 318 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
335 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId); 319 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
336 SetupExpectationsForApplyingDefaultDirtyState();
337 320
338 EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount, 321 EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
339 GL_UNSIGNED_SHORT, 322 GL_UNSIGNED_SHORT,
340 BufferOffset(kValidIndexRangeStart * 2))) 323 BufferOffset(kValidIndexRangeStart * 2)))
341 .Times(1) 324 .Times(1)
342 .RetiresOnSaturation(); 325 .RetiresOnSaturation();
343 DrawElements cmd; 326 DrawElements cmd;
344 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 327 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
345 kValidIndexRangeStart * 2); 328 kValidIndexRangeStart * 2);
346 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 329 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
(...skipping 12 matching lines...) Expand all
359 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 342 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
360 kValidIndexRangeStart * 2); 343 kValidIndexRangeStart * 2);
361 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 344 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
362 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 345 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
363 } 346 }
364 347
365 TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) { 348 TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
366 SetupTexture(); 349 SetupTexture();
367 SetupIndexBuffer(); 350 SetupIndexBuffer();
368 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0); 351 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
369 SetupExpectationsForApplyingDefaultDirtyState();
370 DoDeleteProgram(client_program_id_, kServiceProgramId); 352 DoDeleteProgram(client_program_id_, kServiceProgramId);
371 353
372 EXPECT_CALL(*gl_, DrawElements(_, _, _, _)) 354 EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
373 .Times(1); 355 .Times(1);
374 DrawElements cmd; 356 DrawElements cmd;
375 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 357 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
376 kValidIndexRangeStart * 2); 358 kValidIndexRangeStart * 2);
377 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 359 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
378 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 360 EXPECT_EQ(GL_NO_ERROR, GetGLError());
379 } 361 }
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 .Times(0); 1238 .Times(0);
1257 CheckFramebufferStatus::Result* result = 1239 CheckFramebufferStatus::Result* result =
1258 static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_); 1240 static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_);
1259 *result = 0; 1241 *result = 0;
1260 CheckFramebufferStatus cmd; 1242 CheckFramebufferStatus cmd;
1261 cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); 1243 cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
1262 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1244 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1263 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), *result); 1245 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), *result);
1264 } 1246 }
1265 1247
1266 TEST_F(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
1267 SetupTexture();
1268 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
1269 SetupExpectationsForApplyingDefaultDirtyState();
1270 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
1271 kServiceFramebufferId);
1272 DoDeleteFramebuffer(client_framebuffer_id_, kServiceFramebufferId);
1273 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
1274 .Times(1)
1275 .RetiresOnSaturation();
1276 DrawArrays cmd;
1277 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
1278 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1279 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1280 }
1281
1282 TEST_F(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) { 1248 TEST_F(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
1283 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)) 1249 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _))
1284 .Times(0); 1250 .Times(0);
1285 FramebufferRenderbuffer cmd; 1251 FramebufferRenderbuffer cmd;
1286 cmd.Init( 1252 cmd.Init(
1287 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 1253 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
1288 client_renderbuffer_id_); 1254 client_renderbuffer_id_);
1289 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1255 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1290 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 1256 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
1291 } 1257 }
1292 1258
1293 TEST_F(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) { 1259 TEST_F(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
1294 EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)) 1260 EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _))
1295 .Times(0); 1261 .Times(0);
1296 FramebufferTexture2D cmd; 1262 FramebufferTexture2D cmd;
1297 cmd.Init( 1263 cmd.Init(
1298 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_, 1264 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
(...skipping 28 matching lines...) Expand all
1327 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 1293 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
1328 kServiceRenderbufferId)) 1294 kServiceRenderbufferId))
1329 .Times(1) 1295 .Times(1)
1330 .RetiresOnSaturation(); 1296 .RetiresOnSaturation();
1331 EXPECT_CALL(*gl_, GetError()) 1297 EXPECT_CALL(*gl_, GetError())
1332 .WillOnce(Return(GL_NO_ERROR)) 1298 .WillOnce(Return(GL_NO_ERROR))
1333 .RetiresOnSaturation(); 1299 .RetiresOnSaturation();
1334 SetupExpectationsForFramebufferAttachment( 1300 SetupExpectationsForFramebufferAttachment(
1335 GL_COLOR_BUFFER_BIT, // clear bits 1301 GL_COLOR_BUFFER_BIT, // clear bits
1336 0, 0, 0, 0, // color 1302 0, 0, 0, 0, // color
1303 0x1111, // color bits
1337 0, // stencil 1304 0, // stencil
1305 -1, // stencil mask back,
1306 -1, // stencil mask front,
1338 1.0f, // depth 1307 1.0f, // depth
1308 1, // depth mask
1339 false); // scissor test 1309 false); // scissor test
1340 EXPECT_CALL(*gl_, GetError()) 1310 EXPECT_CALL(*gl_, GetError())
1341 .WillOnce(Return(GL_NO_ERROR)) 1311 .WillOnce(Return(GL_NO_ERROR))
1342 .WillOnce(Return(GL_NO_ERROR)) 1312 .WillOnce(Return(GL_NO_ERROR))
1343 .RetiresOnSaturation(); 1313 .RetiresOnSaturation();
1344 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT( 1314 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
1345 GL_FRAMEBUFFER, 1315 GL_FRAMEBUFFER,
1346 GL_COLOR_ATTACHMENT0, 1316 GL_COLOR_ATTACHMENT0,
1347 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _)) 1317 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _))
1348 .WillOnce(SetArgumentPointee<3>(kServiceRenderbufferId)) 1318 .WillOnce(SetArgumentPointee<3>(kServiceRenderbufferId))
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 1353 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
1384 kServiceTextureId, 0)) 1354 kServiceTextureId, 0))
1385 .Times(1) 1355 .Times(1)
1386 .RetiresOnSaturation(); 1356 .RetiresOnSaturation();
1387 EXPECT_CALL(*gl_, GetError()) 1357 EXPECT_CALL(*gl_, GetError())
1388 .WillOnce(Return(GL_NO_ERROR)) 1358 .WillOnce(Return(GL_NO_ERROR))
1389 .RetiresOnSaturation(); 1359 .RetiresOnSaturation();
1390 SetupExpectationsForFramebufferAttachment( 1360 SetupExpectationsForFramebufferAttachment(
1391 0, // clear bits 1361 0, // clear bits
1392 0, 0, 0, 0, // color 1362 0, 0, 0, 0, // color
1363 0x1111, // color bits
1393 0, // stencil 1364 0, // stencil
1365 -1, // stencil mask back,
1366 -1, // stencil mask front,
1394 1.0f, // depth 1367 1.0f, // depth
1368 1, // depth mask
1395 false); // scissor test 1369 false); // scissor test
1396 EXPECT_CALL(*gl_, GetError()) 1370 EXPECT_CALL(*gl_, GetError())
1397 .WillOnce(Return(GL_NO_ERROR)) 1371 .WillOnce(Return(GL_NO_ERROR))
1398 .WillOnce(Return(GL_NO_ERROR)) 1372 .WillOnce(Return(GL_NO_ERROR))
1399 .RetiresOnSaturation(); 1373 .RetiresOnSaturation();
1400 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT( 1374 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
1401 GL_FRAMEBUFFER, 1375 GL_FRAMEBUFFER,
1402 GL_COLOR_ATTACHMENT0, 1376 GL_COLOR_ATTACHMENT0,
1403 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _)) 1377 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _))
1404 .WillOnce(SetArgumentPointee<3>(kServiceTextureId)) 1378 .WillOnce(SetArgumentPointee<3>(kServiceTextureId))
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 1535 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
1562 kServiceTextureId, 0)) 1536 kServiceTextureId, 0))
1563 .Times(1) 1537 .Times(1)
1564 .RetiresOnSaturation(); 1538 .RetiresOnSaturation();
1565 EXPECT_CALL(*gl_, GetError()) 1539 EXPECT_CALL(*gl_, GetError())
1566 .WillOnce(Return(GL_NO_ERROR)) 1540 .WillOnce(Return(GL_NO_ERROR))
1567 .RetiresOnSaturation(); 1541 .RetiresOnSaturation();
1568 SetupExpectationsForFramebufferAttachment( 1542 SetupExpectationsForFramebufferAttachment(
1569 0, // clear bits 1543 0, // clear bits
1570 0, 0, 0, 0, // color 1544 0, 0, 0, 0, // color
1545 0x1111, // color bits
1571 0, // stencil 1546 0, // stencil
1547 -1, // stencil mask back,
1548 -1, // stencil mask front,
1572 1.0f, // depth 1549 1.0f, // depth
1550 1, // depth mask
1573 false); // scissor test 1551 false); // scissor test
1574 FramebufferTexture2D fbtex_cmd; 1552 FramebufferTexture2D fbtex_cmd;
1575 fbtex_cmd.Init( 1553 fbtex_cmd.Init(
1576 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_, 1554 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
1577 0); 1555 0);
1578 EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd)); 1556 EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
1579 } 1557 }
1580 1558
1581 ReadPixelsEmulator emu( 1559 ReadPixelsEmulator emu(
1582 kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment); 1560 kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f); 2522 color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f);
2545 color_mask_cmd.Init(0, 1, 0, 1); 2523 color_mask_cmd.Init(0, 1, 0, 1);
2546 enable_cmd.Init(GL_SCISSOR_TEST); 2524 enable_cmd.Init(GL_SCISSOR_TEST);
2547 cmd.Init( 2525 cmd.Init(
2548 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 2526 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
2549 client_renderbuffer_id_); 2527 client_renderbuffer_id_);
2550 InSequence sequence; 2528 InSequence sequence;
2551 EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f)) 2529 EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f))
2552 .Times(1) 2530 .Times(1)
2553 .RetiresOnSaturation(); 2531 .RetiresOnSaturation();
2554 // EXPECT_CALL(*gl_, ColorMask(0, 1, 0, 1)) 2532 EXPECT_CALL(*gl_, ColorMask(0, 1, 0, 1))
2555 // .Times(0) 2533 .Times(1)
2556 // .RetiresOnSaturation(); 2534 .RetiresOnSaturation();
2557 EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST)) 2535 EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST))
2558 .Times(1) 2536 .Times(1)
2559 .RetiresOnSaturation(); 2537 .RetiresOnSaturation();
2560 EXPECT_CALL(*gl_, GetError()) 2538 EXPECT_CALL(*gl_, GetError())
2561 .WillOnce(Return(GL_NO_ERROR)) 2539 .WillOnce(Return(GL_NO_ERROR))
2562 .RetiresOnSaturation(); 2540 .RetiresOnSaturation();
2563 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2541 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2564 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 2542 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
2565 kServiceRenderbufferId)) 2543 kServiceRenderbufferId))
2566 .Times(1) 2544 .Times(1)
2567 .RetiresOnSaturation(); 2545 .RetiresOnSaturation();
2568 EXPECT_CALL(*gl_, GetError()) 2546 EXPECT_CALL(*gl_, GetError())
2569 .WillOnce(Return(GL_NO_ERROR)) 2547 .WillOnce(Return(GL_NO_ERROR))
2570 .RetiresOnSaturation(); 2548 .RetiresOnSaturation();
2571 SetupExpectationsForFramebufferAttachment( 2549 SetupExpectationsForFramebufferAttachment(
2572 GL_COLOR_BUFFER_BIT, // clear bits 2550 GL_COLOR_BUFFER_BIT, // clear bits
2573 0.1f, 0.2f, 0.3f, 0.4f, // color 2551 0.1f, 0.2f, 0.3f, 0.4f, // color
2552 0x0101, // color bits
2574 0, // stencil 2553 0, // stencil
2554 -1, // stencil mask back
2555 -1, // stencil mask front
2575 1.0f, // depth 2556 1.0f, // depth
2557 1, // depth mask
2576 true); // scissor test 2558 true); // scissor test
2577 EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd)); 2559 EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd));
2578 EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd)); 2560 EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
2579 EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd)); 2561 EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd));
2580 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2562 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2581 } 2563 }
2582 2564
2583 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) { 2565 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
2584 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 2566 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
2585 kServiceFramebufferId); 2567 kServiceFramebufferId);
2586 ClearDepthf depth_cmd; 2568 ClearDepthf depth_cmd;
2587 DepthMask depth_mask_cmd; 2569 DepthMask depth_mask_cmd;
2588 FramebufferRenderbuffer cmd; 2570 FramebufferRenderbuffer cmd;
2589 depth_cmd.Init(0.5f); 2571 depth_cmd.Init(0.5f);
2590 depth_mask_cmd.Init(false); 2572 depth_mask_cmd.Init(false);
2591 cmd.Init( 2573 cmd.Init(
2592 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 2574 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
2593 client_renderbuffer_id_); 2575 client_renderbuffer_id_);
2594 InSequence sequence; 2576 InSequence sequence;
2595 EXPECT_CALL(*gl_, ClearDepth(0.5f)) 2577 EXPECT_CALL(*gl_, ClearDepth(0.5f))
2596 .Times(1) 2578 .Times(1)
2597 .RetiresOnSaturation(); 2579 .RetiresOnSaturation();
2598 // EXPECT_CALL(*gl_, DepthMask(0)) 2580 EXPECT_CALL(*gl_, DepthMask(0))
2599 // .Times(1) 2581 .Times(1)
2600 // .RetiresOnSaturation(); 2582 .RetiresOnSaturation();
2601 EXPECT_CALL(*gl_, GetError()) 2583 EXPECT_CALL(*gl_, GetError())
2602 .WillOnce(Return(GL_NO_ERROR)) 2584 .WillOnce(Return(GL_NO_ERROR))
2603 .RetiresOnSaturation(); 2585 .RetiresOnSaturation();
2604 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2586 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2605 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 2587 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
2606 kServiceRenderbufferId)) 2588 kServiceRenderbufferId))
2607 .Times(1) 2589 .Times(1)
2608 .RetiresOnSaturation(); 2590 .RetiresOnSaturation();
2609 EXPECT_CALL(*gl_, GetError()) 2591 EXPECT_CALL(*gl_, GetError())
2610 .WillOnce(Return(GL_NO_ERROR)) 2592 .WillOnce(Return(GL_NO_ERROR))
2611 .RetiresOnSaturation(); 2593 .RetiresOnSaturation();
2612 SetupExpectationsForFramebufferAttachment( 2594 SetupExpectationsForFramebufferAttachment(
2613 GL_DEPTH_BUFFER_BIT, // clear bits 2595 GL_DEPTH_BUFFER_BIT, // clear bits
2614 0, 0, 0, 0, // color 2596 0, 0, 0, 0, // color
2597 0x1111, // color bits
2615 0, // stencil 2598 0, // stencil
2599 -1, // stencil mask back,
2600 -1, // stencil mask front,
2616 0.5f, // depth 2601 0.5f, // depth
2602 0, // depth mask
2617 false); // scissor test 2603 false); // scissor test
2618 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd)); 2604 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
2619 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd)); 2605 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
2620 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2606 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2621 } 2607 }
2622 2608
2623 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) { 2609 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
2624 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 2610 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
2625 kServiceFramebufferId); 2611 kServiceFramebufferId);
2626 ClearStencil stencil_cmd; 2612 ClearStencil stencil_cmd;
2627 StencilMaskSeparate stencil_mask_separate_cmd; 2613 StencilMaskSeparate stencil_mask_separate_cmd;
2628 FramebufferRenderbuffer cmd; 2614 FramebufferRenderbuffer cmd;
2629 stencil_cmd.Init(123); 2615 stencil_cmd.Init(123);
2630 stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u); 2616 stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u);
2631 cmd.Init( 2617 cmd.Init(
2632 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2618 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2633 client_renderbuffer_id_); 2619 client_renderbuffer_id_);
2634 InSequence sequence; 2620 InSequence sequence;
2635 EXPECT_CALL(*gl_, ClearStencil(123)) 2621 EXPECT_CALL(*gl_, ClearStencil(123))
2636 .Times(1) 2622 .Times(1)
2637 .RetiresOnSaturation(); 2623 .RetiresOnSaturation();
2638 // EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, 0x1234u)) 2624 EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, 0x1234u))
2639 // .Times(1) 2625 .Times(1)
2640 // .RetiresOnSaturation(); 2626 .RetiresOnSaturation();
2641 EXPECT_CALL(*gl_, GetError()) 2627 EXPECT_CALL(*gl_, GetError())
2642 .WillOnce(Return(GL_NO_ERROR)) 2628 .WillOnce(Return(GL_NO_ERROR))
2643 .RetiresOnSaturation(); 2629 .RetiresOnSaturation();
2644 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2630 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2645 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2631 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2646 kServiceRenderbufferId)) 2632 kServiceRenderbufferId))
2647 .Times(1) 2633 .Times(1)
2648 .RetiresOnSaturation(); 2634 .RetiresOnSaturation();
2649 EXPECT_CALL(*gl_, GetError()) 2635 EXPECT_CALL(*gl_, GetError())
2650 .WillOnce(Return(GL_NO_ERROR)) 2636 .WillOnce(Return(GL_NO_ERROR))
2651 .RetiresOnSaturation(); 2637 .RetiresOnSaturation();
2652 SetupExpectationsForFramebufferAttachment( 2638 SetupExpectationsForFramebufferAttachment(
2653 GL_STENCIL_BUFFER_BIT, // clear bits 2639 GL_STENCIL_BUFFER_BIT, // clear bits
2654 0, 0, 0, 0, // color 2640 0, 0, 0, 0, // color
2641 0x1111, // color bits
2655 123, // stencil 2642 123, // stencil
2643 -1, // stencil mask back,
2644 0x1234u, // stencil mask front,
2656 1.0f, // depth 2645 1.0f, // depth
2646 1, // depth mask
2657 false); // scissor test 2647 false); // scissor test
2658 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd)); 2648 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
2659 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd)); 2649 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd));
2660 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2650 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2661 } 2651 }
2662 2652
2663 TEST_F(GLES2DecoderTest, IsBuffer) { 2653 TEST_F(GLES2DecoderTest, IsBuffer) {
2664 EXPECT_FALSE(DoIsBuffer(client_buffer_id_)); 2654 EXPECT_FALSE(DoIsBuffer(client_buffer_id_));
2665 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 2655 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
2666 EXPECT_TRUE(DoIsBuffer(client_buffer_id_)); 2656 EXPECT_TRUE(DoIsBuffer(client_buffer_id_));
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2728 .Times(1) 2718 .Times(1)
2729 .RetiresOnSaturation(); 2719 .RetiresOnSaturation();
2730 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2720 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2731 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2721 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2732 kServiceRenderbufferId)) 2722 kServiceRenderbufferId))
2733 .Times(1) 2723 .Times(1)
2734 .RetiresOnSaturation(); 2724 .RetiresOnSaturation();
2735 SetupExpectationsForFramebufferAttachment( 2725 SetupExpectationsForFramebufferAttachment(
2736 GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits 2726 GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
2737 0, 0, 0, 0, // color 2727 0, 0, 0, 0, // color
2728 0x1111, // color bits
2738 123, // stencil 2729 123, // stencil
2730 -1, // stencil mask back,
2731 -1, // stencil mask front,
2739 0.5f, // depth 2732 0.5f, // depth
2733 1, // depth mask
2740 false); // scissor test 2734 false); // scissor test
2741 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd)); 2735 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
2742 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd)); 2736 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
2743 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2737 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2744 } 2738 }
2745 #endif 2739 #endif
2746 2740
2747 TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) { 2741 TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) {
2748 SetupVertexBuffer(); 2742 SetupVertexBuffer();
2749 static const GLenum types[] = { 2743 static const GLenum types[] = {
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
2973 SetSurfaceCHROMIUM cmd; 2967 SetSurfaceCHROMIUM cmd;
2974 cmd.Init(kExistentSurfaceId); 2968 cmd.Init(kExistentSurfaceId);
2975 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2969 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2976 2970
2977 cmd.Init(kNonexistentSurfaceId); 2971 cmd.Init(kNonexistentSurfaceId);
2978 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2972 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2979 2973
2980 EXPECT_EQ(surface.get(), decoder_->GetGLSurface()); 2974 EXPECT_EQ(surface.get(), decoder_->GetGLSurface());
2981 } 2975 }
2982 2976
2983 // Test that with an RGB backbuffer if we set the color mask to 1,1,1,1 it is
2984 // set to 1,1,1,0 at Draw time but is 1,1,1,1 at query time.
2985 TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
2986 ColorMask cmd;
2987 cmd.Init(true, true, true, true);
2988 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2989 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2990
2991 SetupTexture();
2992 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
2993 SetupExpectationsForApplyingDirtyState(
2994 true, // Framebuffer is RGB
2995 false, // Framebuffer has depth
2996 false, // Framebuffer has stencil
2997 0x1110, // color bits
2998 false, // depth mask
2999 0, // front stencil mask
3000 0); // back stencil mask
3001
3002 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3003 .Times(1)
3004 .RetiresOnSaturation();
3005 DrawArrays draw_cmd;
3006 draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
3007 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3008 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3009
3010 EXPECT_CALL(*gl_, GetError())
3011 .WillOnce(Return(GL_NO_ERROR))
3012 .WillOnce(Return(GL_NO_ERROR))
3013 .RetiresOnSaturation();
3014 typedef GetIntegerv::Result Result;
3015 Result* result = static_cast<Result*>(shared_memory_address_);
3016 EXPECT_CALL(*gl_, GetIntegerv(GL_COLOR_WRITEMASK, result->GetData()))
3017 .Times(0);
3018 result->size = 0;
3019 GetIntegerv cmd2;
3020 cmd2.Init(GL_COLOR_WRITEMASK, shared_memory_id_, shared_memory_offset_);
3021 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3022 EXPECT_EQ(
3023 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_COLOR_WRITEMASK),
3024 result->GetNumResults());
3025 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3026 EXPECT_EQ(1, result->GetData()[0]);
3027 EXPECT_EQ(1, result->GetData()[1]);
3028 EXPECT_EQ(1, result->GetData()[2]);
3029 EXPECT_EQ(1, result->GetData()[3]);
3030 }
3031
3032 // Test that with no depth if we set DepthMask true that it's set to false at
3033 // draw time but querying it returns true.
3034 TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
3035 EXPECT_CALL(*gl_, DepthMask(true))
3036 .Times(0)
3037 .RetiresOnSaturation();
3038 DepthMask cmd;
3039 cmd.Init(true);
3040 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3041 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3042
3043 SetupTexture();
3044 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
3045 SetupExpectationsForApplyingDirtyState(
3046 true, // Framebuffer is RGB
3047 false, // Framebuffer has depth
3048 false, // Framebuffer has stencil
3049 0x1110, // color bits
3050 false, // depth mask
3051 0, // front stencil mask
3052 0); // back stencil mask
3053
3054 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3055 .Times(1)
3056 .RetiresOnSaturation();
3057 DrawArrays draw_cmd;
3058 draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
3059 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3060 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3061
3062 EXPECT_CALL(*gl_, GetError())
3063 .WillOnce(Return(GL_NO_ERROR))
3064 .WillOnce(Return(GL_NO_ERROR))
3065 .RetiresOnSaturation();
3066 typedef GetIntegerv::Result Result;
3067 Result* result = static_cast<Result*>(shared_memory_address_);
3068 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_WRITEMASK, result->GetData()))
3069 .Times(0);
3070 result->size = 0;
3071 GetIntegerv cmd2;
3072 cmd2.Init(GL_DEPTH_WRITEMASK, shared_memory_id_, shared_memory_offset_);
3073 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3074 EXPECT_EQ(
3075 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_WRITEMASK),
3076 result->GetNumResults());
3077 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3078 EXPECT_EQ(1, result->GetData()[0]);
3079 }
3080
3081 // Test that with no stencil if we set the stencil mask it's still set to 0 at
3082 // draw time but gets our value if we query.
3083 TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
3084 const GLint kMask = 123;
3085 EXPECT_CALL(*gl_, StencilMask(kMask))
3086 .Times(0)
3087 .RetiresOnSaturation();
3088 StencilMask cmd;
3089 cmd.Init(kMask);
3090 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3091 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3092
3093 SetupTexture();
3094 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
3095 SetupExpectationsForApplyingDirtyState(
3096 true, // Framebuffer is RGB
3097 false, // Framebuffer has depth
3098 false, // Framebuffer has stencil
3099 0x1110, // color bits
3100 false, // depth mask
3101 0, // front stencil mask
3102 0); // back stencil mask
3103 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3104 .Times(1)
3105 .RetiresOnSaturation();
3106 DrawArrays draw_cmd;
3107 draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
3108 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3109 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3110
3111 EXPECT_CALL(*gl_, GetError())
3112 .WillOnce(Return(GL_NO_ERROR))
3113 .WillOnce(Return(GL_NO_ERROR))
3114 .RetiresOnSaturation();
3115 typedef GetIntegerv::Result Result;
3116 Result* result = static_cast<Result*>(shared_memory_address_);
3117 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, result->GetData()))
3118 .Times(0);
3119 result->size = 0;
3120 GetIntegerv cmd2;
3121 cmd2.Init(GL_STENCIL_WRITEMASK, shared_memory_id_, shared_memory_offset_);
3122 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3123 EXPECT_EQ(
3124 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_WRITEMASK),
3125 result->GetNumResults());
3126 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3127 EXPECT_EQ(kMask, result->GetData()[0]);
3128 }
3129
3130 // Test that if an FBO is bound we get the correct masks.
3131 TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
3132 ColorMask cmd;
3133 cmd.Init(true, true, true, true);
3134 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3135 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3136
3137 SetupTexture();
3138 SetupVertexBuffer();
3139 DoEnableVertexAttribArray(0);
3140 DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
3141 DoEnableVertexAttribArray(1);
3142 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
3143 DoEnableVertexAttribArray(2);
3144 DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0);
3145 SetupExpectationsForApplyingDirtyState(
3146 true, // Framebuffer is RGB
3147 false, // Framebuffer has depth
3148 false, // Framebuffer has stencil
3149 0x1110, // color bits
3150 false, // depth mask
3151 0, // front stencil mask
3152 0); // back stencil mask
3153
3154 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3155 .Times(1)
3156 .RetiresOnSaturation();
3157 DrawArrays draw_cmd;
3158 draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
3159 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3160 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3161
3162 // Check that no extra calls are made on the next draw.
3163 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3164 .Times(1)
3165 .RetiresOnSaturation();
3166 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3167 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3168
3169 // Setup Frame buffer.
3170 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
3171 kServiceFramebufferId);
3172 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _))
3173 .Times(0);
3174 FramebufferRenderbuffer fbrb_cmd;
3175 fbrb_cmd.Init(
3176 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
3177 client_renderbuffer_id_);
3178 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3179
3180 // This time state needs to be set.
3181 SetupExpectationsForApplyingDirtyState(
3182 false, // Framebuffer is RGB
3183 false, // Framebuffer has depth
3184 false, // Framebuffer has stencil
3185 0x1110, // color bits
3186 false, // depth mask
3187 0, // front stencil mask
3188 0); // back stencil mask
3189 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3190 .Times(1)
3191 .RetiresOnSaturation();
3192 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3193 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3194
3195 // Check that no extra calls are made on the next draw.
3196 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3197 .Times(1)
3198 .RetiresOnSaturation();
3199 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3200 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3201
3202 // Unbind
3203 DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
3204
3205 SetupExpectationsForApplyingDirtyState(
3206 true, // Framebuffer is RGB
3207 false, // Framebuffer has depth
3208 false, // Framebuffer has stencil
3209 0x1110, // color bits
3210 false, // depth mask
3211 0, // front stencil mask
3212 0); // back stencil mask
3213
3214 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3215 .Times(1)
3216 .RetiresOnSaturation();
3217 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3218 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3219 }
3220
3221 TEST_F(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
3222 InitDecoder("", true, false, false, true, false, false);
3223
3224 EXPECT_CALL(*gl_, GetError())
3225 .WillOnce(Return(GL_NO_ERROR))
3226 .WillOnce(Return(GL_NO_ERROR))
3227 .RetiresOnSaturation();
3228 typedef GetIntegerv::Result Result;
3229 Result* result = static_cast<Result*>(shared_memory_address_);
3230 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
3231 .WillOnce(SetArgumentPointee<1>(8))
3232 .RetiresOnSaturation();
3233 result->size = 0;
3234 GetIntegerv cmd2;
3235 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
3236 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3237 EXPECT_EQ(
3238 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
3239 result->GetNumResults());
3240 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3241 EXPECT_EQ(8, result->GetData()[0]);
3242 }
3243
3244 TEST_F(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
3245 InitDecoder("", true, false, false, false, false, false);
3246
3247 EXPECT_CALL(*gl_, GetError())
3248 .WillOnce(Return(GL_NO_ERROR))
3249 .WillOnce(Return(GL_NO_ERROR))
3250 .RetiresOnSaturation();
3251 typedef GetIntegerv::Result Result;
3252 Result* result = static_cast<Result*>(shared_memory_address_);
3253 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
3254 .WillOnce(SetArgumentPointee<1>(8))
3255 .RetiresOnSaturation();
3256 result->size = 0;
3257 GetIntegerv cmd2;
3258 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
3259 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3260 EXPECT_EQ(
3261 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
3262 result->GetNumResults());
3263 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3264 EXPECT_EQ(0, result->GetData()[0]);
3265 }
3266
3267 TEST_F(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
3268 InitDecoder("", false, true, false, false, true, false);
3269
3270 EXPECT_CALL(*gl_, GetError())
3271 .WillOnce(Return(GL_NO_ERROR))
3272 .WillOnce(Return(GL_NO_ERROR))
3273 .RetiresOnSaturation();
3274 typedef GetIntegerv::Result Result;
3275 Result* result = static_cast<Result*>(shared_memory_address_);
3276 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
3277 .WillOnce(SetArgumentPointee<1>(24))
3278 .RetiresOnSaturation();
3279 result->size = 0;
3280 GetIntegerv cmd2;
3281 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
3282 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3283 EXPECT_EQ(
3284 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
3285 result->GetNumResults());
3286 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3287 EXPECT_EQ(24, result->GetData()[0]);
3288 }
3289
3290 TEST_F(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
3291 InitDecoder("", false, true, false, false, false, false);
3292
3293 EXPECT_CALL(*gl_, GetError())
3294 .WillOnce(Return(GL_NO_ERROR))
3295 .WillOnce(Return(GL_NO_ERROR))
3296 .RetiresOnSaturation();
3297 typedef GetIntegerv::Result Result;
3298 Result* result = static_cast<Result*>(shared_memory_address_);
3299 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
3300 .WillOnce(SetArgumentPointee<1>(24))
3301 .RetiresOnSaturation();
3302 result->size = 0;
3303 GetIntegerv cmd2;
3304 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
3305 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3306 EXPECT_EQ(
3307 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
3308 result->GetNumResults());
3309 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3310 EXPECT_EQ(0, result->GetData()[0]);
3311 }
3312
3313 TEST_F(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
3314 InitDecoder("", false, false, true, false, false, true);
3315
3316 EXPECT_CALL(*gl_, GetError())
3317 .WillOnce(Return(GL_NO_ERROR))
3318 .WillOnce(Return(GL_NO_ERROR))
3319 .RetiresOnSaturation();
3320 typedef GetIntegerv::Result Result;
3321 Result* result = static_cast<Result*>(shared_memory_address_);
3322 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
3323 .WillOnce(SetArgumentPointee<1>(8))
3324 .RetiresOnSaturation();
3325 result->size = 0;
3326 GetIntegerv cmd2;
3327 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
3328 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3329 EXPECT_EQ(
3330 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
3331 result->GetNumResults());
3332 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3333 EXPECT_EQ(8, result->GetData()[0]);
3334 }
3335
3336 TEST_F(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
3337 InitDecoder("", false, false, true, false, false, false);
3338
3339 EXPECT_CALL(*gl_, GetError())
3340 .WillOnce(Return(GL_NO_ERROR))
3341 .WillOnce(Return(GL_NO_ERROR))
3342 .RetiresOnSaturation();
3343 typedef GetIntegerv::Result Result;
3344 Result* result = static_cast<Result*>(shared_memory_address_);
3345 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
3346 .WillOnce(SetArgumentPointee<1>(8))
3347 .RetiresOnSaturation();
3348 result->size = 0;
3349 GetIntegerv cmd2;
3350 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
3351 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3352 EXPECT_EQ(
3353 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
3354 result->GetNumResults());
3355 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3356 EXPECT_EQ(0, result->GetData()[0]);
3357 }
3358 2977
3359 // TODO(gman): BufferData 2978 // TODO(gman): BufferData
3360 2979
3361 // TODO(gman): BufferDataImmediate 2980 // TODO(gman): BufferDataImmediate
3362 2981
3363 // TODO(gman): BufferSubData 2982 // TODO(gman): BufferSubData
3364 2983
3365 // TODO(gman): BufferSubDataImmediate 2984 // TODO(gman): BufferSubDataImmediate
3366 2985
3367 // TODO(gman): CompressedTexImage2D 2986 // TODO(gman): CompressedTexImage2D
(...skipping 13 matching lines...) Expand all
3381 // TODO(gman): TexImage2DImmediate 3000 // TODO(gman): TexImage2DImmediate
3382 3001
3383 // TODO(gman): TexSubImage2DImmediate 3002 // TODO(gman): TexSubImage2DImmediate
3384 3003
3385 // TODO(gman): UseProgram 3004 // TODO(gman): UseProgram
3386 3005
3387 // TODO(gman): SwapBuffers 3006 // TODO(gman): SwapBuffers
3388 3007
3389 } // namespace gles2 3008 } // namespace gles2
3390 } // namespace gpu 3009 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698