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

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

Issue 199443004: gpu: Raise GL_OUT_OF_MEMORY when BeginQueryEXT fails to allocate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: checkmem: benchmark Created 6 years, 8 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) 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/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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 bool init); 64 bool init);
65 }; 65 };
66 66
67 class GLES2DecoderTestWithExtensionsOnGLES2 67 class GLES2DecoderTestWithExtensionsOnGLES2
68 : public GLES2DecoderTest, 68 : public GLES2DecoderTest,
69 public ::testing::WithParamInterface<const char*> { 69 public ::testing::WithParamInterface<const char*> {
70 public: 70 public:
71 GLES2DecoderTestWithExtensionsOnGLES2() {} 71 GLES2DecoderTestWithExtensionsOnGLES2() {}
72 72
73 virtual void SetUp() { 73 virtual void SetUp() {
74 InitDecoder(GetParam(), // extensions 74 InitState init;
75 "opengl es 2.0", // gl version 75 init.extensions = GetParam();
76 true, // has alpha 76 init.gl_version = "opengl es 2.0";
77 true, // has depth 77 init.has_alpha = true;
78 false, // has stencil 78 init.has_depth = true;
79 true, // request alpha 79 init.request_alpha = true;
80 true, // request depth 80 init.request_depth = true;
81 false, // request stencil 81 InitDecoder(init);
82 false); // bind generates resource
83 } 82 }
84 }; 83 };
85 84
86 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase { 85 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
87 public: 86 public:
88 GLES2DecoderWithShaderTest() 87 GLES2DecoderWithShaderTest()
89 : GLES2DecoderWithShaderTestBase() { 88 : GLES2DecoderWithShaderTestBase() {
90 } 89 }
91 90
92 void CheckTextureChangesMarkFBOAsNotComplete(bool bound_fbo); 91 void CheckTextureChangesMarkFBOAsNotComplete(bool bound_fbo);
93 void CheckRenderbufferChangesMarkFBOAsNotComplete(bool bound_fbo); 92 void CheckRenderbufferChangesMarkFBOAsNotComplete(bool bound_fbo);
94 }; 93 };
95 94
96 class GLES2DecoderGeometryInstancingTest : public GLES2DecoderWithShaderTest { 95 class GLES2DecoderGeometryInstancingTest : public GLES2DecoderWithShaderTest {
97 public: 96 public:
98 GLES2DecoderGeometryInstancingTest() 97 GLES2DecoderGeometryInstancingTest()
99 : GLES2DecoderWithShaderTest() { 98 : GLES2DecoderWithShaderTest() {
100 } 99 }
101 100
102 virtual void SetUp() { 101 virtual void SetUp() {
103 InitDecoder( 102 InitState init;
104 "GL_ANGLE_instanced_arrays", // extensions 103 init.extensions = "GL_ANGLE_instanced_arrays";
105 "opengl es 2.0", // gl version 104 init.gl_version = "opengl es 2.0";
106 true, // has alpha 105 init.has_alpha = true;
107 true, // has depth 106 init.has_depth = true;
108 false, // has stencil 107 init.request_alpha = true;
109 true, // request alpha 108 init.request_depth = true;
110 true, // request depth 109 init.bind_generates_resource = true;
111 false, // request stencil 110 InitDecoder(init);
112 true); // bind generates resource
113 SetupDefaultProgram(); 111 SetupDefaultProgram();
114 } 112 }
115 }; 113 };
116 114
117 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest { 115 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
118 public: 116 public:
119 GLES2DecoderRGBBackbufferTest() { } 117 GLES2DecoderRGBBackbufferTest() { }
120 118
121 virtual void SetUp() { 119 virtual void SetUp() {
122 // Test codepath with workaround clear_alpha_in_readpixels because 120 // Test codepath with workaround clear_alpha_in_readpixels because
123 // ReadPixelsEmulator emulates the incorrect driver behavior. 121 // ReadPixelsEmulator emulates the incorrect driver behavior.
124 CommandLine command_line(0, NULL); 122 CommandLine command_line(0, NULL);
125 command_line.AppendSwitchASCII( 123 command_line.AppendSwitchASCII(
126 switches::kGpuDriverBugWorkarounds, 124 switches::kGpuDriverBugWorkarounds,
127 base::IntToString(gpu::CLEAR_ALPHA_IN_READPIXELS)); 125 base::IntToString(gpu::CLEAR_ALPHA_IN_READPIXELS));
128 InitDecoderWithCommandLine( 126 InitState init;
129 "", // extensions 127 init.gl_version = "3.0";
130 "3.0", // gl version 128 init.bind_generates_resource = true;
131 false, // has alpha 129 InitDecoderWithCommandLine(init, &command_line);
132 false, // has depth
133 false, // has stencil
134 false, // request alpha
135 false, // request depth
136 false, // request stencil
137 true, // bind generates resource
138 &command_line);
139 SetupDefaultProgram(); 130 SetupDefaultProgram();
140 } 131 }
141 }; 132 };
142 133
143 class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest { 134 class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest {
144 public: 135 public:
145 GLES2DecoderManualInitTest() { } 136 GLES2DecoderManualInitTest() { }
146 137
147 // Override default setup so nothing gets setup. 138 // Override default setup so nothing gets setup.
148 virtual void SetUp() { 139 virtual void SetUp() {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OverflowFails) { 199 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OverflowFails) {
209 const GLsizei kLargeCount = 0x40000000; 200 const GLsizei kLargeCount = 0x40000000;
210 SetupTexture(); 201 SetupTexture();
211 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 202 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
212 .Times(0) 203 .Times(0)
213 .RetiresOnSaturation(); 204 .RetiresOnSaturation();
214 DrawArrays cmd; 205 DrawArrays cmd;
215 cmd.Init(GL_TRIANGLES, 0, kLargeCount); 206 cmd.Init(GL_TRIANGLES, 0, kLargeCount);
216 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 207 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
217 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 208 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
209 EXPECT_FALSE(GetDecoder()->WasContextLost());
218 } 210 }
219 211
220 // Tests when the math overflows (0x7FFFFFFF + 1 = 0x8000000 verts) 212 // Tests when the math overflows (0x7FFFFFFF + 1 = 0x8000000 verts)
221 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0PosToNegFails) { 213 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0PosToNegFails) {
222 const GLsizei kLargeCount = 0x7FFFFFFF; 214 const GLsizei kLargeCount = 0x7FFFFFFF;
223 SetupTexture(); 215 SetupTexture();
224 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 216 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
225 .Times(0) 217 .Times(0)
226 .RetiresOnSaturation(); 218 .RetiresOnSaturation();
227 DrawArrays cmd; 219 DrawArrays cmd;
228 cmd.Init(GL_TRIANGLES, 0, kLargeCount); 220 cmd.Init(GL_TRIANGLES, 0, kLargeCount);
229 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 221 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
230 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 222 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
223 EXPECT_FALSE(GetDecoder()->WasContextLost());
231 } 224 }
232 225
233 // Tests when the driver returns an error 226 // Tests when the driver returns an error
234 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OOMFails) { 227 TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OOMFails) {
235 const GLsizei kFakeLargeCount = 0x1234; 228 const GLsizei kFakeLargeCount = 0x1234;
236 SetupTexture(); 229 SetupTexture();
237 AddExpectationsForSimulatedAttrib0WithError( 230 AddExpectationsForSimulatedAttrib0WithError(
238 kFakeLargeCount, 0, GL_OUT_OF_MEMORY); 231 kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
239 EXPECT_CALL(*gl_, DrawArrays(_, _, _)) 232 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
240 .Times(0) 233 .Times(0)
241 .RetiresOnSaturation(); 234 .RetiresOnSaturation();
242 DrawArrays cmd; 235 DrawArrays cmd;
243 cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount); 236 cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
244 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 237 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
245 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 238 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
239 EXPECT_FALSE(GetDecoder()->WasContextLost());
240 }
241
242 // Test that we lose context.
243 TEST_F(GLES2DecoderManualInitTest, LoseContextWhenOOM) {
244 InitState init;
245 init.gl_version = "3.0";
246 init.has_alpha = true;
247 init.has_depth = true;
248 init.request_alpha = true;
249 init.request_depth = true;
250 init.bind_generates_resource = true;
251 init.lose_context_when_out_of_memory = true;
252 InitDecoder(init);
253 SetupDefaultProgram();
254
255 const GLsizei kFakeLargeCount = 0x1234;
256 SetupTexture();
257 AddExpectationsForSimulatedAttrib0WithError(
258 kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
259 EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
260 // Other contexts in the group should be lost also.
261 EXPECT_CALL(*mock_decoder_, LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB))
262 .Times(1)
263 .RetiresOnSaturation();
264 DrawArrays cmd;
265 cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
266 // This context should be lost.
267 EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
268 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
269 EXPECT_TRUE(decoder_->WasContextLost());
246 } 270 }
247 271
248 TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) { 272 TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
249 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 273 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
250 // This is an NPOT texture. As the default filtering requires mips 274 // This is an NPOT texture. As the default filtering requires mips
251 // this should trigger replacing with black textures before rendering. 275 // this should trigger replacing with black textures before rendering.
252 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 276 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
253 kSharedMemoryId, kSharedMemoryOffset); 277 kSharedMemoryId, kSharedMemoryOffset);
254 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 278 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
255 { 279 {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 345 EXPECT_EQ(GL_NO_ERROR, GetGLError());
322 } 346 }
323 347
324 // Same as DrawArraysValidAttributesSucceeds, but with workaround 348 // Same as DrawArraysValidAttributesSucceeds, but with workaround
325 // |init_vertex_attributes|. 349 // |init_vertex_attributes|.
326 TEST_F(GLES2DecoderManualInitTest, InitVertexAttributes) { 350 TEST_F(GLES2DecoderManualInitTest, InitVertexAttributes) {
327 CommandLine command_line(0, NULL); 351 CommandLine command_line(0, NULL);
328 command_line.AppendSwitchASCII( 352 command_line.AppendSwitchASCII(
329 switches::kGpuDriverBugWorkarounds, 353 switches::kGpuDriverBugWorkarounds,
330 base::IntToString(gpu::INIT_VERTEX_ATTRIBUTES)); 354 base::IntToString(gpu::INIT_VERTEX_ATTRIBUTES));
331 InitDecoderWithCommandLine( 355 InitState init;
332 "", // extensions 356 init.gl_version = "3.0";
333 "3.0", // gl version 357 init.has_alpha = true;
334 true, // has alpha 358 init.has_depth = true;
335 true, // has depth 359 init.request_alpha = true;
336 false, // has stencil 360 init.request_depth = true;
337 true, // request alpha 361 init.bind_generates_resource = true;
338 true, // request depth 362 InitDecoderWithCommandLine(init, &command_line);
339 false, // request stencil
340 true, // bind generates resource
341 &command_line);
342 SetupDefaultProgram(); 363 SetupDefaultProgram();
343 SetupTexture(); 364 SetupTexture();
344 SetupVertexBuffer(); 365 SetupVertexBuffer();
345 DoEnableVertexAttribArray(1); 366 DoEnableVertexAttribArray(1);
346 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 367 DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
347 AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId); 368 AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
348 SetupExpectationsForApplyingDefaultDirtyState(); 369 SetupExpectationsForApplyingDefaultDirtyState();
349 370
350 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 371 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
351 .Times(1) 372 .Times(1)
(...skipping 1569 matching lines...) Expand 10 before | Expand all | Expand 10 after
1921 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 1942 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1922 } 1943 }
1923 1944
1924 // Same as GenerateMipmapClearsUnclearedTexture, but with workaround 1945 // Same as GenerateMipmapClearsUnclearedTexture, but with workaround
1925 // |set_texture_filters_before_generating_mipmap|. 1946 // |set_texture_filters_before_generating_mipmap|.
1926 TEST_F(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) { 1947 TEST_F(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) {
1927 CommandLine command_line(0, NULL); 1948 CommandLine command_line(0, NULL);
1928 command_line.AppendSwitchASCII( 1949 command_line.AppendSwitchASCII(
1929 switches::kGpuDriverBugWorkarounds, 1950 switches::kGpuDriverBugWorkarounds,
1930 base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP)); 1951 base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP));
1931 InitDecoderWithCommandLine( 1952 InitState init;
1932 "", // extensions 1953 init.gl_version = "3.0";
1933 "3.0", // gl version 1954 init.bind_generates_resource = true;
1934 false, // has alpha 1955 InitDecoderWithCommandLine(init, &command_line);
1935 false, // has depth
1936 false, // has stencil
1937 false, // request alpha
1938 false, // request depth
1939 false, // request stencil
1940 true, // bind generates resource
1941 &command_line);
1942 1956
1943 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)) 1957 EXPECT_CALL(*gl_, GenerateMipmapEXT(_))
1944 .Times(0); 1958 .Times(0);
1945 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1959 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1946 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1960 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1947 0, 0); 1961 0, 0);
1948 SetupClearTextureExpectations( 1962 SetupClearTextureExpectations(
1949 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D, 1963 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
1950 0, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2); 1964 0, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
1951 EXPECT_CALL(*gl_, TexParameteri( 1965 EXPECT_CALL(*gl_, TexParameteri(
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
2597 false); 2611 false);
2598 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2612 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2599 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2613 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2600 pixels_shm_id, pixels_shm_offset, 2614 pixels_shm_id, pixels_shm_offset,
2601 result_shm_id, kInvalidSharedMemoryOffset, 2615 result_shm_id, kInvalidSharedMemoryOffset,
2602 false); 2616 false);
2603 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2617 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2604 } 2618 }
2605 2619
2606 TEST_F(GLES2DecoderManualInitTest, ReadPixelsAsyncError) { 2620 TEST_F(GLES2DecoderManualInitTest, ReadPixelsAsyncError) {
2607 InitDecoder( 2621 InitState init;
2608 "GL_ARB_sync", // extensions 2622 init.extensions = "GL_ARB_sync";
2609 "opengl es 3.0", // gl version 2623 init.gl_version = "opengl es 3.0";
2610 true, // has alpha 2624 init.has_alpha = true;
2611 false, // has depth 2625 init.request_alpha = true;
2612 false, // has stencil 2626 init.bind_generates_resource = true;
2613 true, // request alpha 2627 InitDecoder(init);
2614 false, // request depth
2615 false, // request stencil
2616 true); // bind generates resource
2617 2628
2618 typedef ReadPixels::Result Result; 2629 typedef ReadPixels::Result Result;
2619 Result* result = GetSharedMemoryAs<Result*>(); 2630 Result* result = GetSharedMemoryAs<Result*>();
2620 2631
2621 const GLsizei kWidth = 4; 2632 const GLsizei kWidth = 4;
2622 const GLsizei kHeight = 4; 2633 const GLsizei kHeight = 4;
2623 uint32 result_shm_id = kSharedMemoryId; 2634 uint32 result_shm_id = kSharedMemoryId;
2624 uint32 result_shm_offset = kSharedMemoryOffset; 2635 uint32 result_shm_offset = kSharedMemoryOffset;
2625 uint32 pixels_shm_id = kSharedMemoryId; 2636 uint32 pixels_shm_id = kSharedMemoryId;
2626 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result); 2637 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
(...skipping 1258 matching lines...) Expand 10 before | Expand all | Expand 10 after
3885 false); // blend_enabled 3896 false); // blend_enabled
3886 3897
3887 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 3898 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3888 .Times(1) 3899 .Times(1)
3889 .RetiresOnSaturation(); 3900 .RetiresOnSaturation();
3890 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd)); 3901 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3891 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3902 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3892 } 3903 }
3893 3904
3894 TEST_F(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) { 3905 TEST_F(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
3895 InitDecoder( 3906 InitState init;
3896 "", // extensions 3907 init.gl_version = "3.0";
3897 "3.0", // gl version 3908 init.has_alpha = true;
3898 true, // has alpha 3909 init.request_alpha = true;
3899 false, // has depth 3910 init.bind_generates_resource = true;
3900 false, // has stencil 3911 InitDecoder(init);
3901 true, // request alpha
3902 false, // request depth
3903 false, // request stencil
3904 true); // bind generates resource
3905 3912
3906 EXPECT_CALL(*gl_, GetError()) 3913 EXPECT_CALL(*gl_, GetError())
3907 .WillOnce(Return(GL_NO_ERROR)) 3914 .WillOnce(Return(GL_NO_ERROR))
3908 .WillOnce(Return(GL_NO_ERROR)) 3915 .WillOnce(Return(GL_NO_ERROR))
3909 .RetiresOnSaturation(); 3916 .RetiresOnSaturation();
3910 typedef GetIntegerv::Result Result; 3917 typedef GetIntegerv::Result Result;
3911 Result* result = static_cast<Result*>(shared_memory_address_); 3918 Result* result = static_cast<Result*>(shared_memory_address_);
3912 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 3919 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
3913 .WillOnce(SetArgumentPointee<1>(8)) 3920 .WillOnce(SetArgumentPointee<1>(8))
3914 .RetiresOnSaturation(); 3921 .RetiresOnSaturation();
3915 result->size = 0; 3922 result->size = 0;
3916 GetIntegerv cmd2; 3923 GetIntegerv cmd2;
3917 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_); 3924 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
3918 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 3925 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3919 EXPECT_EQ( 3926 EXPECT_EQ(
3920 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS), 3927 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
3921 result->GetNumResults()); 3928 result->GetNumResults());
3922 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3929 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3923 EXPECT_EQ(8, result->GetData()[0]); 3930 EXPECT_EQ(8, result->GetData()[0]);
3924 } 3931 }
3925 3932
3926 TEST_F(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) { 3933 TEST_F(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
3927 InitDecoder( 3934 InitState init;
3928 "", // extensions 3935 init.gl_version = "3.0";
3929 "3.0", // gl version 3936 init.has_alpha = true;
3930 true, // has alpha 3937 init.bind_generates_resource = true;
3931 false, // has depth 3938 InitDecoder(init);
3932 false, // has stencil
3933 false, // request alpha
3934 false, // request depth
3935 false, // request stencil
3936 true); // bind generates resource
3937 3939
3938 EXPECT_CALL(*gl_, GetError()) 3940 EXPECT_CALL(*gl_, GetError())
3939 .WillOnce(Return(GL_NO_ERROR)) 3941 .WillOnce(Return(GL_NO_ERROR))
3940 .WillOnce(Return(GL_NO_ERROR)) 3942 .WillOnce(Return(GL_NO_ERROR))
3941 .RetiresOnSaturation(); 3943 .RetiresOnSaturation();
3942 typedef GetIntegerv::Result Result; 3944 typedef GetIntegerv::Result Result;
3943 Result* result = static_cast<Result*>(shared_memory_address_); 3945 Result* result = static_cast<Result*>(shared_memory_address_);
3944 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 3946 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
3945 .WillOnce(SetArgumentPointee<1>(8)) 3947 .WillOnce(SetArgumentPointee<1>(8))
3946 .RetiresOnSaturation(); 3948 .RetiresOnSaturation();
3947 result->size = 0; 3949 result->size = 0;
3948 GetIntegerv cmd2; 3950 GetIntegerv cmd2;
3949 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_); 3951 cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
3950 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 3952 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3951 EXPECT_EQ( 3953 EXPECT_EQ(
3952 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS), 3954 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
3953 result->GetNumResults()); 3955 result->GetNumResults());
3954 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3956 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3955 EXPECT_EQ(0, result->GetData()[0]); 3957 EXPECT_EQ(0, result->GetData()[0]);
3956 } 3958 }
3957 3959
3958 TEST_F(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) { 3960 TEST_F(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
3959 InitDecoder( 3961 InitState init;
3960 "", // extensions 3962 init.gl_version = "3.0";
3961 "3.0", // gl version 3963 init.has_depth = true;
3962 false, // has alpha 3964 init.request_depth = true;
3963 true, // has depth 3965 init.bind_generates_resource = true;
3964 false, // has stencil 3966 InitDecoder(init);
3965 false, // request alpha
3966 true, // request depth
3967 false, // request stencil
3968 true); // bind generates resource
3969 3967
3970 EXPECT_CALL(*gl_, GetError()) 3968 EXPECT_CALL(*gl_, GetError())
3971 .WillOnce(Return(GL_NO_ERROR)) 3969 .WillOnce(Return(GL_NO_ERROR))
3972 .WillOnce(Return(GL_NO_ERROR)) 3970 .WillOnce(Return(GL_NO_ERROR))
3973 .RetiresOnSaturation(); 3971 .RetiresOnSaturation();
3974 typedef GetIntegerv::Result Result; 3972 typedef GetIntegerv::Result Result;
3975 Result* result = static_cast<Result*>(shared_memory_address_); 3973 Result* result = static_cast<Result*>(shared_memory_address_);
3976 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 3974 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
3977 .WillOnce(SetArgumentPointee<1>(24)) 3975 .WillOnce(SetArgumentPointee<1>(24))
3978 .RetiresOnSaturation(); 3976 .RetiresOnSaturation();
3979 result->size = 0; 3977 result->size = 0;
3980 GetIntegerv cmd2; 3978 GetIntegerv cmd2;
3981 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_); 3979 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
3982 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 3980 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
3983 EXPECT_EQ( 3981 EXPECT_EQ(
3984 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS), 3982 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
3985 result->GetNumResults()); 3983 result->GetNumResults());
3986 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3984 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3987 EXPECT_EQ(24, result->GetData()[0]); 3985 EXPECT_EQ(24, result->GetData()[0]);
3988 } 3986 }
3989 3987
3990 TEST_F(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) { 3988 TEST_F(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
3991 InitDecoder( 3989 InitState init;
3992 "", // extensions 3990 init.gl_version = "3.0";
3993 "3.0", // gl version 3991 init.has_depth = true;
3994 false, // has alpha 3992 init.bind_generates_resource = true;
3995 true, // has depth 3993 InitDecoder(init);
3996 false, // has stencil
3997 false, // request alpha
3998 false, // request depth
3999 false, // request stencil
4000 true); // bind generates resource
4001 3994
4002 EXPECT_CALL(*gl_, GetError()) 3995 EXPECT_CALL(*gl_, GetError())
4003 .WillOnce(Return(GL_NO_ERROR)) 3996 .WillOnce(Return(GL_NO_ERROR))
4004 .WillOnce(Return(GL_NO_ERROR)) 3997 .WillOnce(Return(GL_NO_ERROR))
4005 .RetiresOnSaturation(); 3998 .RetiresOnSaturation();
4006 typedef GetIntegerv::Result Result; 3999 typedef GetIntegerv::Result Result;
4007 Result* result = static_cast<Result*>(shared_memory_address_); 4000 Result* result = static_cast<Result*>(shared_memory_address_);
4008 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 4001 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
4009 .WillOnce(SetArgumentPointee<1>(24)) 4002 .WillOnce(SetArgumentPointee<1>(24))
4010 .RetiresOnSaturation(); 4003 .RetiresOnSaturation();
4011 result->size = 0; 4004 result->size = 0;
4012 GetIntegerv cmd2; 4005 GetIntegerv cmd2;
4013 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_); 4006 cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
4014 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4007 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4015 EXPECT_EQ( 4008 EXPECT_EQ(
4016 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS), 4009 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
4017 result->GetNumResults()); 4010 result->GetNumResults());
4018 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4011 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4019 EXPECT_EQ(0, result->GetData()[0]); 4012 EXPECT_EQ(0, result->GetData()[0]);
4020 } 4013 }
4021 4014
4022 TEST_F(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) { 4015 TEST_F(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
4023 InitDecoder( 4016 InitState init;
4024 "", // extensions 4017 init.gl_version = "3.0";
4025 "3.0", // gl version 4018 init.has_stencil = true;
4026 false, // has alpha 4019 init.request_stencil = true;
4027 false, // has depth 4020 init.bind_generates_resource = true;
4028 true, // has stencil 4021 InitDecoder(init);
4029 false, // request alpha
4030 false, // request depth
4031 true, // request stencil
4032 true); // bind generates resource
4033 4022
4034 EXPECT_CALL(*gl_, GetError()) 4023 EXPECT_CALL(*gl_, GetError())
4035 .WillOnce(Return(GL_NO_ERROR)) 4024 .WillOnce(Return(GL_NO_ERROR))
4036 .WillOnce(Return(GL_NO_ERROR)) 4025 .WillOnce(Return(GL_NO_ERROR))
4037 .RetiresOnSaturation(); 4026 .RetiresOnSaturation();
4038 typedef GetIntegerv::Result Result; 4027 typedef GetIntegerv::Result Result;
4039 Result* result = static_cast<Result*>(shared_memory_address_); 4028 Result* result = static_cast<Result*>(shared_memory_address_);
4040 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 4029 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
4041 .WillOnce(SetArgumentPointee<1>(8)) 4030 .WillOnce(SetArgumentPointee<1>(8))
4042 .RetiresOnSaturation(); 4031 .RetiresOnSaturation();
4043 result->size = 0; 4032 result->size = 0;
4044 GetIntegerv cmd2; 4033 GetIntegerv cmd2;
4045 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_); 4034 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
4046 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4035 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4047 EXPECT_EQ( 4036 EXPECT_EQ(
4048 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS), 4037 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
4049 result->GetNumResults()); 4038 result->GetNumResults());
4050 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4039 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4051 EXPECT_EQ(8, result->GetData()[0]); 4040 EXPECT_EQ(8, result->GetData()[0]);
4052 } 4041 }
4053 4042
4054 TEST_F(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) { 4043 TEST_F(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
4055 InitDecoder( 4044 InitState init;
4056 "", // extensions 4045 init.gl_version = "3.0";
4057 "3.0", // gl version 4046 init.has_stencil = true;
4058 false, // has alpha 4047 init.bind_generates_resource = true;
4059 false, // has depth 4048 InitDecoder(init);
4060 true, // has stencil
4061 false, // request alpha
4062 false, // request depth
4063 false, // request stencil
4064 true); // bind generates resource
4065 4049
4066 EXPECT_CALL(*gl_, GetError()) 4050 EXPECT_CALL(*gl_, GetError())
4067 .WillOnce(Return(GL_NO_ERROR)) 4051 .WillOnce(Return(GL_NO_ERROR))
4068 .WillOnce(Return(GL_NO_ERROR)) 4052 .WillOnce(Return(GL_NO_ERROR))
4069 .RetiresOnSaturation(); 4053 .RetiresOnSaturation();
4070 typedef GetIntegerv::Result Result; 4054 typedef GetIntegerv::Result Result;
4071 Result* result = static_cast<Result*>(shared_memory_address_); 4055 Result* result = static_cast<Result*>(shared_memory_address_);
4072 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 4056 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
4073 .WillOnce(SetArgumentPointee<1>(8)) 4057 .WillOnce(SetArgumentPointee<1>(8))
4074 .RetiresOnSaturation(); 4058 .RetiresOnSaturation();
4075 result->size = 0; 4059 result->size = 0;
4076 GetIntegerv cmd2; 4060 GetIntegerv cmd2;
4077 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_); 4061 cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
4078 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4062 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4079 EXPECT_EQ( 4063 EXPECT_EQ(
4080 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS), 4064 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
4081 result->GetNumResults()); 4065 result->GetNumResults());
4082 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4066 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4083 EXPECT_EQ(0, result->GetData()[0]); 4067 EXPECT_EQ(0, result->GetData()[0]);
4084 } 4068 }
4085 4069
4086 TEST_F(GLES2DecoderManualInitTest, DepthEnableWithDepth) { 4070 TEST_F(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
4087 InitDecoder( 4071 InitState init;
4088 "", // extensions 4072 init.gl_version = "3.0";
4089 "3.0", // gl version 4073 init.has_depth = true;
4090 false, // has alpha 4074 init.request_depth = true;
4091 true, // has depth 4075 init.bind_generates_resource = true;
4092 false, // has stencil 4076 InitDecoder(init);
4093 false, // request alpha
4094 true, // request depth
4095 false, // request stencil
4096 true); // bind generates resource
4097 4077
4098 Enable cmd; 4078 Enable cmd;
4099 cmd.Init(GL_DEPTH_TEST); 4079 cmd.Init(GL_DEPTH_TEST);
4100 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4080 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4101 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4081 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4102 4082
4103 SetupDefaultProgram(); 4083 SetupDefaultProgram();
4104 SetupTexture(); 4084 SetupTexture();
4105 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 4085 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
4106 SetupExpectationsForApplyingDirtyState( 4086 SetupExpectationsForApplyingDirtyState(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4140 cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_); 4120 cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
4141 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4121 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4142 EXPECT_EQ( 4122 EXPECT_EQ(
4143 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST), 4123 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
4144 result->GetNumResults()); 4124 result->GetNumResults());
4145 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4125 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4146 EXPECT_EQ(1, result->GetData()[0]); 4126 EXPECT_EQ(1, result->GetData()[0]);
4147 } 4127 }
4148 4128
4149 TEST_F(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) { 4129 TEST_F(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
4150 InitDecoder( 4130 InitState init;
4151 "", // extensions 4131 init.gl_version = "3.0";
4152 "3.0", // gl version 4132 init.has_depth = true;
4153 false, // has alpha 4133 init.bind_generates_resource = true;
4154 true, // has depth 4134 InitDecoder(init);
4155 false, // has stencil
4156 false, // request alpha
4157 false, // request depth
4158 false, // request stencil
4159 true); // bind generates resource
4160 4135
4161 Enable cmd; 4136 Enable cmd;
4162 cmd.Init(GL_DEPTH_TEST); 4137 cmd.Init(GL_DEPTH_TEST);
4163 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4138 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4164 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4139 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4165 4140
4166 SetupDefaultProgram(); 4141 SetupDefaultProgram();
4167 SetupTexture(); 4142 SetupTexture();
4168 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 4143 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
4169 SetupExpectationsForApplyingDirtyState( 4144 SetupExpectationsForApplyingDirtyState(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4202 cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_); 4177 cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
4203 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4178 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4204 EXPECT_EQ( 4179 EXPECT_EQ(
4205 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST), 4180 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
4206 result->GetNumResults()); 4181 result->GetNumResults());
4207 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4182 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4208 EXPECT_EQ(1, result->GetData()[0]); 4183 EXPECT_EQ(1, result->GetData()[0]);
4209 } 4184 }
4210 4185
4211 TEST_F(GLES2DecoderManualInitTest, StencilEnableWithStencil) { 4186 TEST_F(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
4212 InitDecoder( 4187 InitState init;
4213 "", // extensions 4188 init.gl_version = "3.0";
4214 "3.0", // gl version 4189 init.has_stencil = true;
4215 false, // has alpha 4190 init.request_stencil = true;
4216 false, // has depth 4191 init.bind_generates_resource = true;
4217 true, // has stencil 4192 InitDecoder(init);
4218 false, // request alpha
4219 false, // request depth
4220 true, // request stencil
4221 true); // bind generates resource
4222 4193
4223 Enable cmd; 4194 Enable cmd;
4224 cmd.Init(GL_STENCIL_TEST); 4195 cmd.Init(GL_STENCIL_TEST);
4225 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4196 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4226 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4197 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4227 4198
4228 SetupDefaultProgram(); 4199 SetupDefaultProgram();
4229 SetupTexture(); 4200 SetupTexture();
4230 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 4201 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
4231 SetupExpectationsForApplyingDirtyState( 4202 SetupExpectationsForApplyingDirtyState(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4264 cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_); 4235 cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
4265 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4236 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4266 EXPECT_EQ( 4237 EXPECT_EQ(
4267 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST), 4238 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
4268 result->GetNumResults()); 4239 result->GetNumResults());
4269 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4240 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4270 EXPECT_EQ(1, result->GetData()[0]); 4241 EXPECT_EQ(1, result->GetData()[0]);
4271 } 4242 }
4272 4243
4273 TEST_F(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) { 4244 TEST_F(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
4274 InitDecoder( 4245 InitState init;
4275 "", // extensions 4246 init.gl_version = "3.0";
4276 "3.0", // gl version 4247 init.has_stencil = true;
4277 false, // has alpha 4248 init.bind_generates_resource = true;
4278 false, // has depth 4249 InitDecoder(init);
4279 true, // has stencil
4280 false, // request alpha
4281 false, // request depth
4282 false, // request stencil
4283 true); // bind generates resource
4284 4250
4285 Enable cmd; 4251 Enable cmd;
4286 cmd.Init(GL_STENCIL_TEST); 4252 cmd.Init(GL_STENCIL_TEST);
4287 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4253 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4288 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4254 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4289 4255
4290 SetupDefaultProgram(); 4256 SetupDefaultProgram();
4291 SetupTexture(); 4257 SetupTexture();
4292 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 4258 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
4293 SetupExpectationsForApplyingDirtyState( 4259 SetupExpectationsForApplyingDirtyState(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4326 cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_); 4292 cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
4327 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4293 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4328 EXPECT_EQ( 4294 EXPECT_EQ(
4329 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST), 4295 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
4330 result->GetNumResults()); 4296 result->GetNumResults());
4331 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4297 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4332 EXPECT_EQ(1, result->GetData()[0]); 4298 EXPECT_EQ(1, result->GetData()[0]);
4333 } 4299 }
4334 4300
4335 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilReportsCorrectValues) { 4301 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilReportsCorrectValues) {
4336 InitDecoder( 4302 InitState init;
4337 "GL_OES_packed_depth_stencil", // extensions 4303 init.extensions = "GL_OES_packed_depth_stencil";
4338 "opengl es 2.0", // gl version 4304 init.gl_version = "opengl es 2.0";
4339 false, // has alpha 4305 init.has_depth = true;
4340 true, // has depth 4306 init.has_stencil = true;
4341 true, // has stencil 4307 init.request_depth = true;
4342 false, // request alpha 4308 init.request_stencil = true;
4343 true, // request depth 4309 init.bind_generates_resource = true;
4344 true, // request stencil 4310 InitDecoder(init);
4345 true); // bind generates resource
4346 4311
4347 EXPECT_CALL(*gl_, GetError()) 4312 EXPECT_CALL(*gl_, GetError())
4348 .WillOnce(Return(GL_NO_ERROR)) 4313 .WillOnce(Return(GL_NO_ERROR))
4349 .WillOnce(Return(GL_NO_ERROR)) 4314 .WillOnce(Return(GL_NO_ERROR))
4350 .WillOnce(Return(GL_NO_ERROR)) 4315 .WillOnce(Return(GL_NO_ERROR))
4351 .WillOnce(Return(GL_NO_ERROR)) 4316 .WillOnce(Return(GL_NO_ERROR))
4352 .RetiresOnSaturation(); 4317 .RetiresOnSaturation();
4353 typedef GetIntegerv::Result Result; 4318 typedef GetIntegerv::Result Result;
4354 Result* result = static_cast<Result*>(shared_memory_address_); 4319 Result* result = static_cast<Result*>(shared_memory_address_);
4355 result->size = 0; 4320 result->size = 0;
(...skipping 15 matching lines...) Expand all
4371 .RetiresOnSaturation(); 4336 .RetiresOnSaturation();
4372 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4337 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4373 EXPECT_EQ( 4338 EXPECT_EQ(
4374 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS), 4339 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
4375 result->GetNumResults()); 4340 result->GetNumResults());
4376 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4341 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4377 EXPECT_EQ(24, result->GetData()[0]); 4342 EXPECT_EQ(24, result->GetData()[0]);
4378 } 4343 }
4379 4344
4380 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilNoRequestedStencil) { 4345 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilNoRequestedStencil) {
4381 InitDecoder( 4346 InitState init;
4382 "GL_OES_packed_depth_stencil", // extensions 4347 init.extensions = "GL_OES_packed_depth_stencil";
4383 "opengl es 2.0", // gl version 4348 init.gl_version = "opengl es 2.0";
4384 false, // has alpha 4349 init.has_depth = true;
4385 true, // has depth 4350 init.has_stencil = true;
4386 true, // has stencil 4351 init.request_depth = true;
4387 false, // request alpha 4352 init.bind_generates_resource = true;
4388 true, // request depth 4353 InitDecoder(init);
4389 false, // request stencil
4390 true); // bind generates resource
4391 4354
4392 EXPECT_CALL(*gl_, GetError()) 4355 EXPECT_CALL(*gl_, GetError())
4393 .WillOnce(Return(GL_NO_ERROR)) 4356 .WillOnce(Return(GL_NO_ERROR))
4394 .WillOnce(Return(GL_NO_ERROR)) 4357 .WillOnce(Return(GL_NO_ERROR))
4395 .WillOnce(Return(GL_NO_ERROR)) 4358 .WillOnce(Return(GL_NO_ERROR))
4396 .WillOnce(Return(GL_NO_ERROR)) 4359 .WillOnce(Return(GL_NO_ERROR))
4397 .RetiresOnSaturation(); 4360 .RetiresOnSaturation();
4398 typedef GetIntegerv::Result Result; 4361 typedef GetIntegerv::Result Result;
4399 Result* result = static_cast<Result*>(shared_memory_address_); 4362 Result* result = static_cast<Result*>(shared_memory_address_);
4400 result->size = 0; 4363 result->size = 0;
(...skipping 15 matching lines...) Expand all
4416 .RetiresOnSaturation(); 4379 .RetiresOnSaturation();
4417 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4380 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4418 EXPECT_EQ( 4381 EXPECT_EQ(
4419 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS), 4382 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
4420 result->GetNumResults()); 4383 result->GetNumResults());
4421 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4384 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4422 EXPECT_EQ(24, result->GetData()[0]); 4385 EXPECT_EQ(24, result->GetData()[0]);
4423 } 4386 }
4424 4387
4425 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) { 4388 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) {
4426 InitDecoder( 4389 InitState init;
4427 "GL_OES_packed_depth_stencil", // extensions 4390 init.extensions = "GL_OES_packed_depth_stencil";
4428 "opengl es 2.0", // gl version 4391 init.gl_version = "opengl es 2.0";
4429 false, // has alpha 4392 init.bind_generates_resource = true;
4430 false, // has depth 4393 InitDecoder(init);
4431 false, // has stencil
4432 false, // request alpha
4433 false, // request depth
4434 false, // request stencil
4435 true); // bind generates resource
4436 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4394 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
4437 kServiceRenderbufferId); 4395 kServiceRenderbufferId);
4438 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 4396 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
4439 kServiceFramebufferId); 4397 kServiceFramebufferId);
4440 4398
4441 EXPECT_CALL(*gl_, GetError()) 4399 EXPECT_CALL(*gl_, GetError())
4442 .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage 4400 .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
4443 .WillOnce(Return(GL_NO_ERROR)) 4401 .WillOnce(Return(GL_NO_ERROR))
4444 .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer 4402 .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
4445 .WillOnce(Return(GL_NO_ERROR)) 4403 .WillOnce(Return(GL_NO_ERROR))
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
4488 .RetiresOnSaturation(); 4446 .RetiresOnSaturation();
4489 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4447 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
4490 EXPECT_EQ( 4448 EXPECT_EQ(
4491 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS), 4449 decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
4492 result->GetNumResults()); 4450 result->GetNumResults());
4493 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4451 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4494 EXPECT_EQ(24, result->GetData()[0]); 4452 EXPECT_EQ(24, result->GetData()[0]);
4495 } 4453 }
4496 4454
4497 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) { 4455 TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
4498 InitDecoder( 4456 InitState init;
4499 "GL_OES_packed_depth_stencil", // extensions 4457 init.extensions = "GL_OES_packed_depth_stencil";
4500 "opengl es 2.0", // gl version 4458 init.gl_version = "opengl es 2.0";
4501 false, // has alpha 4459 init.bind_generates_resource = true;
4502 false, // has depth 4460 InitDecoder(init);
4503 false, // has stencil
4504 false, // request alpha
4505 false, // request depth
4506 false, // request stencil
4507 true); // bind generates resource
4508 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4461 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
4509 kServiceRenderbufferId); 4462 kServiceRenderbufferId);
4510 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 4463 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
4511 kServiceFramebufferId); 4464 kServiceFramebufferId);
4512 4465
4513 EXPECT_CALL(*gl_, GetError()) 4466 EXPECT_CALL(*gl_, GetError())
4514 .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage 4467 .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
4515 .WillOnce(Return(GL_NO_ERROR)) 4468 .WillOnce(Return(GL_NO_ERROR))
4516 .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer 4469 .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
4517 .WillOnce(Return(GL_NO_ERROR)) 4470 .WillOnce(Return(GL_NO_ERROR))
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
4892 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1); 4845 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
4893 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4846 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4894 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 4847 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4895 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1); 4848 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1);
4896 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4849 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4897 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 4850 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4898 } 4851 }
4899 4852
4900 TEST_F(GLES2DecoderManualInitTest, 4853 TEST_F(GLES2DecoderManualInitTest,
4901 RenderbufferStorageMultisampleCHROMIUMGLError) { 4854 RenderbufferStorageMultisampleCHROMIUMGLError) {
4902 InitDecoder( 4855 InitState init;
4903 "GL_EXT_framebuffer_multisample", // extensions 4856 init.extensions = "GL_EXT_framebuffer_multisample";
4904 "2.1", // gl version 4857 init.gl_version = "2.1";
4905 false, // has alpha 4858 init.bind_generates_resource = true;
4906 false, // has depth 4859 InitDecoder(init);
4907 false, // has stencil
4908 false, // request alpha
4909 false, // request depth
4910 false, // request stencil
4911 true); // bind generates resource
4912 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4860 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
4913 kServiceRenderbufferId); 4861 kServiceRenderbufferId);
4914 EXPECT_CALL(*gl_, GetError()) 4862 EXPECT_CALL(*gl_, GetError())
4915 .WillOnce(Return(GL_NO_ERROR)) 4863 .WillOnce(Return(GL_NO_ERROR))
4916 .WillOnce(Return(GL_OUT_OF_MEMORY)) 4864 .WillOnce(Return(GL_OUT_OF_MEMORY))
4917 .RetiresOnSaturation(); 4865 .RetiresOnSaturation();
4918 EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT( 4866 EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(
4919 GL_RENDERBUFFER, 1, GL_RGBA, 100, 50)) 4867 GL_RENDERBUFFER, 1, GL_RGBA, 100, 50))
4920 .Times(1) 4868 .Times(1)
4921 .RetiresOnSaturation(); 4869 .RetiresOnSaturation();
4922 RenderbufferStorageMultisampleCHROMIUM cmd; 4870 RenderbufferStorageMultisampleCHROMIUM cmd;
4923 cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 100, 50); 4871 cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 100, 50);
4924 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4872 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4925 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 4873 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
4926 } 4874 }
4927 4875
4928 TEST_F(GLES2DecoderManualInitTest, 4876 TEST_F(GLES2DecoderManualInitTest,
4929 RenderbufferStorageMultisampleCHROMIUMBadArgs) { 4877 RenderbufferStorageMultisampleCHROMIUMBadArgs) {
4930 InitDecoder( 4878 InitState init;
4931 "GL_EXT_framebuffer_multisample", // extensions 4879 init.extensions = "GL_EXT_framebuffer_multisample";
4932 "2.1", // gl version 4880 init.gl_version = "2.1";
4933 false, // has alpha 4881 init.bind_generates_resource = true;
4934 false, // has depth 4882 InitDecoder(init);
4935 false, // has stencil
4936 false, // request alpha
4937 false, // request depth
4938 false, // request stencil
4939 true); // bind generates resource
4940 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4883 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
4941 kServiceRenderbufferId); 4884 kServiceRenderbufferId);
4942 EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(_, _, _, _, _)) 4885 EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(_, _, _, _, _))
4943 .Times(0) 4886 .Times(0)
4944 .RetiresOnSaturation(); 4887 .RetiresOnSaturation();
4945 RenderbufferStorageMultisampleCHROMIUM cmd; 4888 RenderbufferStorageMultisampleCHROMIUM cmd;
4946 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples + 1, 4889 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples + 1,
4947 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1); 4890 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
4948 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4891 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4949 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 4892 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4950 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples, 4893 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
4951 GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1); 4894 GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
4952 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4895 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4953 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 4896 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4954 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples, 4897 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
4955 GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1); 4898 GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1);
4956 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4899 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4957 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 4900 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4958 } 4901 }
4959 4902
4960 TEST_F(GLES2DecoderManualInitTest, RenderbufferStorageMultisampleCHROMIUM) { 4903 TEST_F(GLES2DecoderManualInitTest, RenderbufferStorageMultisampleCHROMIUM) {
4961 InitDecoder( 4904 InitState init;
4962 "GL_EXT_framebuffer_multisample", // extensions 4905 init.extensions = "GL_EXT_framebuffer_multisample";
4963 "2.1", // gl version 4906 init.gl_version = "2.1";
4964 false, // has alpha 4907 InitDecoder(init);
4965 false, // has depth
4966 false, // has stencil
4967 false, // request alpha
4968 false, // request depth
4969 false, // request stencil
4970 false); // bind generates resource
4971 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4908 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
4972 kServiceRenderbufferId); 4909 kServiceRenderbufferId);
4973 InSequence sequence; 4910 InSequence sequence;
4974 EXPECT_CALL(*gl_, GetError()) 4911 EXPECT_CALL(*gl_, GetError())
4975 .WillOnce(Return(GL_NO_ERROR)) 4912 .WillOnce(Return(GL_NO_ERROR))
4976 .RetiresOnSaturation(); 4913 .RetiresOnSaturation();
4977 EXPECT_CALL( 4914 EXPECT_CALL(
4978 *gl_, 4915 *gl_,
4979 RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, 4916 RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
4980 TestHelper::kMaxSamples, 4917 TestHelper::kMaxSamples,
4981 GL_RGBA, 4918 GL_RGBA,
4982 TestHelper::kMaxRenderbufferSize, 4919 TestHelper::kMaxRenderbufferSize,
4983 1)) 4920 1))
4984 .Times(1) 4921 .Times(1)
4985 .RetiresOnSaturation(); 4922 .RetiresOnSaturation();
4986 EXPECT_CALL(*gl_, GetError()) 4923 EXPECT_CALL(*gl_, GetError())
4987 .WillOnce(Return(GL_NO_ERROR)) 4924 .WillOnce(Return(GL_NO_ERROR))
4988 .RetiresOnSaturation(); 4925 .RetiresOnSaturation();
4989 RenderbufferStorageMultisampleCHROMIUM cmd; 4926 RenderbufferStorageMultisampleCHROMIUM cmd;
4990 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples, 4927 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
4991 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1); 4928 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
4992 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4929 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4993 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4930 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4994 } 4931 }
4995 4932
4996 TEST_F(GLES2DecoderManualInitTest, 4933 TEST_F(GLES2DecoderManualInitTest,
4997 RenderbufferStorageMultisampleEXTNotSupported) { 4934 RenderbufferStorageMultisampleEXTNotSupported) {
4998 InitDecoder( 4935 InitState init;
4999 "GL_EXT_framebuffer_multisample", // extensions 4936 init.extensions = "GL_EXT_framebuffer_multisample";
5000 "2.1", // gl version 4937 init.gl_version = "2.1";
5001 false, // has alpha 4938 init.bind_generates_resource = true;
5002 false, // has depth 4939 InitDecoder(init);
5003 false, // has stencil
5004 false, // request alpha
5005 false, // request depth
5006 false, // request stencil
5007 false); // bind generates resource
5008 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 4940 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
5009 kServiceRenderbufferId); 4941 kServiceRenderbufferId);
5010 InSequence sequence; 4942 InSequence sequence;
5011 // GL_EXT_framebuffer_multisample uses RenderbufferStorageMultisampleCHROMIUM. 4943 // GL_EXT_framebuffer_multisample uses RenderbufferStorageMultisampleCHROMIUM.
5012 RenderbufferStorageMultisampleEXT cmd; 4944 RenderbufferStorageMultisampleEXT cmd;
5013 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples, 4945 cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
5014 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1); 4946 GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
5015 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4947 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5016 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 4948 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5017 } 4949 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
5107 static bool ValueInArray(GLint value, GLint* array, GLint count) { 5039 static bool ValueInArray(GLint value, GLint* array, GLint count) {
5108 for (GLint ii = 0; ii < count; ++ii) { 5040 for (GLint ii = 0; ii < count; ++ii) {
5109 if (array[ii] == value) { 5041 if (array[ii] == value) {
5110 return true; 5042 return true;
5111 } 5043 }
5112 } 5044 }
5113 return false; 5045 return false;
5114 } 5046 }
5115 5047
5116 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormats) { 5048 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormats) {
5117 InitDecoder( 5049 InitState init;
5118 "GL_EXT_texture_compression_s3tc", // extensions 5050 init.extensions = "GL_EXT_texture_compression_s3tc";
5119 "3.0", // gl version 5051 init.gl_version = "3.0";
5120 false, // has alpha 5052 init.bind_generates_resource = true;
5121 false, // has depth 5053 InitDecoder(init);
5122 false, // has stencil
5123 false, // request alpha
5124 false, // request depth
5125 false, // request stencil
5126 true); // bind generates resource
5127 5054
5128 EXPECT_CALL(*gl_, GetError()) 5055 EXPECT_CALL(*gl_, GetError())
5129 .WillOnce(Return(GL_NO_ERROR)) 5056 .WillOnce(Return(GL_NO_ERROR))
5130 .WillOnce(Return(GL_NO_ERROR)) 5057 .WillOnce(Return(GL_NO_ERROR))
5131 .WillOnce(Return(GL_NO_ERROR)) 5058 .WillOnce(Return(GL_NO_ERROR))
5132 .WillOnce(Return(GL_NO_ERROR)) 5059 .WillOnce(Return(GL_NO_ERROR))
5133 .RetiresOnSaturation(); 5060 .RetiresOnSaturation();
5134 5061
5135 typedef GetIntegerv::Result Result; 5062 typedef GetIntegerv::Result Result;
5136 Result* result = static_cast<Result*>(shared_memory_address_); 5063 Result* result = static_cast<Result*>(shared_memory_address_);
(...skipping 28 matching lines...) Expand all
5165 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 5092 GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
5166 result->GetData(), result->GetNumResults())); 5093 result->GetData(), result->GetNumResults()));
5167 EXPECT_TRUE(ValueInArray( 5094 EXPECT_TRUE(ValueInArray(
5168 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 5095 GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
5169 result->GetData(), result->GetNumResults())); 5096 result->GetData(), result->GetNumResults()));
5170 5097
5171 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5098 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5172 } 5099 }
5173 5100
5174 TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) { 5101 TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) {
5175 InitDecoder( 5102 InitState init;
5176 "", // extensions 5103 init.gl_version = "3.0";
5177 "3.0", // gl version 5104 init.bind_generates_resource = true;
5178 false, // has alpha 5105 InitDecoder(init);
5179 false, // has depth
5180 false, // has stencil
5181 false, // request alpha
5182 false, // request depth
5183 false, // request stencil
5184 true); // bind generates resource
5185 5106
5186 EXPECT_CALL(*gl_, GetError()) 5107 EXPECT_CALL(*gl_, GetError())
5187 .WillOnce(Return(GL_NO_ERROR)) 5108 .WillOnce(Return(GL_NO_ERROR))
5188 .WillOnce(Return(GL_NO_ERROR)) 5109 .WillOnce(Return(GL_NO_ERROR))
5189 .WillOnce(Return(GL_NO_ERROR)) 5110 .WillOnce(Return(GL_NO_ERROR))
5190 .WillOnce(Return(GL_NO_ERROR)) 5111 .WillOnce(Return(GL_NO_ERROR))
5191 .RetiresOnSaturation(); 5112 .RetiresOnSaturation();
5192 5113
5193 typedef GetIntegerv::Result Result; 5114 typedef GetIntegerv::Result Result;
5194 Result* result = static_cast<Result*>(shared_memory_address_); 5115 Result* result = static_cast<Result*>(shared_memory_address_);
(...skipping 15 matching lines...) Expand all
5210 cmd.Init( 5131 cmd.Init(
5211 GL_COMPRESSED_TEXTURE_FORMATS, 5132 GL_COMPRESSED_TEXTURE_FORMATS,
5212 shared_memory_id_, shared_memory_offset_); 5133 shared_memory_id_, shared_memory_offset_);
5213 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5134 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5214 EXPECT_EQ(num_formats, result->GetNumResults()); 5135 EXPECT_EQ(num_formats, result->GetNumResults());
5215 5136
5216 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5137 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5217 } 5138 }
5218 5139
5219 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) { 5140 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
5220 InitDecoder( 5141 InitState init;
5221 "GL_EXT_texture_compression_s3tc", // extensions 5142 init.extensions = "GL_EXT_texture_compression_s3tc";
5222 "3.0", // gl version 5143 init.gl_version = "3.0";
5223 false, // has alpha 5144 init.bind_generates_resource = true;
5224 false, // has depth 5145 InitDecoder(init);
5225 false, // has stencil
5226 false, // request alpha
5227 false, // request depth
5228 false, // request stencil
5229 true); // bind generates resource
5230 5146
5231 const uint32 kBadBucketId = 123; 5147 const uint32 kBadBucketId = 123;
5232 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 5148 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5233 CompressedTexImage2DBucket cmd; 5149 CompressedTexImage2DBucket cmd;
5234 cmd.Init( 5150 cmd.Init(
5235 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0, 5151 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0,
5236 kBadBucketId); 5152 kBadBucketId);
5237 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 5153 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
5238 CompressedTexSubImage2DBucket cmd2; 5154 CompressedTexSubImage2DBucket cmd2;
5239 cmd2.Init( 5155 cmd2.Init(
5240 GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 5156 GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
5241 kBadBucketId); 5157 kBadBucketId);
5242 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 5158 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
5243 } 5159 }
5244 5160
5245 namespace { 5161 namespace {
5246 5162
5247 struct S3TCTestData { 5163 struct S3TCTestData {
5248 GLenum format; 5164 GLenum format;
5249 size_t block_size; 5165 size_t block_size;
5250 }; 5166 };
5251 5167
5252 } // anonymous namespace. 5168 } // anonymous namespace.
5253 5169
5254 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) { 5170 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
5255 InitDecoder( 5171 InitState init;
5256 "GL_EXT_texture_compression_s3tc", // extensions 5172 init.extensions = "GL_EXT_texture_compression_s3tc";
5257 "3.0", // gl version 5173 init.gl_version = "3.0";
5258 false, // has alpha 5174 init.bind_generates_resource = true;
5259 false, // has depth 5175 InitDecoder(init);
5260 false, // has stencil
5261 false, // request alpha
5262 false, // request depth
5263 false, // request stencil
5264 true); // bind generates resource
5265 const uint32 kBucketId = 123; 5176 const uint32 kBucketId = 123;
5266 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId); 5177 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
5267 ASSERT_TRUE(bucket != NULL); 5178 ASSERT_TRUE(bucket != NULL);
5268 5179
5269 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 5180 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5270 5181
5271 static const S3TCTestData test_data[] = { 5182 static const S3TCTestData test_data[] = {
5272 { GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 8, }, 5183 { GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 8, },
5273 { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 8, }, 5184 { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 8, },
5274 { GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 16, }, 5185 { GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 16, },
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
5400 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd)); 5311 EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
5401 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5312 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5402 } 5313 }
5403 } 5314 }
5404 } 5315 }
5405 } 5316 }
5406 } 5317 }
5407 } 5318 }
5408 5319
5409 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) { 5320 TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
5410 InitDecoder( 5321 InitState init;
5411 "GL_OES_compressed_ETC1_RGB8_texture", // extensions 5322 init.extensions = "GL_OES_compressed_ETC1_RGB8_texture";
5412 "opengl es 2.0", // gl version 5323 init.gl_version = "opengl es 2.0";
5413 false, // has alpha 5324 init.bind_generates_resource = true;
5414 false, // has depth 5325 InitDecoder(init);
5415 false, // has stencil
5416 false, // request alpha
5417 false, // request depth
5418 false, // request stencil
5419 true); // bind generates resource
5420 const uint32 kBucketId = 123; 5326 const uint32 kBucketId = 123;
5421 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId); 5327 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
5422 ASSERT_TRUE(bucket != NULL); 5328 ASSERT_TRUE(bucket != NULL);
5423 5329
5424 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 5330 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5425 5331
5426 const GLenum kFormat = GL_ETC1_RGB8_OES; 5332 const GLenum kFormat = GL_ETC1_RGB8_OES;
5427 const size_t kBlockSize = 8; 5333 const size_t kBlockSize = 8;
5428 5334
5429 CompressedTexImage2DBucket cmd; 5335 CompressedTexImage2DBucket cmd;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
5473 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5379 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5474 5380
5475 // Test CopyTexSubImage not allowed for ETC1 compressed texture 5381 // Test CopyTexSubImage not allowed for ETC1 compressed texture
5476 CopyTexSubImage2D copy_cmd; 5382 CopyTexSubImage2D copy_cmd;
5477 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4); 5383 copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
5478 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd)); 5384 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd));
5479 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5385 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5480 } 5386 }
5481 5387
5482 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormatsETC1) { 5388 TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormatsETC1) {
5483 InitDecoder( 5389 InitState init;
5484 "GL_OES_compressed_ETC1_RGB8_texture", // extensions 5390 init.extensions = "GL_OES_compressed_ETC1_RGB8_texture";
5485 "opengl es 2.0", // gl version 5391 init.gl_version = "opengl es 2.0";
5486 false, // has alpha 5392 init.bind_generates_resource = true;
5487 false, // has depth 5393 InitDecoder(init);
5488 false, // has stencil
5489 false, // request alpha
5490 false, // request depth
5491 false, // request stencil
5492 true); // bind generates resource
5493 5394
5494 EXPECT_CALL(*gl_, GetError()) 5395 EXPECT_CALL(*gl_, GetError())
5495 .WillOnce(Return(GL_NO_ERROR)) 5396 .WillOnce(Return(GL_NO_ERROR))
5496 .WillOnce(Return(GL_NO_ERROR)) 5397 .WillOnce(Return(GL_NO_ERROR))
5497 .WillOnce(Return(GL_NO_ERROR)) 5398 .WillOnce(Return(GL_NO_ERROR))
5498 .WillOnce(Return(GL_NO_ERROR)) 5399 .WillOnce(Return(GL_NO_ERROR))
5499 .RetiresOnSaturation(); 5400 .RetiresOnSaturation();
5500 5401
5501 typedef GetIntegerv::Result Result; 5402 typedef GetIntegerv::Result Result;
5502 Result* result = static_cast<Result*>(shared_memory_address_); 5403 Result* result = static_cast<Result*>(shared_memory_address_);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
5549 EXPECT_EQ(sizeof(ProgramInfoHeader), bucket->size()); 5450 EXPECT_EQ(sizeof(ProgramInfoHeader), bucket->size());
5550 ProgramInfoHeader* info = bucket->GetDataAs<ProgramInfoHeader*>( 5451 ProgramInfoHeader* info = bucket->GetDataAs<ProgramInfoHeader*>(
5551 0, sizeof(ProgramInfoHeader)); 5452 0, sizeof(ProgramInfoHeader));
5552 ASSERT_TRUE(info != 0); 5453 ASSERT_TRUE(info != 0);
5553 EXPECT_EQ(0u, info->link_status); 5454 EXPECT_EQ(0u, info->link_status);
5554 EXPECT_EQ(0u, info->num_attribs); 5455 EXPECT_EQ(0u, info->num_attribs);
5555 EXPECT_EQ(0u, info->num_uniforms); 5456 EXPECT_EQ(0u, info->num_uniforms);
5556 } 5457 }
5557 5458
5558 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) { 5459 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) {
5559 InitDecoder( 5460 InitState init;
5560 "GL_OES_EGL_image_external", // extensions 5461 init.extensions = "GL_OES_EGL_image_external";
5561 "opengl es 2.0", // gl version 5462 init.gl_version = "opengl es 2.0";
5562 false, // has alpha 5463 init.bind_generates_resource = true;
5563 false, // has depth 5464 InitDecoder(init);
5564 false, // has stencil
5565 false, // request alpha
5566 false, // request depth
5567 false, // request stencil
5568 true); // bind generates resource
5569 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId)); 5465 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
5570 EXPECT_CALL(*gl_, GenTextures(1, _)) 5466 EXPECT_CALL(*gl_, GenTextures(1, _))
5571 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 5467 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
5572 BindTexture cmd; 5468 BindTexture cmd;
5573 cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId); 5469 cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
5574 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5470 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5575 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5471 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5576 TextureRef* texture_ref = GetTexture(kNewClientId); 5472 TextureRef* texture_ref = GetTexture(kNewClientId);
5577 EXPECT_TRUE(texture_ref != NULL); 5473 EXPECT_TRUE(texture_ref != NULL);
5578 EXPECT_TRUE(texture_ref->texture()->target() == GL_TEXTURE_EXTERNAL_OES); 5474 EXPECT_TRUE(texture_ref->texture()->target() == GL_TEXTURE_EXTERNAL_OES);
5579 } 5475 }
5580 5476
5581 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) { 5477 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
5582 InitDecoder( 5478 InitState init;
5583 "GL_OES_EGL_image_external", // extensions 5479 init.extensions = "GL_OES_EGL_image_external";
5584 "opengl es 2.0", // gl version 5480 init.gl_version = "opengl es 2.0";
5585 false, // has alpha 5481 init.bind_generates_resource = true;
5586 false, // has depth 5482 InitDecoder(init);
5587 false, // has stencil
5588 false, // request alpha
5589 false, // request depth
5590 false, // request stencil
5591 true); // bind generates resource
5592 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5483 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5593 5484
5594 EXPECT_CALL(*gl_, GetError()) 5485 EXPECT_CALL(*gl_, GetError())
5595 .WillOnce(Return(GL_NO_ERROR)) 5486 .WillOnce(Return(GL_NO_ERROR))
5596 .WillOnce(Return(GL_NO_ERROR)) 5487 .WillOnce(Return(GL_NO_ERROR))
5597 .RetiresOnSaturation(); 5488 .RetiresOnSaturation();
5598 typedef GetIntegerv::Result Result; 5489 typedef GetIntegerv::Result Result;
5599 Result* result = static_cast<Result*>(shared_memory_address_); 5490 Result* result = static_cast<Result*>(shared_memory_address_);
5600 EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, 5491 EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES,
5601 result->GetData())) 5492 result->GetData()))
5602 .Times(0); 5493 .Times(0);
5603 result->size = 0; 5494 result->size = 0;
5604 GetIntegerv cmd; 5495 GetIntegerv cmd;
5605 cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES, 5496 cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES,
5606 shared_memory_id_, 5497 shared_memory_id_,
5607 shared_memory_offset_); 5498 shared_memory_offset_);
5608 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5499 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5609 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( 5500 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
5610 GL_TEXTURE_BINDING_EXTERNAL_OES), result->GetNumResults()); 5501 GL_TEXTURE_BINDING_EXTERNAL_OES), result->GetNumResults());
5611 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5502 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5612 EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]); 5503 EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
5613 } 5504 }
5614 5505
5615 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureDefaults) { 5506 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureDefaults) {
5616 InitDecoder( 5507 InitState init;
5617 "GL_OES_EGL_image_external", // extensions 5508 init.extensions = "GL_OES_EGL_image_external";
5618 "opengl es 2.0", // gl version 5509 init.gl_version = "opengl es 2.0";
5619 false, // has alpha 5510 init.bind_generates_resource = true;
5620 false, // has depth 5511 InitDecoder(init);
5621 false, // has stencil
5622 false, // request alpha
5623 false, // request depth
5624 false, // request stencil
5625 true); // bind generates resource
5626 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5512 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5627 5513
5628 TextureRef* texture_ref = GetTexture(client_texture_id_); 5514 TextureRef* texture_ref = GetTexture(client_texture_id_);
5629 EXPECT_TRUE(texture_ref != NULL); 5515 EXPECT_TRUE(texture_ref != NULL);
5630 Texture* texture = texture_ref->texture(); 5516 Texture* texture = texture_ref->texture();
5631 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES); 5517 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5632 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5518 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5633 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5519 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5634 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5520 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5635 } 5521 }
5636 5522
5637 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) { 5523 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
5638 InitDecoder( 5524 InitState init;
5639 "GL_OES_EGL_image_external", // extensions 5525 init.extensions = "GL_OES_EGL_image_external";
5640 "opengl es 2.0", // gl version 5526 init.gl_version = "opengl es 2.0";
5641 false, // has alpha 5527 init.bind_generates_resource = true;
5642 false, // has depth 5528 InitDecoder(init);
5643 false, // has stencil
5644 false, // request alpha
5645 false, // request depth
5646 false, // request stencil
5647 true); // bind generates resource
5648
5649 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5529 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5650 5530
5651 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES, 5531 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
5652 GL_TEXTURE_MIN_FILTER, 5532 GL_TEXTURE_MIN_FILTER,
5653 GL_NEAREST)); 5533 GL_NEAREST));
5654 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES, 5534 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
5655 GL_TEXTURE_MIN_FILTER, 5535 GL_TEXTURE_MIN_FILTER,
5656 GL_LINEAR)); 5536 GL_LINEAR));
5657 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES, 5537 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
5658 GL_TEXTURE_WRAP_S, 5538 GL_TEXTURE_WRAP_S,
(...skipping 29 matching lines...) Expand all
5688 TextureRef* texture_ref = GetTexture(client_texture_id_); 5568 TextureRef* texture_ref = GetTexture(client_texture_id_);
5689 EXPECT_TRUE(texture_ref != NULL); 5569 EXPECT_TRUE(texture_ref != NULL);
5690 Texture* texture = texture_ref->texture(); 5570 Texture* texture = texture_ref->texture();
5691 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES); 5571 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5692 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5572 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5693 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5573 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5694 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5574 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5695 } 5575 }
5696 5576
5697 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) { 5577 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
5698 InitDecoder( 5578 InitState init;
5699 "GL_OES_EGL_image_external", // extensions 5579 init.extensions = "GL_OES_EGL_image_external";
5700 "opengl es 2.0", // gl version 5580 init.gl_version = "opengl es 2.0";
5701 false, // has alpha 5581 init.bind_generates_resource = true;
5702 false, // has depth 5582 InitDecoder(init);
5703 false, // has stencil
5704 false, // request alpha
5705 false, // request depth
5706 false, // request stencil
5707 true); // bind generates resource
5708
5709 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5583 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5710 5584
5711 TexParameteri cmd; 5585 TexParameteri cmd;
5712 cmd.Init(GL_TEXTURE_EXTERNAL_OES, 5586 cmd.Init(GL_TEXTURE_EXTERNAL_OES,
5713 GL_TEXTURE_MIN_FILTER, 5587 GL_TEXTURE_MIN_FILTER,
5714 GL_NEAREST_MIPMAP_NEAREST); 5588 GL_NEAREST_MIPMAP_NEAREST);
5715 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5589 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5716 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 5590 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5717 5591
5718 cmd.Init(GL_TEXTURE_EXTERNAL_OES, 5592 cmd.Init(GL_TEXTURE_EXTERNAL_OES,
(...skipping 11 matching lines...) Expand all
5730 TextureRef* texture_ref = GetTexture(client_texture_id_); 5604 TextureRef* texture_ref = GetTexture(client_texture_id_);
5731 EXPECT_TRUE(texture_ref != NULL); 5605 EXPECT_TRUE(texture_ref != NULL);
5732 Texture* texture = texture_ref->texture(); 5606 Texture* texture = texture_ref->texture();
5733 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES); 5607 EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
5734 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5608 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5735 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5609 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5736 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5610 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5737 } 5611 }
5738 5612
5739 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) { 5613 TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
5740 InitDecoder( 5614 InitState init;
5741 "GL_OES_EGL_image_external", // extensions 5615 init.extensions = "GL_OES_EGL_image_external";
5742 "opengl es 2.0", // gl version 5616 init.gl_version = "opengl es 2.0";
5743 false, // has alpha 5617 init.bind_generates_resource = true;
5744 false, // has depth 5618 InitDecoder(init);
5745 false, // has stencil
5746 false, // request alpha
5747 false, // request depth
5748 false, // request stencil
5749 true); // bind generates resource
5750 5619
5751 GLenum target = GL_TEXTURE_EXTERNAL_OES; 5620 GLenum target = GL_TEXTURE_EXTERNAL_OES;
5752 GLint level = 0; 5621 GLint level = 0;
5753 GLenum internal_format = GL_RGBA; 5622 GLenum internal_format = GL_RGBA;
5754 GLsizei width = 2; 5623 GLsizei width = 2;
5755 GLsizei height = 4; 5624 GLsizei height = 4;
5756 GLint border = 0; 5625 GLint border = 0;
5757 GLenum format = GL_RGBA; 5626 GLenum format = GL_RGBA;
5758 GLenum type = GL_UNSIGNED_BYTE; 5627 GLenum type = GL_UNSIGNED_BYTE;
5759 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 5628 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
5760 ASSERT_TRUE(GetTexture(client_texture_id_) != NULL); 5629 ASSERT_TRUE(GetTexture(client_texture_id_) != NULL);
5761 TexImage2D cmd; 5630 TexImage2D cmd;
5762 cmd.Init(target, level, internal_format, width, height, border, format, 5631 cmd.Init(target, level, internal_format, width, height, border, format,
5763 type, kSharedMemoryId, kSharedMemoryOffset); 5632 type, kSharedMemoryId, kSharedMemoryOffset);
5764 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5633 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5765 5634
5766 // TexImage2D is not allowed with GL_TEXTURE_EXTERNAL_OES targets. 5635 // TexImage2D is not allowed with GL_TEXTURE_EXTERNAL_OES targets.
5767 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 5636 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5768 } 5637 }
5769 5638
5770 TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) { 5639 TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
5771 InitDecoder( 5640 InitState init;
5772 "", // extensions 5641 init.gl_version = "3.0";
5773 "3.0", // gl version 5642 InitDecoder(init);
5774 false, // has alpha
5775 false, // has depth
5776 false, // has stencil
5777 false, // request alpha
5778 false, // request depth
5779 false, // request stencil
5780 false); // bind generates resource
5781 5643
5782 BindTexture cmd1; 5644 BindTexture cmd1;
5783 cmd1.Init(GL_TEXTURE_2D, kInvalidClientId); 5645 cmd1.Init(GL_TEXTURE_2D, kInvalidClientId);
5784 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); 5646 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
5785 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5647 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5786 5648
5787 BindBuffer cmd2; 5649 BindBuffer cmd2;
5788 cmd2.Init(GL_ARRAY_BUFFER, kInvalidClientId); 5650 cmd2.Init(GL_ARRAY_BUFFER, kInvalidClientId);
5789 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 5651 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
5790 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5652 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5791 5653
5792 BindFramebuffer cmd3; 5654 BindFramebuffer cmd3;
5793 cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId); 5655 cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId);
5794 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd3)); 5656 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd3));
5795 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5657 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5796 5658
5797 BindRenderbuffer cmd4; 5659 BindRenderbuffer cmd4;
5798 cmd4.Init(GL_RENDERBUFFER, kInvalidClientId); 5660 cmd4.Init(GL_RENDERBUFFER, kInvalidClientId);
5799 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd4)); 5661 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd4));
5800 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 5662 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
5801 } 5663 }
5802 5664
5803 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) { 5665 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
5804 InitDecoder( 5666 InitState init;
5805 "GL_ARB_texture_rectangle", // extensions 5667 init.extensions = "GL_ARB_texture_rectangle";
5806 "3.0", // gl version 5668 init.gl_version = "3.0";
5807 false, // has alpha 5669 init.bind_generates_resource = true;
5808 false, // has depth 5670 InitDecoder(init);
5809 false, // has stencil
5810 false, // request alpha
5811 false, // request depth
5812 false, // request stencil
5813 true); // bind generates resource
5814 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId)); 5671 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
5815 EXPECT_CALL(*gl_, GenTextures(1, _)) 5672 EXPECT_CALL(*gl_, GenTextures(1, _))
5816 .WillOnce(SetArgumentPointee<1>(kNewServiceId)); 5673 .WillOnce(SetArgumentPointee<1>(kNewServiceId));
5817 BindTexture cmd; 5674 BindTexture cmd;
5818 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId); 5675 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId);
5819 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5676 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5820 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5677 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5821 Texture* texture = GetTexture(kNewClientId)->texture(); 5678 Texture* texture = GetTexture(kNewClientId)->texture();
5822 EXPECT_TRUE(texture != NULL); 5679 EXPECT_TRUE(texture != NULL);
5823 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB); 5680 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
5824 } 5681 }
5825 5682
5826 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) { 5683 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
5827 InitDecoder( 5684 InitState init;
5828 "GL_ARB_texture_rectangle", // extensions 5685 init.extensions = "GL_ARB_texture_rectangle";
5829 "3.0", // gl version 5686 init.gl_version = "3.0";
5830 false, // has alpha 5687 init.bind_generates_resource = true;
5831 false, // has depth 5688 InitDecoder(init);
5832 false, // has stencil
5833 false, // request alpha
5834 false, // request depth
5835 false, // request stencil
5836 true); // bind generates resource
5837 DoBindTexture( 5689 DoBindTexture(
5838 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); 5690 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
5839 5691
5840 EXPECT_CALL(*gl_, GetError()) 5692 EXPECT_CALL(*gl_, GetError())
5841 .WillOnce(Return(GL_NO_ERROR)) 5693 .WillOnce(Return(GL_NO_ERROR))
5842 .WillOnce(Return(GL_NO_ERROR)) 5694 .WillOnce(Return(GL_NO_ERROR))
5843 .RetiresOnSaturation(); 5695 .RetiresOnSaturation();
5844 typedef GetIntegerv::Result Result; 5696 typedef GetIntegerv::Result Result;
5845 Result* result = static_cast<Result*>(shared_memory_address_); 5697 Result* result = static_cast<Result*>(shared_memory_address_);
5846 EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, 5698 EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB,
5847 result->GetData())) 5699 result->GetData()))
5848 .Times(0); 5700 .Times(0);
5849 result->size = 0; 5701 result->size = 0;
5850 GetIntegerv cmd; 5702 GetIntegerv cmd;
5851 cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB, 5703 cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB,
5852 shared_memory_id_, 5704 shared_memory_id_,
5853 shared_memory_offset_); 5705 shared_memory_offset_);
5854 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5706 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5855 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( 5707 EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
5856 GL_TEXTURE_BINDING_RECTANGLE_ARB), result->GetNumResults()); 5708 GL_TEXTURE_BINDING_RECTANGLE_ARB), result->GetNumResults());
5857 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 5709 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5858 EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]); 5710 EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
5859 } 5711 }
5860 5712
5861 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) { 5713 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) {
5862 InitDecoder( 5714 InitState init;
5863 "GL_ARB_texture_rectangle", // extensions 5715 init.extensions = "GL_ARB_texture_rectangle";
5864 "3.0", // gl version 5716 init.gl_version = "3.0";
5865 false, // has alpha 5717 init.bind_generates_resource = true;
5866 false, // has depth 5718 InitDecoder(init);
5867 false, // has stencil
5868 false, // request alpha
5869 false, // request depth
5870 false, // request stencil
5871 true); // bind generates resource
5872 DoBindTexture( 5719 DoBindTexture(
5873 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); 5720 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
5874 5721
5875 Texture* texture = GetTexture(client_texture_id_)->texture(); 5722 Texture* texture = GetTexture(client_texture_id_)->texture();
5876 EXPECT_TRUE(texture != NULL); 5723 EXPECT_TRUE(texture != NULL);
5877 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB); 5724 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
5878 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5725 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5879 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5726 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5880 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5727 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5881 } 5728 }
5882 5729
5883 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) { 5730 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
5884 InitDecoder( 5731 InitState init;
5885 "GL_ARB_texture_rectangle", // extensions 5732 init.extensions = "GL_ARB_texture_rectangle";
5886 "3.0", // gl version 5733 init.gl_version = "3.0";
5887 false, // has alpha 5734 init.bind_generates_resource = true;
5888 false, // has depth 5735 InitDecoder(init);
5889 false, // has stencil
5890 false, // request alpha
5891 false, // request depth
5892 false, // request stencil
5893 true); // bind generates resource
5894 5736
5895 DoBindTexture( 5737 DoBindTexture(
5896 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); 5738 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
5897 5739
5898 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, 5740 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
5899 GL_TEXTURE_MIN_FILTER, 5741 GL_TEXTURE_MIN_FILTER,
5900 GL_NEAREST)); 5742 GL_NEAREST));
5901 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB, 5743 EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
5902 GL_TEXTURE_MIN_FILTER, 5744 GL_TEXTURE_MIN_FILTER,
5903 GL_LINEAR)); 5745 GL_LINEAR));
(...skipping 30 matching lines...) Expand all
5934 5776
5935 Texture* texture = GetTexture(client_texture_id_)->texture(); 5777 Texture* texture = GetTexture(client_texture_id_)->texture();
5936 EXPECT_TRUE(texture != NULL); 5778 EXPECT_TRUE(texture != NULL);
5937 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB); 5779 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
5938 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5780 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5939 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5781 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5940 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5782 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5941 } 5783 }
5942 5784
5943 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) { 5785 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
5944 InitDecoder( 5786 InitState init;
5945 "GL_ARB_texture_rectangle", // extensions 5787 init.extensions = "GL_ARB_texture_rectangle";
5946 "3.0", // gl version 5788 init.gl_version = "3.0";
5947 false, // has alpha 5789 init.bind_generates_resource = true;
5948 false, // has depth 5790 InitDecoder(init);
5949 false, // has stencil
5950 false, // request alpha
5951 false, // request depth
5952 false, // request stencil
5953 true); // bind generates resource
5954 5791
5955 DoBindTexture( 5792 DoBindTexture(
5956 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId); 5793 GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
5957 5794
5958 TexParameteri cmd; 5795 TexParameteri cmd;
5959 cmd.Init(GL_TEXTURE_RECTANGLE_ARB, 5796 cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
5960 GL_TEXTURE_MIN_FILTER, 5797 GL_TEXTURE_MIN_FILTER,
5961 GL_NEAREST_MIPMAP_NEAREST); 5798 GL_NEAREST_MIPMAP_NEAREST);
5962 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5799 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5963 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 5800 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
(...skipping 12 matching lines...) Expand all
5976 5813
5977 Texture* texture = GetTexture(client_texture_id_)->texture(); 5814 Texture* texture = GetTexture(client_texture_id_)->texture();
5978 EXPECT_TRUE(texture != NULL); 5815 EXPECT_TRUE(texture != NULL);
5979 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB); 5816 EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
5980 EXPECT_TRUE(texture->min_filter() == GL_LINEAR); 5817 EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
5981 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE); 5818 EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
5982 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE); 5819 EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
5983 } 5820 }
5984 5821
5985 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) { 5822 TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) {
5986 InitDecoder( 5823 InitState init;
5987 "GL_ARB_texture_rectangle", // extensions 5824 init.extensions = "GL_ARB_texture_rectangle";
5988 "3.0", // gl version 5825 init.gl_version = "3.0";
5989 false, // has alpha 5826 init.bind_generates_resource = true;
5990 false, // has depth 5827 InitDecoder(init);
5991 false, // has stencil
5992 false, // request alpha
5993 false, // request depth
5994 false, // request stencil
5995 true); // bind generates resource
5996 5828
5997 GLenum target = GL_TEXTURE_RECTANGLE_ARB; 5829 GLenum target = GL_TEXTURE_RECTANGLE_ARB;
5998 GLint level = 0; 5830 GLint level = 0;
5999 GLenum internal_format = GL_RGBA; 5831 GLenum internal_format = GL_RGBA;
6000 GLsizei width = 2; 5832 GLsizei width = 2;
6001 GLsizei height = 4; 5833 GLsizei height = 4;
6002 GLint border = 0; 5834 GLint border = 0;
6003 GLenum format = GL_RGBA; 5835 GLenum format = GL_RGBA;
6004 GLenum type = GL_UNSIGNED_BYTE; 5836 GLenum type = GL_UNSIGNED_BYTE;
6005 DoBindTexture( 5837 DoBindTexture(
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
6080 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5912 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6081 } 5913 }
6082 5914
6083 TEST_F( 5915 TEST_F(
6084 GLES2DecoderManualInitTest, 5916 GLES2DecoderManualInitTest,
6085 TexSubImage2DDoesNotClearAfterTexImage2DNULLThenDataWithTexImage2DIsFaster) { 5917 TexSubImage2DDoesNotClearAfterTexImage2DNULLThenDataWithTexImage2DIsFaster) {
6086 CommandLine command_line(0, NULL); 5918 CommandLine command_line(0, NULL);
6087 command_line.AppendSwitchASCII( 5919 command_line.AppendSwitchASCII(
6088 switches::kGpuDriverBugWorkarounds, 5920 switches::kGpuDriverBugWorkarounds,
6089 base::IntToString(gpu::TEXSUBIMAGE2D_FASTER_THAN_TEXIMAGE2D)); 5921 base::IntToString(gpu::TEXSUBIMAGE2D_FASTER_THAN_TEXIMAGE2D));
6090 InitDecoderWithCommandLine( 5922 InitState init;
6091 "", // extensions 5923 init.gl_version = "3.0";
6092 "3.0", // gl version 5924 init.bind_generates_resource = true;
6093 false, // has alpha 5925 InitDecoderWithCommandLine(init, &command_line);
6094 false, // has depth
6095 false, // has stencil
6096 false, // request alpha
6097 false, // request depth
6098 false, // request stencil
6099 true, // bind generates resource
6100 &command_line);
6101 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 5926 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
6102 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 5927 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
6103 0, 0); 5928 0, 0);
6104 5929
6105 { 5930 {
6106 // Uses texSubimage internally because the above workaround is active and 5931 // Uses texSubimage internally because the above workaround is active and
6107 // the update is for the full size of the texture. 5932 // the update is for the full size of the texture.
6108 EXPECT_CALL(*gl_, 5933 EXPECT_CALL(*gl_,
6109 TexSubImage2D( 5934 TexSubImage2D(
6110 GL_TEXTURE_2D, 0, 0, 0, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, _)) 5935 GL_TEXTURE_2D, 0, 0, 0, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, _))
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
6372 0, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2); 6197 0, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
6373 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)) 6198 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1))
6374 .Times(1) 6199 .Times(1)
6375 .RetiresOnSaturation(); 6200 .RetiresOnSaturation();
6376 CopyTexSubImage2D cmd; 6201 CopyTexSubImage2D cmd;
6377 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1); 6202 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
6378 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6203 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6379 } 6204 }
6380 6205
6381 TEST_F(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) { 6206 TEST_F(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
6382 InitDecoder( 6207 InitState init;
6383 "GL_EXT_texture_compression_s3tc", // extensions 6208 init.extensions = "GL_EXT_texture_compression_s3tc";
6384 "3.0", // gl version 6209 init.gl_version = "3.0";
6385 false, // has alpha 6210 init.bind_generates_resource = true;
6386 false, // has depth 6211 InitDecoder(init);
6387 false, // has stencil
6388 false, // request alpha
6389 false, // request depth
6390 false, // request stencil
6391 true); // bind generates resource
6392 6212
6393 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 6213 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
6394 EXPECT_CALL(*gl_, GetError()) 6214 EXPECT_CALL(*gl_, GetError())
6395 .WillOnce(Return(GL_NO_ERROR)) 6215 .WillOnce(Return(GL_NO_ERROR))
6396 .RetiresOnSaturation(); 6216 .RetiresOnSaturation();
6397 EXPECT_CALL(*gl_, CompressedTexImage2D( 6217 EXPECT_CALL(*gl_, CompressedTexImage2D(
6398 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 8, _)) 6218 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 8, _))
6399 .Times(1) 6219 .Times(1)
6400 .RetiresOnSaturation(); 6220 .RetiresOnSaturation();
6401 EXPECT_CALL(*gl_, GetError()) 6221 EXPECT_CALL(*gl_, GetError())
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
6512 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 6332 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
6513 pixels_shm_id, pixels_shm_offset, 6333 pixels_shm_id, pixels_shm_offset,
6514 result_shm_id, result_shm_offset, 6334 result_shm_id, result_shm_offset,
6515 false); 6335 false);
6516 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6336 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6517 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6337 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6518 } 6338 }
6519 6339
6520 TEST_F(GLES2DecoderManualInitTest, 6340 TEST_F(GLES2DecoderManualInitTest,
6521 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) { 6341 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
6522 InitDecoder( 6342 InitState init;
6523 "GL_EXT_framebuffer_multisample", // extensions 6343 init.extensions = "GL_EXT_framebuffer_multisample";
6524 "2.1", // gl version 6344 init.gl_version = "2.1";
6525 false, // has alpha 6345 init.bind_generates_resource = true;
6526 false, // has depth 6346 InitDecoder(init);
6527 false, // has stencil
6528 false, // request alpha
6529 false, // request depth
6530 false, // request stencil
6531 true); // bind generates resource
6532 const GLuint kFBOClientTextureId = 4100; 6347 const GLuint kFBOClientTextureId = 4100;
6533 const GLuint kFBOServiceTextureId = 4101; 6348 const GLuint kFBOServiceTextureId = 4101;
6534 6349
6535 // Register a texture id. 6350 // Register a texture id.
6536 EXPECT_CALL(*gl_, GenTextures(_, _)) 6351 EXPECT_CALL(*gl_, GenTextures(_, _))
6537 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId)) 6352 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
6538 .RetiresOnSaturation(); 6353 .RetiresOnSaturation();
6539 GenHelper<GenTexturesImmediate>(kFBOClientTextureId); 6354 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
6540 6355
6541 // Setup "render from" texture. 6356 // Setup "render from" texture.
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
6967 .RetiresOnSaturation(); 6782 .RetiresOnSaturation();
6968 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6783 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6969 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6784 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6970 } 6785 }
6971 6786
6972 TEST_F(GLES2DecoderTest, BeginQueryEXTDisabled) { 6787 TEST_F(GLES2DecoderTest, BeginQueryEXTDisabled) {
6973 // Test something fails if off. 6788 // Test something fails if off.
6974 } 6789 }
6975 6790
6976 TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXT) { 6791 TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
6977 InitDecoder( 6792 InitState init;
6978 "GL_EXT_occlusion_query_boolean", // extensions 6793 init.extensions = "GL_EXT_occlusion_query_boolean";
6979 "opengl es 2.0", // gl version 6794 init.gl_version = "opengl es 2.0";
6980 true, // has alpha 6795 init.has_alpha = true;
6981 false, // has depth 6796 init.request_alpha = true;
6982 false, // has stencil 6797 init.bind_generates_resource = true;
6983 true, // request alpha 6798 InitDecoder(init);
6984 false, // request depth
6985 false, // request stencil
6986 true); // bind generates resource
6987 6799
6988 // Test end fails if no begin. 6800 // Test end fails if no begin.
6989 EndQueryEXT end_cmd; 6801 EndQueryEXT end_cmd;
6990 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1); 6802 end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1);
6991 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd)); 6803 EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
6992 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 6804 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
6993 6805
6994 BeginQueryEXT begin_cmd; 6806 BeginQueryEXT begin_cmd;
6995 6807
6996 // Test id = 0 fails. 6808 // Test id = 0 fails.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
7059 6871
7060 static void CheckBeginEndQueryBadMemoryFails( 6872 static void CheckBeginEndQueryBadMemoryFails(
7061 GLES2DecoderTestBase* test, 6873 GLES2DecoderTestBase* test,
7062 GLuint client_id, 6874 GLuint client_id,
7063 GLuint service_id, 6875 GLuint service_id,
7064 const QueryType& query_type, 6876 const QueryType& query_type,
7065 int32 shm_id, 6877 int32 shm_id,
7066 uint32 shm_offset) { 6878 uint32 shm_offset) {
7067 // We need to reset the decoder on each iteration, because we lose the 6879 // We need to reset the decoder on each iteration, because we lose the
7068 // context every time. 6880 // context every time.
7069 test->InitDecoder( 6881 GLES2DecoderTestBase::InitState init;
7070 "GL_EXT_occlusion_query_boolean", // extensions 6882 init.extensions = "GL_EXT_occlusion_query_boolean";
7071 "opengl es 2.0", // gl version 6883 init.gl_version = "opengl es 2.0";
7072 true, // has alpha 6884 init.has_alpha = true;
7073 false, // has depth 6885 init.request_alpha = true;
7074 false, // has stencil 6886 init.bind_generates_resource = true;
7075 true, // request alpha 6887 test->InitDecoder(init);
7076 false, // request depth
7077 false, // request stencil
7078 true); // bind generates resource
7079 ::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock(); 6888 ::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock();
7080 6889
7081 BeginQueryEXT begin_cmd; 6890 BeginQueryEXT begin_cmd;
7082 6891
7083 test->GenHelper<GenQueriesEXTImmediate>(client_id); 6892 test->GenHelper<GenQueriesEXTImmediate>(client_id);
7084 6893
7085 if (query_type.is_gl) { 6894 if (query_type.is_gl) {
7086 EXPECT_CALL(*gl, GenQueriesARB(1, _)) 6895 EXPECT_CALL(*gl, GenQueriesARB(1, _))
7087 .WillOnce(SetArgumentPointee<1>(service_id)) 6896 .WillOnce(SetArgumentPointee<1>(service_id))
7088 .RetiresOnSaturation(); 6897 .RetiresOnSaturation();
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
7334 EXPECT_NE(0u, *result); 7143 EXPECT_NE(0u, *result);
7335 Disable disable_cmd; 7144 Disable disable_cmd;
7336 disable_cmd.Init(state); 7145 disable_cmd.Init(state);
7337 EXPECT_EQ(error::kNoError, ExecuteCmd(disable_cmd)); 7146 EXPECT_EQ(error::kNoError, ExecuteCmd(disable_cmd));
7338 EXPECT_EQ(error::kNoError, ExecuteCmd(is_enabled_cmd)); 7147 EXPECT_EQ(error::kNoError, ExecuteCmd(is_enabled_cmd));
7339 EXPECT_EQ(0u, *result); 7148 EXPECT_EQ(0u, *result);
7340 } 7149 }
7341 } 7150 }
7342 7151
7343 TEST_F(GLES2DecoderManualInitTest, DepthTextureBadArgs) { 7152 TEST_F(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
7344 InitDecoder( 7153 InitState init;
7345 "GL_ANGLE_depth_texture", // extensions 7154 init.extensions = "GL_ANGLE_depth_texture";
7346 "opengl es 2.0", // gl version 7155 init.gl_version = "opengl es 2.0";
7347 false, // has alpha 7156 init.has_depth = true;
7348 true, // has depth 7157 init.has_stencil = true;
7349 true, // has stencil 7158 init.request_depth = true;
7350 false, // request alpha 7159 init.request_stencil = true;
7351 true, // request depth 7160 init.bind_generates_resource = true;
7352 true, // request stencil 7161 InitDecoder(init);
7353 true); // bind generates resource
7354 7162
7355 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7163 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7356 // Check trying to upload data fails. 7164 // Check trying to upload data fails.
7357 TexImage2D tex_cmd; 7165 TexImage2D tex_cmd;
7358 tex_cmd.Init( 7166 tex_cmd.Init(
7359 GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 7167 GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
7360 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 7168 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
7361 kSharedMemoryId, kSharedMemoryOffset); 7169 kSharedMemoryId, kSharedMemoryOffset);
7362 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd)); 7170 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
7363 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 7171 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
(...skipping 23 matching lines...) Expand all
7387 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 7195 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
7388 7196
7389 // Check that trying to CopyTexSubImage2D fails 7197 // Check that trying to CopyTexSubImage2D fails
7390 CopyTexSubImage2D copy_sub_cmd; 7198 CopyTexSubImage2D copy_sub_cmd;
7391 copy_sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1); 7199 copy_sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
7392 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_sub_cmd)); 7200 EXPECT_EQ(error::kNoError, ExecuteCmd(copy_sub_cmd));
7393 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 7201 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
7394 } 7202 }
7395 7203
7396 TEST_F(GLES2DecoderManualInitTest, GenerateMipmapDepthTexture) { 7204 TEST_F(GLES2DecoderManualInitTest, GenerateMipmapDepthTexture) {
7397 InitDecoder( 7205 InitState init;
7398 "GL_ANGLE_depth_texture", // extensions 7206 init.extensions = "GL_ANGLE_depth_texture";
7399 "opengl es 2.0", // gl version 7207 init.gl_version = "opengl es 2.0";
7400 false, // has alpha 7208 init.has_depth = true;
7401 true, // has depth 7209 init.has_stencil = true;
7402 true, // has stencil 7210 init.request_depth = true;
7403 false, // request alpha 7211 init.request_stencil = true;
7404 true, // request depth 7212 init.bind_generates_resource = true;
7405 true, // request stencil 7213 InitDecoder(init);
7406 true); // bind generates resource
7407 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7214 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
7408 DoTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 7215 DoTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
7409 2, 2, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 7216 2, 2, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
7410 0, 0); 7217 0, 0);
7411 GenerateMipmap cmd; 7218 GenerateMipmap cmd;
7412 cmd.Init(GL_TEXTURE_2D); 7219 cmd.Init(GL_TEXTURE_2D);
7413 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7220 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7414 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 7221 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
7415 } 7222 }
7416 7223
7417 TEST_F(GLES2DecoderManualInitTest, DrawClearsDepthTexture) { 7224 TEST_F(GLES2DecoderManualInitTest, DrawClearsDepthTexture) {
7418 InitDecoder( 7225 InitState init;
7419 "GL_ANGLE_depth_texture", // extensions 7226 init.extensions = "GL_ANGLE_depth_texture";
7420 "opengl es 2.0", // gl version 7227 init.gl_version = "opengl es 2.0";
7421 true, // has alpha 7228 init.has_alpha = true;
7422 true, // has depth 7229 init.has_depth = true;
7423 false, // has stencil 7230 init.request_alpha = true;
7424 true, // request alpha 7231 init.request_depth = true;
7425 true, // request depth 7232 init.bind_generates_resource = true;
7426 false, // request stencil 7233 InitDecoder(init);
7427 true); // bind generates resource
7428 7234
7429 SetupDefaultProgram(); 7235 SetupDefaultProgram();
7430 SetupAllNeededVertexBuffers(); 7236 SetupAllNeededVertexBuffers();
7431 const GLenum attachment = GL_DEPTH_ATTACHMENT; 7237 const GLenum attachment = GL_DEPTH_ATTACHMENT;
7432 const GLenum target = GL_TEXTURE_2D; 7238 const GLenum target = GL_TEXTURE_2D;
7433 const GLint level = 0; 7239 const GLint level = 0;
7434 DoBindTexture(target, client_texture_id_, kServiceTextureId); 7240 DoBindTexture(target, client_texture_id_, kServiceTextureId);
7435 7241
7436 // Create a depth texture. 7242 // Create a depth texture.
7437 DoTexImage2D(target, level, GL_DEPTH_COMPONENT, 1, 1, 0, 7243 DoTexImage2D(target, level, GL_DEPTH_COMPONENT, 1, 1, 0,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
7540 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 7346 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
7541 } 7347 }
7542 7348
7543 class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest { 7349 class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
7544 public: 7350 public:
7545 GLES2DecoderVertexArraysOESTest() { } 7351 GLES2DecoderVertexArraysOESTest() { }
7546 7352
7547 bool vertex_array_deleted_manually_; 7353 bool vertex_array_deleted_manually_;
7548 7354
7549 virtual void SetUp() { 7355 virtual void SetUp() {
7550 InitDecoder( 7356 InitState init;
7551 "GL_OES_vertex_array_object", // extensions 7357 init.extensions = "GL_OES_vertex_array_object";
7552 "opengl es 2.0", // gl version 7358 init.gl_version = "opengl es 2.0";
7553 false, // has alpha 7359 init.bind_generates_resource = true;
7554 false, // has depth 7360 InitDecoder(init);
7555 false, // has stencil
7556 false, // request alpha
7557 false, // request depth
7558 false, // request stencil
7559 true); // bind generates resource
7560 SetupDefaultProgram(); 7361 SetupDefaultProgram();
7561 7362
7562 AddExpectationsForGenVertexArraysOES(); 7363 AddExpectationsForGenVertexArraysOES();
7563 GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_); 7364 GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
7564 7365
7565 vertex_array_deleted_manually_ = false; 7366 vertex_array_deleted_manually_ = false;
7566 } 7367 }
7567 7368
7568 virtual void TearDown() { 7369 virtual void TearDown() {
7569 // This should only be set if the test handled deletion of the vertex array 7370 // This should only be set if the test handled deletion of the vertex array
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
7691 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 7492 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
7692 } 7493 }
7693 }; 7494 };
7694 7495
7695 class GLES2DecoderEmulatedVertexArraysOESTest 7496 class GLES2DecoderEmulatedVertexArraysOESTest
7696 : public GLES2DecoderVertexArraysOESTest { 7497 : public GLES2DecoderVertexArraysOESTest {
7697 public: 7498 public:
7698 GLES2DecoderEmulatedVertexArraysOESTest() { } 7499 GLES2DecoderEmulatedVertexArraysOESTest() { }
7699 7500
7700 virtual void SetUp() { 7501 virtual void SetUp() {
7701 InitDecoder( 7502 InitState init;
7702 "", // extensions 7503 init.gl_version = "3.0";
7703 "3.0", // gl version 7504 init.bind_generates_resource = true;
7704 false, // has alpha 7505 InitDecoder(init);
7705 false, // has depth
7706 false, // has stencil
7707 false, // request alpha
7708 false, // request depth
7709 false, // request stencil
7710 true); // bind generates resource
7711 SetupDefaultProgram(); 7506 SetupDefaultProgram();
7712 7507
7713 AddExpectationsForGenVertexArraysOES(); 7508 AddExpectationsForGenVertexArraysOES();
7714 GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_); 7509 GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
7715 7510
7716 vertex_array_deleted_manually_ = false; 7511 vertex_array_deleted_manually_ = false;
7717 } 7512 }
7718 }; 7513 };
7719 7514
7720 // Test vertex array objects with native support 7515 // Test vertex array objects with native support
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
8078 .WillOnce(Return(GL_NO_ERROR)) 7873 .WillOnce(Return(GL_NO_ERROR))
8079 .RetiresOnSaturation(); 7874 .RetiresOnSaturation();
8080 FramebufferRenderbuffer fbrb_cmd; 7875 FramebufferRenderbuffer fbrb_cmd;
8081 fbrb_cmd.Init( 7876 fbrb_cmd.Init(
8082 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 7877 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
8083 client_renderbuffer_id_); 7878 client_renderbuffer_id_);
8084 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd)); 7879 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
8085 } 7880 }
8086 7881
8087 TEST_F(GLES2DecoderManualInitTest, DrawWithGLImageExternal) { 7882 TEST_F(GLES2DecoderManualInitTest, DrawWithGLImageExternal) {
8088 InitDecoder( 7883 InitState init;
8089 "GL_OES_EGL_image_external", // extensions 7884 init.extensions = "GL_OES_EGL_image_external";
8090 "opengl es 2.0", // gl version 7885 init.gl_version = "opengl es 2.0";
8091 true, // has alpha 7886 init.has_alpha = true;
8092 true, // has depth 7887 init.has_depth = true;
8093 false, // has stencil 7888 init.request_alpha = true;
8094 true, // request alpha 7889 init.request_depth = true;
8095 true, // request depth 7890 init.bind_generates_resource = true;
8096 false, // request stencil 7891 InitDecoder(init);
8097 true); // bind generates resource
8098 7892
8099 TextureRef* texture_ref = GetTexture(client_texture_id_); 7893 TextureRef* texture_ref = GetTexture(client_texture_id_);
8100 scoped_refptr<MockGLImage> image(new MockGLImage); 7894 scoped_refptr<MockGLImage> image(new MockGLImage);
8101 group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); 7895 group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
8102 group().texture_manager()->SetLevelInfo(texture_ref, 7896 group().texture_manager()->SetLevelInfo(texture_ref,
8103 GL_TEXTURE_EXTERNAL_OES, 7897 GL_TEXTURE_EXTERNAL_OES,
8104 0, 7898 0,
8105 GL_RGBA, 7899 GL_RGBA,
8106 0, 7900 0,
8107 0, 7901 0,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
8153 .Times(1) 7947 .Times(1)
8154 .RetiresOnSaturation(); 7948 .RetiresOnSaturation();
8155 DrawElements cmd; 7949 DrawElements cmd;
8156 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT, 7950 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
8157 kValidIndexRangeStart * 2); 7951 kValidIndexRangeStart * 2);
8158 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7952 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8159 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 7953 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8160 } 7954 }
8161 7955
8162 TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) { 7956 TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
8163 InitDecoder( 7957 InitState init;
8164 "GL_ARB_texture_rectangle", // extensions 7958 init.extensions = "GL_ARB_texture_rectangle";
8165 "3.0", // gl version 7959 init.gl_version = "3.0";
8166 false, // has alpha 7960 init.bind_generates_resource = true;
8167 false, // has depth 7961 InitDecoder(init);
8168 false, // has stencil
8169 false, // request alpha
8170 false, // request depth
8171 false, // request stencil
8172 true); // bind generates resource
8173 7962
8174 Texture* texture = GetTexture(client_texture_id_)->texture(); 7963 Texture* texture = GetTexture(client_texture_id_)->texture();
8175 EXPECT_TRUE(texture != NULL); 7964 EXPECT_TRUE(texture != NULL);
8176 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_UNMANAGED_CHROMIUM); 7965 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_UNMANAGED_CHROMIUM);
8177 7966
8178 DoBindTexture( 7967 DoBindTexture(
8179 GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 7968 GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8180 7969
8181 TexParameteri cmd; 7970 TexParameteri cmd;
8182 cmd.Init(GL_TEXTURE_2D, 7971 cmd.Init(GL_TEXTURE_2D,
(...skipping 11 matching lines...) Expand all
8194 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM); 7983 EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM);
8195 7984
8196 cmd.Init(GL_TEXTURE_2D, 7985 cmd.Init(GL_TEXTURE_2D,
8197 GL_TEXTURE_POOL_CHROMIUM, 7986 GL_TEXTURE_POOL_CHROMIUM,
8198 GL_NONE); 7987 GL_NONE);
8199 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7988 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8200 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 7989 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
8201 } 7990 }
8202 7991
8203 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransfers) { 7992 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransfers) {
8204 InitDecoder( 7993 InitState init;
8205 "GL_CHROMIUM_async_pixel_transfers", // extensions 7994 init.extensions = "GL_CHROMIUM_async_pixel_transfers";
8206 "3.0", // gl version 7995 init.gl_version = "3.0";
8207 false, false, false, // has alpha/depth/stencil 7996 init.bind_generates_resource = true;
8208 false, false, false, // request alpha/depth/stencil 7997 InitDecoder(init);
8209 true); // bind generates resource
8210 7998
8211 // Set up the texture. 7999 // Set up the texture.
8212 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8000 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8213 TextureRef* texture_ref = GetTexture(client_texture_id_); 8001 TextureRef* texture_ref = GetTexture(client_texture_id_);
8214 Texture* texture = texture_ref->texture(); 8002 Texture* texture = texture_ref->texture();
8215 8003
8216 // Set a mock Async delegate 8004 // Set a mock Async delegate
8217 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8005 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8218 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8006 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8219 manager->Initialize(group().texture_manager()); 8007 manager->Initialize(group().texture_manager());
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
8432 EXPECT_TRUE(texture->IsImmutable()); 8220 EXPECT_TRUE(texture->IsImmutable());
8433 // Wait for completion of all uploads. 8221 // Wait for completion of all uploads.
8434 EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation(); 8222 EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation();
8435 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); 8223 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8436 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd)); 8224 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd));
8437 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8225 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8438 } 8226 }
8439 } 8227 }
8440 8228
8441 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { 8229 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
8442 InitDecoder( 8230 InitState init;
8443 "GL_CHROMIUM_async_pixel_transfers", // extensions 8231 init.extensions = "GL_CHROMIUM_async_pixel_transfers";
8444 "3.0", // gl version 8232 init.gl_version = "3.0";
8445 false, false, false, // has alpha/depth/stencil 8233 init.bind_generates_resource = true;
8446 false, false, false, // request alpha/depth/stencil 8234 InitDecoder(init);
8447 true); // bind generates resource
8448 8235
8449 // Set up the texture. 8236 // Set up the texture.
8450 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8237 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8451 TextureRef* texture_ref = GetTexture(client_texture_id_); 8238 TextureRef* texture_ref = GetTexture(client_texture_id_);
8452 8239
8453 // Set a mock Async delegate. 8240 // Set a mock Async delegate.
8454 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8241 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8455 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8242 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8456 manager->Initialize(group().texture_manager()); 8243 manager->Initialize(group().texture_manager());
8457 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8244 decoder_->SetAsyncPixelTransferManagerForTest(manager);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
8537 }; 8324 };
8538 std::map<Pool, PoolInfo> pool_infos_; 8325 std::map<Pool, PoolInfo> pool_infos_;
8539 }; 8326 };
8540 8327
8541 } // anonymous namespace. 8328 } // anonymous namespace.
8542 8329
8543 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerInitialSize) { 8330 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerInitialSize) {
8544 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8331 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8545 new SizeOnlyMemoryTracker(); 8332 new SizeOnlyMemoryTracker();
8546 set_memory_tracker(memory_tracker.get()); 8333 set_memory_tracker(memory_tracker.get());
8547 InitDecoder( 8334 InitState init;
8548 "", // extensions 8335 init.gl_version = "3.0";
8549 "3.0", // gl version 8336 init.bind_generates_resource = true;
8550 false, // has alpha 8337 InitDecoder(init);
8551 false, // has depth
8552 false, // has stencil
8553 false, // request alpha
8554 false, // request depth
8555 false, // request stencil
8556 true); // bind generates resource
8557 // Expect that initial size - size is 0. 8338 // Expect that initial size - size is 0.
8558 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8339 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8559 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kManaged)); 8340 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kManaged));
8560 } 8341 }
8561 8342
8562 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexImage2D) { 8343 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexImage2D) {
8563 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8344 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8564 new SizeOnlyMemoryTracker(); 8345 new SizeOnlyMemoryTracker();
8565 set_memory_tracker(memory_tracker.get()); 8346 set_memory_tracker(memory_tracker.get());
8566 InitDecoder( 8347 InitState init;
8567 "", // extensions 8348 init.gl_version = "3.0";
8568 "3.0", // gl version 8349 init.bind_generates_resource = true;
8569 false, // has alpha 8350 InitDecoder(init);
8570 false, // has depth
8571 false, // has stencil
8572 false, // request alpha
8573 false, // request depth
8574 false, // request stencil
8575 true); // bind generates resource
8576 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8351 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8577 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8352 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8578 .WillOnce(Return(true)).RetiresOnSaturation(); 8353 .WillOnce(Return(true)).RetiresOnSaturation();
8579 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 8354 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
8580 kSharedMemoryId, kSharedMemoryOffset); 8355 kSharedMemoryId, kSharedMemoryOffset);
8581 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8356 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8582 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64)) 8357 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64))
8583 .WillOnce(Return(true)).RetiresOnSaturation(); 8358 .WillOnce(Return(true)).RetiresOnSaturation();
8584 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 8359 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
8585 kSharedMemoryId, kSharedMemoryOffset); 8360 kSharedMemoryId, kSharedMemoryOffset);
8586 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8361 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8587 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8362 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8588 // Check we get out of memory and no call to glTexImage2D if Ensure fails. 8363 // Check we get out of memory and no call to glTexImage2D if Ensure fails.
8589 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64)) 8364 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64))
8590 .WillOnce(Return(false)).RetiresOnSaturation(); 8365 .WillOnce(Return(false)).RetiresOnSaturation();
8591 TexImage2D cmd; 8366 TexImage2D cmd;
8592 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 8367 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
8593 kSharedMemoryId, kSharedMemoryOffset); 8368 kSharedMemoryId, kSharedMemoryOffset);
8594 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8369 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8595 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 8370 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
8596 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8371 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8597 } 8372 }
8598 8373
8599 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) { 8374 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) {
8600 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8375 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8601 new SizeOnlyMemoryTracker(); 8376 new SizeOnlyMemoryTracker();
8602 set_memory_tracker(memory_tracker.get()); 8377 set_memory_tracker(memory_tracker.get());
8603 InitDecoder( 8378 InitState init;
8604 "", // extensions 8379 init.gl_version = "3.0";
8605 "3.0", // gl version 8380 init.bind_generates_resource = true;
8606 false, // has alpha 8381 InitDecoder(init);
8607 false, // has depth
8608 false, // has stencil
8609 false, // request alpha
8610 false, // request depth
8611 false, // request stencil
8612 true); // bind generates resource
8613 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8382 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8614 // Check we get out of memory and no call to glTexStorage2DEXT 8383 // Check we get out of memory and no call to glTexStorage2DEXT
8615 // if Ensure fails. 8384 // if Ensure fails.
8616 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8385 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8617 .WillOnce(Return(false)).RetiresOnSaturation(); 8386 .WillOnce(Return(false)).RetiresOnSaturation();
8618 TexStorage2DEXT cmd; 8387 TexStorage2DEXT cmd;
8619 cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4); 8388 cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4);
8620 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8389 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8621 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8390 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8622 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 8391 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
8623 } 8392 }
8624 8393
8625 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) { 8394 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) {
8626 GLenum target = GL_TEXTURE_2D; 8395 GLenum target = GL_TEXTURE_2D;
8627 GLint level = 0; 8396 GLint level = 0;
8628 GLenum internal_format = GL_RGBA; 8397 GLenum internal_format = GL_RGBA;
8629 GLsizei width = 4; 8398 GLsizei width = 4;
8630 GLsizei height = 8; 8399 GLsizei height = 8;
8631 GLint border = 0; 8400 GLint border = 0;
8632 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8401 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8633 new SizeOnlyMemoryTracker(); 8402 new SizeOnlyMemoryTracker();
8634 set_memory_tracker(memory_tracker.get()); 8403 set_memory_tracker(memory_tracker.get());
8635 InitDecoder( 8404 InitState init;
8636 "", // extensions 8405 init.gl_version = "3.0";
8637 "3.0", // gl version 8406 init.has_alpha = true;
8638 true, // has alpha 8407 init.request_alpha = true;
8639 false, // has depth 8408 init.bind_generates_resource = true;
8640 false, // has stencil 8409 InitDecoder(init);
8641 true, // request alpha
8642 false, // request depth
8643 false, // request stencil
8644 true); // bind generates resource
8645 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8410 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8646 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8411 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8647 .WillOnce(Return(true)).RetiresOnSaturation(); 8412 .WillOnce(Return(true)).RetiresOnSaturation();
8648 EXPECT_CALL(*gl_, GetError()) 8413 EXPECT_CALL(*gl_, GetError())
8649 .WillOnce(Return(GL_NO_ERROR)) 8414 .WillOnce(Return(GL_NO_ERROR))
8650 .WillOnce(Return(GL_NO_ERROR)) 8415 .WillOnce(Return(GL_NO_ERROR))
8651 .RetiresOnSaturation(); 8416 .RetiresOnSaturation();
8652 EXPECT_CALL(*gl_, CopyTexImage2D( 8417 EXPECT_CALL(*gl_, CopyTexImage2D(
8653 target, level, internal_format, 0, 0, width, height, border)) 8418 target, level, internal_format, 0, 0, width, height, border))
8654 .Times(1) 8419 .Times(1)
8655 .RetiresOnSaturation(); 8420 .RetiresOnSaturation();
8656 CopyTexImage2D cmd; 8421 CopyTexImage2D cmd;
8657 cmd.Init(target, level, internal_format, 0, 0, width, height, border); 8422 cmd.Init(target, level, internal_format, 0, 0, width, height, border);
8658 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8423 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8659 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8424 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8660 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8425 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8661 // Check we get out of memory and no call to glCopyTexImage2D if Ensure fails. 8426 // Check we get out of memory and no call to glCopyTexImage2D if Ensure fails.
8662 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8427 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8663 .WillOnce(Return(false)).RetiresOnSaturation(); 8428 .WillOnce(Return(false)).RetiresOnSaturation();
8664 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8429 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8665 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 8430 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
8666 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8431 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8667 } 8432 }
8668 8433
8669 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) { 8434 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) {
8670 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8435 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8671 new SizeOnlyMemoryTracker(); 8436 new SizeOnlyMemoryTracker();
8672 set_memory_tracker(memory_tracker.get()); 8437 set_memory_tracker(memory_tracker.get());
8673 InitDecoder( 8438 InitState init;
8674 "", // extensions 8439 init.gl_version = "3.0";
8675 "3.0", // gl version 8440 init.bind_generates_resource = true;
8676 false, // has alpha 8441 InitDecoder(init);
8677 false, // has depth
8678 false, // has stencil
8679 false, // request alpha
8680 false, // request depth
8681 false, // request stencil
8682 true); // bind generates resource
8683 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 8442 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
8684 kServiceRenderbufferId); 8443 kServiceRenderbufferId);
8685 EXPECT_CALL(*gl_, GetError()) 8444 EXPECT_CALL(*gl_, GetError())
8686 .WillOnce(Return(GL_NO_ERROR)) 8445 .WillOnce(Return(GL_NO_ERROR))
8687 .WillOnce(Return(GL_NO_ERROR)) 8446 .WillOnce(Return(GL_NO_ERROR))
8688 .RetiresOnSaturation(); 8447 .RetiresOnSaturation();
8689 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8448 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8690 .WillOnce(Return(true)).RetiresOnSaturation(); 8449 .WillOnce(Return(true)).RetiresOnSaturation();
8691 EXPECT_CALL(*gl_, RenderbufferStorageEXT( 8450 EXPECT_CALL(*gl_, RenderbufferStorageEXT(
8692 GL_RENDERBUFFER, GL_RGBA, 8, 4)) 8451 GL_RENDERBUFFER, GL_RGBA, 8, 4))
(...skipping 10 matching lines...) Expand all
8703 .WillOnce(Return(false)).RetiresOnSaturation(); 8462 .WillOnce(Return(false)).RetiresOnSaturation();
8704 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8463 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8705 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 8464 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
8706 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); 8465 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
8707 } 8466 }
8708 8467
8709 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) { 8468 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) {
8710 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = 8469 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
8711 new SizeOnlyMemoryTracker(); 8470 new SizeOnlyMemoryTracker();
8712 set_memory_tracker(memory_tracker.get()); 8471 set_memory_tracker(memory_tracker.get());
8713 InitDecoder( 8472 InitState init;
8714 "", // extensions 8473 init.gl_version = "3.0";
8715 "3.0", // gl version 8474 init.bind_generates_resource = true;
8716 false, // has alpha 8475 InitDecoder(init);
8717 false, // has depth
8718 false, // has stencil
8719 false, // request alpha
8720 false, // request depth
8721 false, // request stencil
8722 true); // bind generates resource
8723 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, 8476 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_,
8724 kServiceBufferId); 8477 kServiceBufferId);
8725 EXPECT_CALL(*gl_, GetError()) 8478 EXPECT_CALL(*gl_, GetError())
8726 .WillOnce(Return(GL_NO_ERROR)) 8479 .WillOnce(Return(GL_NO_ERROR))
8727 .WillOnce(Return(GL_NO_ERROR)) 8480 .WillOnce(Return(GL_NO_ERROR))
8728 .RetiresOnSaturation(); 8481 .RetiresOnSaturation();
8729 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) 8482 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
8730 .WillOnce(Return(true)).RetiresOnSaturation(); 8483 .WillOnce(Return(true)).RetiresOnSaturation();
8731 EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW)) 8484 EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW))
8732 .Times(1) 8485 .Times(1)
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
8794 EXPECT_CALL(*gl_, DrawBuffersARB(count, _)) 8547 EXPECT_CALL(*gl_, DrawBuffersARB(count, _))
8795 .Times(1) 8548 .Times(1)
8796 .RetiresOnSaturation(); 8549 .RetiresOnSaturation();
8797 8550
8798 EXPECT_EQ(error::kNoError, 8551 EXPECT_EQ(error::kNoError,
8799 ExecuteImmediateCmd(cmd, sizeof(bufs))); 8552 ExecuteImmediateCmd(cmd, sizeof(bufs)));
8800 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8553 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8801 } 8554 }
8802 8555
8803 TEST_F(GLES2DecoderManualInitTest, InvalidateFramebufferBinding) { 8556 TEST_F(GLES2DecoderManualInitTest, InvalidateFramebufferBinding) {
8804 InitDecoder("", // extensions 8557 InitState init;
8805 "opengl es 3.0", // gl version 8558 init.gl_version = "opengl es 3.0";
8806 false, // has alpha 8559 InitDecoder(init);
8807 false, // has depth
8808 false, // has stencil
8809 false, // request alpha
8810 false, // request depth
8811 false, // request stencil
8812 false); // bind generates resource
8813 8560
8814 // EXPECT_EQ can't be used to compare function pointers 8561 // EXPECT_EQ can't be used to compare function pointers
8815 EXPECT_TRUE( 8562 EXPECT_TRUE(
8816 gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") == 8563 gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") ==
8817 gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn); 8564 gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn);
8818 EXPECT_TRUE( 8565 EXPECT_TRUE(
8819 gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") != 8566 gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") !=
8820 gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT")); 8567 gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT"));
8821 } 8568 }
8822 8569
8823 TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) { 8570 TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) {
8824 InitDecoder("GL_EXT_discard_framebuffer", // extensions 8571 InitState init;
8825 "opengl es 2.0", // gl version 8572 init.extensions = "GL_EXT_discard_framebuffer";
8826 false, // has alpha 8573 init.gl_version = "opengl es 2.0";
8827 false, // has depth 8574 InitDecoder(init);
8828 false, // has stencil
8829 false, // request alpha
8830 false, // request depth
8831 false, // request stencil
8832 false); // bind generates resource
8833 8575
8834 // EXPECT_EQ can't be used to compare function pointers 8576 // EXPECT_EQ can't be used to compare function pointers
8835 EXPECT_TRUE( 8577 EXPECT_TRUE(
8836 gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT") == 8578 gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT") ==
8837 gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn); 8579 gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn);
8838 8580
8839 const GLenum target = GL_FRAMEBUFFER; 8581 const GLenum target = GL_FRAMEBUFFER;
8840 const GLsizei count = 1; 8582 const GLsizei count = 1;
8841 const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 }; 8583 const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 };
8842 8584
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
8876 *GetImmediateAs<DiscardFramebufferEXTImmediate>(); 8618 *GetImmediateAs<DiscardFramebufferEXTImmediate>();
8877 cmd.Init(target, count, attachments); 8619 cmd.Init(target, count, attachments);
8878 8620
8879 // Should not result into a call into GL. 8621 // Should not result into a call into GL.
8880 EXPECT_EQ(error::kNoError, 8622 EXPECT_EQ(error::kNoError,
8881 ExecuteImmediateCmd(cmd, sizeof(attachments))); 8623 ExecuteImmediateCmd(cmd, sizeof(attachments)));
8882 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 8624 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
8883 } 8625 }
8884 8626
8885 TEST_F(GLES2DecoderRestoreStateTest, NullPreviousState) { 8627 TEST_F(GLES2DecoderRestoreStateTest, NullPreviousState) {
8886 InitDecoder( 8628 InitState init;
8887 "", // extensions 8629 init.gl_version = "3.0";
8888 "3.0", // gl version 8630 InitDecoder(init);
8889 false, // has alpha
8890 false, // has depth
8891 false, // has stencil
8892 false, // request alpha
8893 false, // request depth
8894 false, // request stencil
8895 false); // bind generates resource
8896 SetupTexture(); 8631 SetupTexture();
8897 8632
8898 InSequence sequence; 8633 InSequence sequence;
8899 // Expect to restore texture bindings for unit GL_TEXTURE0. 8634 // Expect to restore texture bindings for unit GL_TEXTURE0.
8900 AddExpectationsForActiveTexture(GL_TEXTURE0); 8635 AddExpectationsForActiveTexture(GL_TEXTURE0);
8901 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); 8636 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8902 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 8637 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
8903 TestHelper::kServiceDefaultTextureCubemapId); 8638 TestHelper::kServiceDefaultTextureCubemapId);
8904 8639
8905 // Expect to restore texture bindings for remaining units. 8640 // Expect to restore texture bindings for remaining units.
8906 for (uint32 i = 1; i < group().max_texture_units() ; ++i) { 8641 for (uint32 i = 1; i < group().max_texture_units() ; ++i) {
8907 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); 8642 AddExpectationsForActiveTexture(GL_TEXTURE0 + i);
8908 AddExpectationsForBindTexture(GL_TEXTURE_2D, 8643 AddExpectationsForBindTexture(GL_TEXTURE_2D,
8909 TestHelper::kServiceDefaultTexture2dId); 8644 TestHelper::kServiceDefaultTexture2dId);
8910 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 8645 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
8911 TestHelper::kServiceDefaultTextureCubemapId); 8646 TestHelper::kServiceDefaultTextureCubemapId);
8912 } 8647 }
8913 8648
8914 // Expect to restore the active texture unit to GL_TEXTURE0. 8649 // Expect to restore the active texture unit to GL_TEXTURE0.
8915 AddExpectationsForActiveTexture(GL_TEXTURE0); 8650 AddExpectationsForActiveTexture(GL_TEXTURE0);
8916 8651
8917 GetDecoder()->RestoreAllTextureUnitBindings(NULL); 8652 GetDecoder()->RestoreAllTextureUnitBindings(NULL);
8918 } 8653 }
8919 8654
8920 TEST_F(GLES2DecoderRestoreStateTest, WithPreviousState) { 8655 TEST_F(GLES2DecoderRestoreStateTest, WithPreviousState) {
8921 InitDecoder( 8656 InitState init;
8922 "", // extensions 8657 init.gl_version = "3.0";
8923 "3.0", // gl version 8658 InitDecoder(init);
8924 false, // has alpha
8925 false, // has depth
8926 false, // has stencil
8927 false, // request alpha
8928 false, // request depth
8929 false, // request stencil
8930 false); // bind generates resource
8931 SetupTexture(); 8659 SetupTexture();
8932 8660
8933 // Construct a previous ContextState with all texture bindings 8661 // Construct a previous ContextState with all texture bindings
8934 // set to default textures. 8662 // set to default textures.
8935 ContextState prev_state(NULL, NULL); 8663 ContextState prev_state(NULL, NULL, NULL);
8936 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); 8664 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
8937 8665
8938 InSequence sequence; 8666 InSequence sequence;
8939 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, 8667 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit,
8940 // since the rest of the bindings haven't changed between the current 8668 // since the rest of the bindings haven't changed between the current
8941 // state and the |prev_state|. 8669 // state and the |prev_state|.
8942 AddExpectationsForActiveTexture(GL_TEXTURE0); 8670 AddExpectationsForActiveTexture(GL_TEXTURE0);
8943 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); 8671 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8944 8672
8945 // Expect to restore active texture unit to GL_TEXTURE0. 8673 // Expect to restore active texture unit to GL_TEXTURE0.
8946 AddExpectationsForActiveTexture(GL_TEXTURE0); 8674 AddExpectationsForActiveTexture(GL_TEXTURE0);
8947 8675
8948 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); 8676 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
8949 } 8677 }
8950 8678
8951 TEST_F(GLES2DecoderRestoreStateTest, ActiveUnit1) { 8679 TEST_F(GLES2DecoderRestoreStateTest, ActiveUnit1) {
8952 InitDecoder( 8680 InitState init;
8953 "", // extensions 8681 init.gl_version = "3.0";
8954 "3.0", // gl version 8682 InitDecoder(init);
8955 false, // has alpha
8956 false, // has depth
8957 false, // has stencil
8958 false, // request alpha
8959 false, // request depth
8960 false, // request stencil
8961 false); // bind generates resource
8962 8683
8963 // Bind a non-default texture to GL_TEXTURE1 unit. 8684 // Bind a non-default texture to GL_TEXTURE1 unit.
8964 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); 8685 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
8965 ActiveTexture cmd; 8686 ActiveTexture cmd;
8966 cmd.Init(GL_TEXTURE1); 8687 cmd.Init(GL_TEXTURE1);
8967 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8688 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8968 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8689 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8969 SetupTexture(); 8690 SetupTexture();
8970 8691
8971 // Construct a previous ContextState with all texture bindings 8692 // Construct a previous ContextState with all texture bindings
8972 // set to default textures. 8693 // set to default textures.
8973 ContextState prev_state(NULL, NULL); 8694 ContextState prev_state(NULL, NULL, NULL);
8974 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); 8695 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
8975 8696
8976 InSequence sequence; 8697 InSequence sequence;
8977 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit, 8698 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit,
8978 // since the rest of the bindings haven't changed between the current 8699 // since the rest of the bindings haven't changed between the current
8979 // state and the |prev_state|. 8700 // state and the |prev_state|.
8980 AddExpectationsForActiveTexture(GL_TEXTURE1); 8701 AddExpectationsForActiveTexture(GL_TEXTURE1);
8981 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); 8702 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8982 8703
8983 // Expect to restore active texture unit to GL_TEXTURE1. 8704 // Expect to restore active texture unit to GL_TEXTURE1.
8984 AddExpectationsForActiveTexture(GL_TEXTURE1); 8705 AddExpectationsForActiveTexture(GL_TEXTURE1);
8985 8706
8986 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); 8707 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
8987 } 8708 }
8988 8709
8989 TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit0) { 8710 TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit0) {
8990 InitDecoder( 8711 InitState init;
8991 "", // extensions 8712 init.gl_version = "3.0";
8992 "3.0", // gl version 8713 InitDecoder(init);
8993 false, // has alpha
8994 false, // has depth
8995 false, // has stencil
8996 false, // request alpha
8997 false, // request depth
8998 false, // request stencil
8999 false); // bind generates resource
9000 8714
9001 // Bind a non-default texture to GL_TEXTURE1 unit. 8715 // Bind a non-default texture to GL_TEXTURE1 unit.
9002 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); 8716 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
9003 SpecializedSetup<ActiveTexture, 0>(true); 8717 SpecializedSetup<ActiveTexture, 0>(true);
9004 ActiveTexture cmd; 8718 ActiveTexture cmd;
9005 cmd.Init(GL_TEXTURE1); 8719 cmd.Init(GL_TEXTURE1);
9006 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8720 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9007 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8721 EXPECT_EQ(GL_NO_ERROR, GetGLError());
9008 SetupTexture(); 8722 SetupTexture();
9009 8723
9010 // Construct a previous ContextState with GL_TEXTURE_2D target in 8724 // Construct a previous ContextState with GL_TEXTURE_2D target in
9011 // GL_TEXTURE0 unit bound to a non-default texture and the rest 8725 // GL_TEXTURE0 unit bound to a non-default texture and the rest
9012 // set to default textures. 8726 // set to default textures.
9013 ContextState prev_state(NULL, NULL); 8727 ContextState prev_state(NULL, NULL, NULL);
9014 InitializeContextState(&prev_state, 0, kServiceTextureId); 8728 InitializeContextState(&prev_state, 0, kServiceTextureId);
9015 8729
9016 InSequence sequence; 8730 InSequence sequence;
9017 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to 8731 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to
9018 // a default texture. 8732 // a default texture.
9019 AddExpectationsForActiveTexture(GL_TEXTURE0); 8733 AddExpectationsForActiveTexture(GL_TEXTURE0);
9020 AddExpectationsForBindTexture(GL_TEXTURE_2D, 8734 AddExpectationsForBindTexture(GL_TEXTURE_2D,
9021 TestHelper::kServiceDefaultTexture2dId); 8735 TestHelper::kServiceDefaultTexture2dId);
9022 8736
9023 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to 8737 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to
9024 // non-default. 8738 // non-default.
9025 AddExpectationsForActiveTexture(GL_TEXTURE1); 8739 AddExpectationsForActiveTexture(GL_TEXTURE1);
9026 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); 8740 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
9027 8741
9028 // Expect to restore active texture unit to GL_TEXTURE1. 8742 // Expect to restore active texture unit to GL_TEXTURE1.
9029 AddExpectationsForActiveTexture(GL_TEXTURE1); 8743 AddExpectationsForActiveTexture(GL_TEXTURE1);
9030 8744
9031 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); 8745 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
9032 } 8746 }
9033 8747
9034 TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1) { 8748 TEST_F(GLES2DecoderRestoreStateTest, NonDefaultUnit1) {
9035 InitDecoder( 8749 InitState init;
9036 "", // extensions 8750 init.gl_version = "3.0";
9037 "3.0", // gl version 8751 InitDecoder(init);
9038 false, // has alpha
9039 false, // has depth
9040 false, // has stencil
9041 false, // request alpha
9042 false, // request depth
9043 false, // request stencil
9044 false); // bind generates resource
9045 8752
9046 // Bind a non-default texture to GL_TEXTURE0 unit. 8753 // Bind a non-default texture to GL_TEXTURE0 unit.
9047 SetupTexture(); 8754 SetupTexture();
9048 8755
9049 // Construct a previous ContextState with GL_TEXTURE_2D target in 8756 // Construct a previous ContextState with GL_TEXTURE_2D target in
9050 // GL_TEXTURE1 unit bound to a non-default texture and the rest 8757 // GL_TEXTURE1 unit bound to a non-default texture and the rest
9051 // set to default textures. 8758 // set to default textures.
9052 ContextState prev_state(NULL, NULL); 8759 ContextState prev_state(NULL, NULL, NULL);
9053 InitializeContextState(&prev_state, 1, kServiceTextureId); 8760 InitializeContextState(&prev_state, 1, kServiceTextureId);
9054 8761
9055 InSequence sequence; 8762 InSequence sequence;
9056 // Expect to restore GL_TEXTURE_2D binding to the non-default texture 8763 // Expect to restore GL_TEXTURE_2D binding to the non-default texture
9057 // for GL_TEXTURE0 unit. 8764 // for GL_TEXTURE0 unit.
9058 AddExpectationsForActiveTexture(GL_TEXTURE0); 8765 AddExpectationsForActiveTexture(GL_TEXTURE0);
9059 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); 8766 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
9060 8767
9061 // Expect to restore GL_TEXTURE_2D binding to the default texture 8768 // Expect to restore GL_TEXTURE_2D binding to the default texture
9062 // for GL_TEXTURE1 unit. 8769 // for GL_TEXTURE1 unit.
9063 AddExpectationsForActiveTexture(GL_TEXTURE1); 8770 AddExpectationsForActiveTexture(GL_TEXTURE1);
9064 AddExpectationsForBindTexture(GL_TEXTURE_2D, 8771 AddExpectationsForBindTexture(GL_TEXTURE_2D,
9065 TestHelper::kServiceDefaultTexture2dId); 8772 TestHelper::kServiceDefaultTexture2dId);
9066 8773
9067 // Expect to restore active texture unit to GL_TEXTURE0. 8774 // Expect to restore active texture unit to GL_TEXTURE0.
9068 AddExpectationsForActiveTexture(GL_TEXTURE0); 8775 AddExpectationsForActiveTexture(GL_TEXTURE0);
9069 8776
9070 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); 8777 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
9071 } 8778 }
9072 8779
9073 TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) { 8780 TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
9074 CommandLine command_line(0, NULL); 8781 CommandLine command_line(0, NULL);
9075 command_line.AppendSwitchASCII( 8782 command_line.AppendSwitchASCII(
9076 switches::kGpuDriverBugWorkarounds, 8783 switches::kGpuDriverBugWorkarounds,
9077 base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE)); 8784 base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE));
9078 InitDecoderWithCommandLine( 8785 InitState init;
9079 "", // extensions 8786 init.gl_version = "3.0";
9080 "3.0", // gl version 8787 init.has_alpha = true;
9081 true, // has alpha 8788 init.request_alpha = true;
9082 false, // has depth 8789 init.bind_generates_resource = true;
9083 false, // has stencil 8790 InitDecoderWithCommandLine(init, &command_line);
9084 true, // request alpha
9085 false, // request depth
9086 false, // request stencil
9087 true, // bind generates resource
9088 &command_line);
9089 { 8791 {
9090 static AttribInfo attribs[] = { 8792 static AttribInfo attribs[] = {
9091 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 8793 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, },
9092 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 8794 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, },
9093 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 8795 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, },
9094 }; 8796 };
9095 static UniformInfo uniforms[] = { 8797 static UniformInfo uniforms[] = {
9096 { kUniform1Name, kUniform1Size, kUniform1Type, 8798 { kUniform1Name, kUniform1Size, kUniform1Type,
9097 kUniform1FakeLocation, kUniform1RealLocation, 8799 kUniform1FakeLocation, kUniform1RealLocation,
9098 kUniform1DesiredLocation }, 8800 kUniform1DesiredLocation },
(...skipping 16 matching lines...) Expand all
9115 EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 8817 EXPECT_CALL(*gl_, UseProgram(kServiceProgramId))
9116 .Times(1) 8818 .Times(1)
9117 .RetiresOnSaturation(); 8819 .RetiresOnSaturation();
9118 cmds::UseProgram cmd; 8820 cmds::UseProgram cmd;
9119 cmd.Init(client_program_id_); 8821 cmd.Init(client_program_id_);
9120 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8822 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9121 } 8823 }
9122 } 8824 }
9123 8825
9124 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES2) { 8826 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES2) {
9125 InitDecoder("GL_OES_texture_float", // extensions 8827 InitState init;
9126 "opengl es 2.0", // gl version 8828 init.extensions = "GL_OES_texture_float";
9127 false, // has alpha 8829 init.gl_version = "opengl es 2.0";
9128 false, // has depth 8830 InitDecoder(init);
9129 false, // has stencil
9130 false, // request alpha
9131 false, // request depth
9132 false, // request stencil
9133 false); // bind generates resource
9134 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8831 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
9135 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0); 8832 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
9136 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); 8833 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
9137 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, 8834 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE,
9138 GL_FLOAT, 0, 0); 8835 GL_FLOAT, 0, 0);
9139 DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, 8836 DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT,
9140 0, 0); 8837 0, 0);
9141 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0, 8838 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0,
9142 GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0); 8839 GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0);
9143 } 8840 }
9144 8841
9145 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES3) { 8842 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES3) {
9146 InitDecoder("GL_OES_texture_float GL_EXT_color_buffer_float", // extensions 8843 InitState init;
9147 "opengl es 3.0", // gl version 8844 init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
9148 false, // has alpha 8845 init.gl_version = "opengl es 3.0";
9149 false, // has depth 8846 InitDecoder(init);
9150 false, // has stencil
9151 false, // request alpha
9152 false, // request depth
9153 false, // request stencil
9154 false); // bind generates resource
9155 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8847 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
9156 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0); 8848 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
9157 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); 8849 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
9158 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 8850 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0,
9159 0); 8851 0);
9160 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, 8852 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE,
9161 GL_FLOAT, 0, 0); 8853 GL_FLOAT, 0, 0);
9162 DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, 8854 DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT,
9163 0, 0); 8855 0, 0);
9164 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0, 8856 DoTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 17, 0,
9165 GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0); 8857 GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0);
9166 } 8858 }
9167 8859
9168 TEST_F(GLES2DecoderManualInitTest, TexSubImage2DFloatOnGLES3) { 8860 TEST_F(GLES2DecoderManualInitTest, TexSubImage2DFloatOnGLES3) {
9169 InitDecoder("GL_OES_texture_float GL_EXT_color_buffer_float", // extensions 8861 InitState init;
9170 "opengl es 3.0", // gl version 8862 init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
9171 false, // has alpha 8863 init.gl_version = "opengl es 3.0";
9172 false, // has depth 8864 InitDecoder(init);
9173 false, // has stencil
9174 false, // request alpha
9175 false, // request depth
9176 false, // request stencil
9177 false); // bind generates resource
9178 const int kWidth = 8; 8865 const int kWidth = 8;
9179 const int kHeight = 4; 8866 const int kHeight = 4;
9180 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8867 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
9181 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA, 8868 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA,
9182 GL_FLOAT, 0, 0); 8869 GL_FLOAT, 0, 0);
9183 EXPECT_CALL(*gl_, TexImage2D( 8870 EXPECT_CALL(*gl_, TexImage2D(
9184 GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA, GL_FLOAT, 8871 GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA, GL_FLOAT,
9185 shared_memory_address_)) 8872 shared_memory_address_))
9186 .Times(1) 8873 .Times(1)
9187 .RetiresOnSaturation(); 8874 .RetiresOnSaturation();
9188 TexSubImage2D cmd; 8875 TexSubImage2D cmd;
9189 cmd.Init( 8876 cmd.Init(
9190 GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight, GL_RGBA, GL_FLOAT, 8877 GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight, GL_RGBA, GL_FLOAT,
9191 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); 8878 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
9192 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8879 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9193 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8880 EXPECT_EQ(GL_NO_ERROR, GetGLError());
9194 } 8881 }
9195 8882
9196 TEST_F(GLES2DecoderManualInitTest, TexSubImage2DFloatDoesClearOnGLES3) { 8883 TEST_F(GLES2DecoderManualInitTest, TexSubImage2DFloatDoesClearOnGLES3) {
9197 InitDecoder("GL_OES_texture_float GL_EXT_color_buffer_float", // extensions 8884 InitState init;
9198 "opengl es 3.0", // gl version 8885 init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
9199 false, // has alpha 8886 init.gl_version = "opengl es 3.0";
9200 false, // has depth 8887 InitDecoder(init);
9201 false, // has stencil
9202 false, // request alpha
9203 false, // request depth
9204 false, // request stencil
9205 false); // bind generates resource
9206 const int kWidth = 8; 8888 const int kWidth = 8;
9207 const int kHeight = 4; 8889 const int kHeight = 4;
9208 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8890 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
9209 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA, 8891 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, kWidth, kHeight, 0, GL_RGBA,
9210 GL_FLOAT, 0, 0); 8892 GL_FLOAT, 0, 0);
9211 SetupClearTextureExpectations( 8893 SetupClearTextureExpectations(
9212 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D, 8894 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
9213 0, GL_RGBA32F, GL_RGBA, GL_FLOAT, kWidth, kHeight); 8895 0, GL_RGBA32F, GL_RGBA, GL_FLOAT, kWidth, kHeight);
9214 EXPECT_CALL(*gl_, TexSubImage2D( 8896 EXPECT_CALL(*gl_, TexSubImage2D(
9215 GL_TEXTURE_2D, 0, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_FLOAT, 8897 GL_TEXTURE_2D, 0, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_FLOAT,
9216 shared_memory_address_)) 8898 shared_memory_address_))
9217 .Times(1) 8899 .Times(1)
9218 .RetiresOnSaturation(); 8900 .RetiresOnSaturation();
9219 TexSubImage2D cmd; 8901 TexSubImage2D cmd;
9220 cmd.Init( 8902 cmd.Init(
9221 GL_TEXTURE_2D, 0, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_FLOAT, 8903 GL_TEXTURE_2D, 0, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_FLOAT,
9222 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); 8904 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
9223 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8905 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9224 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8906 EXPECT_EQ(GL_NO_ERROR, GetGLError());
9225 } 8907 }
9226 8908
9227 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) { 8909 TEST_F(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) {
9228 InitDecoder("GL_ARB_texture_float", // extensions 8910 InitState init;
9229 "2.1", // gl version 8911 init.extensions = "GL_ARB_texture_float";
9230 false, // has alpha 8912 init.gl_version = "2.1";
9231 false, // has depth 8913 InitDecoder(init);
9232 false, // has stencil
9233 false, // request alpha
9234 false, // request depth
9235 false, // request stencil
9236 false); // bind generates resource
9237 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8914 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
9238 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 8915 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0,
9239 0); 8916 0);
9240 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0); 8917 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
9241 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, 8918 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0,
9242 GL_RGBA, GL_FLOAT, 0, 0, GL_RGBA32F_ARB); 8919 GL_RGBA, GL_FLOAT, 0, 0, GL_RGBA32F_ARB);
9243 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, 8920 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0,
9244 GL_RGB, GL_FLOAT, 0, 0, GL_RGB32F_ARB); 8921 GL_RGB, GL_FLOAT, 0, 0, GL_RGB32F_ARB);
9245 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, 8922 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0,
9246 GL_LUMINANCE, GL_FLOAT, 0, 0, 8923 GL_LUMINANCE, GL_FLOAT, 0, 0,
9247 GL_LUMINANCE32F_ARB); 8924 GL_LUMINANCE32F_ARB);
9248 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, 8925 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0,
9249 GL_ALPHA, GL_FLOAT, 0, 0, GL_ALPHA32F_ARB); 8926 GL_ALPHA, GL_FLOAT, 0, 0, GL_ALPHA32F_ARB);
9250 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16, 8927 DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, 16,
9251 17, 0, GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0, 8928 17, 0, GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0,
9252 GL_LUMINANCE_ALPHA32F_ARB); 8929 GL_LUMINANCE_ALPHA32F_ARB);
9253 } 8930 }
9254 8931
9255 TEST_F(GLES2DecoderManualInitTest, ReadFormatExtension) { 8932 TEST_F(GLES2DecoderManualInitTest, ReadFormatExtension) {
9256 InitDecoder( 8933 InitState init;
9257 "GL_OES_read_format", // extensions 8934 init.extensions = "GL_OES_read_format";
9258 "2.1", // gl version 8935 init.gl_version = "2.1";
9259 false, // has alpha 8936 init.bind_generates_resource = true;
9260 false, // has depth 8937 InitDecoder(init);
9261 false, // has stencil
9262 false, // request alpha
9263 false, // request depth
9264 false, // request stencil
9265 true); // bind generates resource
9266 8938
9267 EXPECT_CALL(*gl_, GetError()) 8939 EXPECT_CALL(*gl_, GetError())
9268 .WillOnce(Return(GL_NO_ERROR)) 8940 .WillOnce(Return(GL_NO_ERROR))
9269 .WillOnce(Return(GL_NO_ERROR)) 8941 .WillOnce(Return(GL_NO_ERROR))
9270 .WillOnce(Return(GL_NO_ERROR)) 8942 .WillOnce(Return(GL_NO_ERROR))
9271 .WillOnce(Return(GL_NO_ERROR)) 8943 .WillOnce(Return(GL_NO_ERROR))
9272 .RetiresOnSaturation(); 8944 .RetiresOnSaturation();
9273 EXPECT_CALL(*gl_, GetError()) 8945 EXPECT_CALL(*gl_, GetError())
9274 .Times(6) 8946 .Times(6)
9275 .RetiresOnSaturation(); 8947 .RetiresOnSaturation();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
9313 .RetiresOnSaturation(); 8985 .RetiresOnSaturation();
9314 cmd.Init( 8986 cmd.Init(
9315 GL_IMPLEMENTATION_COLOR_READ_TYPE, 8987 GL_IMPLEMENTATION_COLOR_READ_TYPE,
9316 shared_memory_id_, shared_memory_offset_); 8988 shared_memory_id_, shared_memory_offset_);
9317 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8989 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9318 EXPECT_EQ(1, result->GetNumResults()); 8990 EXPECT_EQ(1, result->GetNumResults());
9319 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8991 EXPECT_EQ(GL_NO_ERROR, GetGLError());
9320 } 8992 }
9321 8993
9322 TEST_F(GLES2DecoderManualInitTest, NoReadFormatExtension) { 8994 TEST_F(GLES2DecoderManualInitTest, NoReadFormatExtension) {
9323 InitDecoder( 8995 InitState init;
9324 "", // extensions 8996 init.gl_version = "2.1";
9325 "2.1", // gl version 8997 init.bind_generates_resource = true;
9326 false, // has alpha 8998 InitDecoder(init);
9327 false, // has depth
9328 false, // has stencil
9329 false, // request alpha
9330 false, // request depth
9331 false, // request stencil
9332 true); // bind generates resource
9333 8999
9334 EXPECT_CALL(*gl_, GetError()) 9000 EXPECT_CALL(*gl_, GetError())
9335 .WillOnce(Return(GL_NO_ERROR)) 9001 .WillOnce(Return(GL_NO_ERROR))
9336 .WillOnce(Return(GL_NO_ERROR)) 9002 .WillOnce(Return(GL_NO_ERROR))
9337 .WillOnce(Return(GL_NO_ERROR)) 9003 .WillOnce(Return(GL_NO_ERROR))
9338 .WillOnce(Return(GL_NO_ERROR)) 9004 .WillOnce(Return(GL_NO_ERROR))
9339 .RetiresOnSaturation(); 9005 .RetiresOnSaturation();
9340 9006
9341 typedef GetIntegerv::Result Result; 9007 typedef GetIntegerv::Result Result;
9342 Result* result = static_cast<Result*>(shared_memory_address_); 9008 Result* result = static_cast<Result*>(shared_memory_address_);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
9412 // TODO(gman): TexImage2DImmediate 9078 // TODO(gman): TexImage2DImmediate
9413 9079
9414 // TODO(gman): TexSubImage2DImmediate 9080 // TODO(gman): TexSubImage2DImmediate
9415 9081
9416 // TODO(gman): UseProgram 9082 // TODO(gman): UseProgram
9417 9083
9418 // TODO(gman): SwapBuffers 9084 // TODO(gman): SwapBuffers
9419 9085
9420 } // namespace gles2 9086 } // namespace gles2
9421 } // namespace gpu 9087 } // 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_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698