gles2_cmd_decoder_unittest_base.cc revision 010d83a9304c5a91596085d917d248abff47903a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string_split.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/cmd_buffer_engine.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/context_group.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "gpu/command_buffer/service/logger.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/program_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/test_helper.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "gpu/command_buffer/service/vertex_attrib_manager.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gl/gl_surface.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::gfx::MockGLInterface; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::InSequence; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::MatcherCast; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArrayArgument; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgPointee; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgumentPointee; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrictMock; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderTestBase::GLES2DecoderTestBase() 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : surface_(NULL), 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_(NULL), 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memory_tracker_(NULL), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_buffer_id_(100), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_framebuffer_id_(101), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_(102), 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_renderbuffer_id_(103), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_shader_id_(104), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_texture_id_(106), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_element_buffer_id_(107), 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_(121), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_(122), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_query_id_(123), 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) client_vertexarray_id_(124), 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ignore_cached_state_for_test_(GetParam()), 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_red_(true), 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_(true), 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_blue_(true), 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_(true), 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_mask_(true), 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_front_mask_(0xFFFFFFFFU), 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_back_mask_(0xFFFFFFFFU) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(immediate_buffer_, 0xEE, sizeof(immediate_buffer_)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderTestBase::~GLES2DecoderTestBase() {} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetUp() { 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitState init; 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.gl_version = "3.0"; 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.has_alpha = true; 74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.has_depth = true; 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_alpha = true; 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_depth = true; 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.bind_generates_resource = true; 78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitDecoder(init); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (GLint ii = 0; ii < kNumVertexAttribs; ++ii) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttrib4f(ii, 0.0f, 0.0f, 0.0f, 1.0f)) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 89e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochGLES2DecoderTestBase::InitState::InitState() 90e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : has_alpha(false), 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch has_depth(false), 92e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch has_stencil(false), 93e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_alpha(false), 94e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_depth(false), 95e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_stencil(false), 96e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bind_generates_resource(false), 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) lose_context_when_out_of_memory(false) { 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 99e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 100e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid GLES2DecoderTestBase::InitDecoder(const InitState& init) { 101e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitDecoderWithCommandLine(init, NULL); 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void GLES2DecoderTestBase::InitDecoderWithCommandLine( 105e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const InitState& init, 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::CommandLine* command_line) { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Framebuffer::ClearFramebufferCompleteComboMap(); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::GLSurface::InitializeOneOffWithMockBindingsForTests(); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(new StrictMock<MockGLInterface>()); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Only create stream texture manager if extension is requested. 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> list; 117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::SplitString(init.extensions, ' ', &list); 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<FeatureInfo> feature_info; 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (command_line) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) feature_info = new FeatureInfo(*command_line); 121e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch group_ = scoped_refptr<ContextGroup>( 122e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch new ContextGroup(NULL, 123e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch NULL, 124e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch memory_tracker_, 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ShaderTranslatorCache, 126e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch feature_info.get(), 127e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.bind_generates_resource)); 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool use_default_textures = init.bind_generates_resource; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence sequence; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) surface_ = new gfx::GLSurfaceStub; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Context needs to be created before initializing ContextGroup, which will 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // in turn initialize FeatureInfo, which needs a context to determine 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // extension support. 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context_ = new gfx::GLContextStubWithExtensions; 139e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch context_->AddExtensionsString(init.extensions.c_str()); 140e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch context_->SetGLVersionString(init.gl_version.c_str()); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context_->MakeCurrent(surface_.get()); 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_); 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestHelper::SetupContextGroupInitExpectations(gl_.get(), 146e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DisallowedFeatures(), 147e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.extensions.c_str(), 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch init.gl_version.c_str(), 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch init.bind_generates_resource); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We initialize the ContextGroup with a MockGLES2Decoder so that 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // we can use the ContextGroup to figure out how the real GLES2Decoder 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will initialize itself. 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mock_decoder_.reset(new MockGLES2Decoder()); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) group_->Initialize(mock_decoder_.get(), DisallowedFeatures())); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (group_->feature_info()->workarounds().init_vertex_attributes) 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddExpectationsForVertexAttribManager(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForBindVertexArrayOES(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(0)) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLuint attrib_0_id[] = { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceAttrib0BufferId, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLuint fixed_attrib_buffer_id[] = { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceFixedAttribBufferId, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(arraysize(attrib_0_id), _)) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>(attrib_0_id, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attrib_0_id + arraysize(attrib_0_id))) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId)) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, NULL)) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0)) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(arraysize(fixed_attrib_buffer_id), _)) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixed_attrib_buffer_id, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixed_attrib_buffer_id + arraysize(fixed_attrib_buffer_id))) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (GLint tt = 0; tt < TestHelper::kNumTextureUnits; ++tt) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0 + tt)) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().oes_egl_image_external) { 196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL(*gl_, 197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_EXTERNAL_OES, 198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultExternalTextureId 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().arb_texture_rectangle) { 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL( 206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *gl_, 207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_RECTANGLE_ARB, 208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultRectangleTextureId 210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL(*gl_, 215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_CUBE_MAP, 216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultTextureCubemapId 218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL( 222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *gl_, 223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture( 224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GL_TEXTURE_2D, 225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures ? TestHelper::kServiceDefaultTexture2dId : 0)) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .Times(1) 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .RetiresOnSaturation(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 237e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .WillOnce(SetArgumentPointee<1>(init.has_alpha ? 8 : 0)) 238e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 240e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .WillOnce(SetArgumentPointee<1>(init.has_depth ? 24 : 0)) 241e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 243e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .WillOnce(SetArgumentPointee<1>(init.has_stencil ? 8 : 0)) 244e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE)) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE)) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLint max_viewport_dims[] = { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kMaxViewportWidth, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kMaxViewportHeight 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_VIEWPORT_DIMS, _)) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_viewport_dims, max_viewport_dims + arraysize(max_viewport_dims))) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupInitCapabilitiesExpectations(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupInitStateExpectations(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0)) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, 0)) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // TODO(boliu): Remove OS_ANDROID once crbug.com/259023 is fixed and the 2847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // workaround has been reverted. 2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if !defined(OS_ANDROID) 286b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*gl_, Clear( 287b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) 288b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) .Times(1) 289b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) .RetiresOnSaturation(); 2907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 291b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine_.reset(new StrictMock<MockCommandBufferEngine>()); 293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<gpu::Buffer> buffer = 294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch engine_->GetSharedMemoryBuffer(kSharedMemoryId); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_offset_ = kSharedMemoryOffset; 296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory_address_ = 297effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_id_ = kSharedMemoryId; 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory_base_ = buffer->memory(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 301e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static const int32 kLoseContextWhenOutOfMemory = 0x10003; 302e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 303e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch int32 attributes[] = {EGL_ALPHA_SIZE, 304e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_alpha ? 8 : 0, 305e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch EGL_DEPTH_SIZE, 306e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_depth ? 24 : 0, 307e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch EGL_STENCIL_SIZE, 308e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_stencil ? 8 : 0, 309e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch kLoseContextWhenOutOfMemory, 310e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.lose_context_when_out_of_memory ? 1 : 0, }; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int32> attribs(attributes, attributes + arraysize(attributes)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.reset(GLES2Decoder::Create(group_.get())); 314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) decoder_->SetIgnoreCachedStateForTest(ignore_cached_state_for_test_); 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) decoder_->GetLogger()->set_log_synthesized_gl_errors(false); 31658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) decoder_->Initialize(surface_, 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) context_, 31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, 31958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) surface_->GetSize(), 32058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DisallowedFeatures(), 32158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) attribs); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->MakeCurrent(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->set_engine(engine_.get()); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->BeginDecoding(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(_, _)) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceBufferId)) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenBuffersImmediate>(client_buffer_id_); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceFramebufferId)) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenFramebuffersImmediate>(client_framebuffer_id_); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceRenderbufferId)) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenRenderbuffersImmediate>(client_renderbuffer_id_); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenTextures(_, _)) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceTextureId)) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenTexturesImmediate>(client_texture_id_); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(_, _)) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceElementBufferId)) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenBuffersImmediate>(client_element_buffer_id_); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateProgram(client_program_id_, kServiceProgramId); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader(GL_VERTEX_SHADER, client_shader_id_, kServiceShaderId); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::ResetDecoder() { 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!decoder_.get()) 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All Tests should have read all their GLErrors before getting here. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteBuffersARB(1, _)) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(2) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->EndDecoding(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->Destroy(true); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.reset(); 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) group_->Destroy(mock_decoder_.get(), false); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine_.reset(); 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(NULL); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::TearDown() { 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ResetDecoder(); 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::ExpectEnableDisable(GLenum cap, bool enable) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enable) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(cap)) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Disable(cap)) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLint GLES2DecoderTestBase::GetGLError() { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::GetError cmd; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(shared_memory_id_, shared_memory_offset_); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<GLint>(*GetSharedMemoryAs<GLenum*>()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCreateShader( 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum shader_type, GLuint client_id, GLuint service_id) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CreateShader(shader_type)) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(service_id)) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CreateShader cmd; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(shader_type, client_id); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsShader(GLuint client_id) { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsShader, cmds::IsShader::Result>(client_id); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteShader( 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteShader(service_id)) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteShader cmd; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCreateProgram( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CreateProgram()) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(service_id)) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CreateProgram cmd; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsProgram(GLuint client_id) { 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsProgram, cmds::IsProgram::Result>(client_id); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteProgram( 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint /* service_id */) { 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteProgram cmd; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetBucketAsCString( 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 bucket_id, const char* str) { 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 size = str ? (strlen(str) + 1) : 0; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd::SetBucketSize cmd1; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd1.Init(bucket_id, size); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, str, size); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd::SetBucketData cmd2; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd2.Init(bucket_id, 0, size, kSharedMemoryId, kSharedMemoryOffset); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearSharedMemory(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::SetupClearTextureExpectations( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint service_id, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint old_service_id, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum bind_target, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level, 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLenum internal_format, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum format, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum type, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(bind_target, service_id)) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, TexImage2D( 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) target, level, internal_format, width, height, 0, format, type, _)) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(bind_target, old_service_id)) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearing( 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint clear_bits, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupExpectationsForFramebufferClearingMulti( 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_bits, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_green, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_blue, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_alpha, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_stencil, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_depth, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_scissor_test); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForRestoreClearState( 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearColor( 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, restore_green, restore_blue, restore_alpha)) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearStencil(restore_stencil)) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearDepth(restore_depth)) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (restore_scissor_test) { 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST)) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearingMulti( 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint read_framebuffer_service_id, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint draw_framebuffer_service_id, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint clear_bits, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(gman): Figure out why InSequence stopped working. 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InSequence sequence; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(target)) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target == GL_READ_FRAMEBUFFER_EXT) { 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0)) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_DRAW_FRAMEBUFFER_EXT, read_framebuffer_service_id)) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_COLOR_BUFFER_BIT) != 0) { 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearColor(0.0f, 0.0f, 0.0f, 0.0f)) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 563010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForColorMask(true, true, true, true); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_STENCIL_BUFFER_BIT) != 0) { 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearStencil(0)) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, StencilMask(static_cast<GLuint>(-1))) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_DEPTH_BUFFER_BIT) != 0) { 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearDepth(1.0f)) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 577010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForDepthMask(true); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 579010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, false); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Clear(clear_bits)) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupExpectationsForRestoreClearState( 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, restore_green, restore_blue, restore_alpha, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_stencil, restore_depth, restore_scissor_test); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target == GL_READ_FRAMEBUFFER_EXT) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_READ_FRAMEBUFFER_EXT, read_framebuffer_service_id)) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_DRAW_FRAMEBUFFER_EXT, draw_framebuffer_service_id)) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SetupShaderForUniform(GLenum uniform_type) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "foo", 1, GL_FLOAT, 1, }, 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "goo", 1, GL_FLOAT, 2, }, 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UniformInfo uniforms[] = { 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "bar", 1, uniform_type, 0, 2, -1, }, 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "car", 4, uniform_type, 1, 1, -1, }, 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kClientVertexShaderId = 5001; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kServiceVertexShaderId = 6001; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kClientFragmentShaderId = 5002; 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kServiceFragmentShaderId = 6002; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kClientVertexShaderId, kServiceVertexShaderId, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kClientFragmentShaderId, kServiceFragmentShaderId); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindBuffer( 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(target, service_id)) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindBuffer cmd; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsBuffer(GLuint client_id) { 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsBuffer, cmds::IsBuffer::Result>(client_id); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteBuffer( 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(service_id))) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteBuffers cmd; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(1, shared_memory_id_, shared_memory_offset_); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, &client_id, sizeof(client_id)); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 649010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForColorMask(bool red, 650010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool green, 651010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool blue, 652010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool alpha) { 653010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || cached_color_mask_red_ != red || 654010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_ != green || cached_color_mask_blue_ != blue || 655010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_ != alpha) { 656010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_red_ = red; 657010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_ = green; 658010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_blue_ = blue; 659010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_ = alpha; 660010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, ColorMask(red, green, blue, alpha)) 661010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .Times(1) 662010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .RetiresOnSaturation(); 663010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 664010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 665010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 666010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForDepthMask(bool mask) { 667010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || cached_depth_mask_ != mask) { 668010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_mask_ = mask; 669010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, DepthMask(mask)).Times(1).RetiresOnSaturation(); 670010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 671010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 672010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 673010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForEnableDisable(GLenum cap, 674010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool enable) { 675010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switch (cap) { 676010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_BLEND: 677010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_blend == enable && 678010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 679010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 680010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_blend = enable; 681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 682010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_CULL_FACE: 683010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_cull_face == enable && 684010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 685010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 686010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_cull_face = enable; 687010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 688010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_DEPTH_TEST: 689010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_depth_test == enable && 690010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 691010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 692010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_depth_test = enable; 693010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 694010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_DITHER: 695010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_dither == enable && 696010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 697010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 698010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_dither = enable; 699010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 700010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_POLYGON_OFFSET_FILL: 701010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_polygon_offset_fill == enable && 702010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 703010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 704010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_polygon_offset_fill = enable; 705010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 706010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SAMPLE_ALPHA_TO_COVERAGE: 707010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_sample_alpha_to_coverage == enable && 708010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 709010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 710010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_sample_alpha_to_coverage = enable; 711010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 712010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SAMPLE_COVERAGE: 713010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_sample_coverage == enable && 714010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 715010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 716010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_sample_coverage = enable; 717010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 718010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SCISSOR_TEST: 719010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_scissor_test == enable && 720010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 721010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 722010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_scissor_test = enable; 723010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 724010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_STENCIL_TEST: 725010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_stencil_test == enable && 726010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 727010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 728010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_stencil_test = enable; 729010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 730010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) default: 731010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NOTREACHED(); 732010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 733010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 734010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable) { 735010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, Enable(cap)).Times(1).RetiresOnSaturation(); 736010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 737010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, Disable(cap)).Times(1).RetiresOnSaturation(); 738010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 739010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 740010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForApplyingDirtyState( 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_is_rgb, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_has_depth, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_has_stencil, 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint color_bits, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool depth_mask, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool depth_enabled, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint front_stencil_mask, 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint back_stencil_mask, 750010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool stencil_enabled) { 751010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_red = (color_bits & 0x1000) != 0; 752010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_green = (color_bits & 0x0100) != 0; 753010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_blue = (color_bits & 0x0010) != 0; 754010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_alpha = (color_bits & 0x0001) && !framebuffer_is_rgb; 755010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 756010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForColorMask( 757010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) color_mask_red, color_mask_green, color_mask_blue, color_mask_alpha); 758010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForDepthMask(depth_mask); 759010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 760010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || 761010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_front_mask_ != front_stencil_mask) { 762010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_front_mask_ = front_stencil_mask; 763010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, front_stencil_mask)) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 767010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 768010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || 769010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_back_mask_ != back_stencil_mask) { 770010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_back_mask_ = back_stencil_mask; 771010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, back_stencil_mask)) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 776010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_DEPTH_TEST, 777010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) framebuffer_has_depth && depth_enabled); 778010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_STENCIL_TEST, 779010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) framebuffer_has_stencil && stencil_enabled); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForApplyingDefaultDirtyState() { 783010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB 784010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // Framebuffer has depth 785010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // Framebuffer has stencil 786010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0x1111, // color bits 787010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, // depth mask 788010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // depth enabled 789010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, // front stencil mask 790010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, // back stencil mask 791010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false); // stencil enabled 792010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 793010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 794010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GLES2DecoderTestBase::EnableFlags::EnableFlags() 795010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : cached_blend(false), 796010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_cull_face(false), 797010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_test(false), 798010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_dither(true), 799010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_polygon_offset_fill(false), 800010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_sample_alpha_to_coverage(false), 801010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_sample_coverage(false), 802010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_scissor_test(false), 803010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_test(false) { 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindFramebuffer( 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(target, service_id)) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindFramebuffer cmd; 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsFramebuffer(GLuint client_id) { 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsFramebuffer, cmds::IsFramebuffer::Result>( 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_id); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteFramebuffer( 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id, 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reset_draw, GLenum draw_target, GLuint draw_id, 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reset_read, GLenum read_target, GLuint read_id) { 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reset_draw) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(draw_target, draw_id)) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reset_read) { 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(read_target, read_id)) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(service_id))) 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteFramebuffers cmd; 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(1, shared_memory_id_, shared_memory_offset_); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, &client_id, sizeof(client_id)); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindRenderbuffer( 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindRenderbufferEXT(target, service_id)) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindRenderbuffer cmd; 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsRenderbuffer(GLuint client_id) { 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsRenderbuffer, cmds::IsRenderbuffer::Result>( 8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_id); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteRenderbuffer( 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(service_id))) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteRenderbuffers cmd; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(1, shared_memory_id_, shared_memory_offset_); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, &client_id, sizeof(client_id)); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindTexture( 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(target, service_id)) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindTexture cmd; 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsTexture(GLuint client_id) { 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsTexture, cmds::IsTexture::Result>(client_id); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteTexture( 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(service_id))) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteTextures cmd; 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(1, shared_memory_id_, shared_memory_offset_); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, &client_id, sizeof(client_id)); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoTexImage2D( 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint level, GLenum internal_format, 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum format, GLenum type, 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 shared_memory_id, uint32 shared_memory_offset) { 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, TexImage2D(target, level, internal_format, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width, height, border, format, type, _)) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::TexImage2D cmd; 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, level, internal_format, width, height, border, format, 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, shared_memory_id, shared_memory_offset); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void GLES2DecoderTestBase::DoTexImage2DConvertInternalFormat( 9175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, GLint level, GLenum requested_internal_format, 9185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 9195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum format, GLenum type, 9205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 shared_memory_id, uint32 shared_memory_offset, 9215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum expected_internal_format) { 9225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, TexImage2D(target, level, expected_internal_format, 9265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) width, height, border, format, type, _)) 9275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .Times(1) 9285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 9295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 9325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmds::TexImage2D cmd; 9335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmd.Init(target, level, requested_internal_format, width, height, border, 9345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) format, type, shared_memory_id, shared_memory_offset); 9355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 9375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCompressedTexImage2D( 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint level, GLenum format, 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei size, uint32 bucket_id) { 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CompressedTexImage2D( 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, level, format, width, height, border, size, _)) 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommonDecoder::Bucket* bucket = decoder_->CreateBucket(bucket_id); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bucket->SetSize(size); 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CompressedTexImage2DBucket cmd; 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init( 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, level, format, width, height, border, 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bucket_id); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoRenderbufferStorage( 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLenum internal_format, GLenum actual_format, 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLenum error) { 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, RenderbufferStorageEXT( 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, actual_format, width, height)) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::RenderbufferStorage cmd; 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, internal_format, width, height); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoFramebufferTexture2D( 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLenum attachment, GLenum textarget, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint texture_client_id, GLuint texture_service_id, GLint level, 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error) { 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, FramebufferTexture2DEXT( 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, attachment, textarget, texture_service_id, level)) 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::FramebufferTexture2D cmd; 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, attachment, textarget, texture_client_id, level); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoFramebufferRenderbuffer( 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum attachment, 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum renderbuffer_target, 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer_client_id, 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer_service_id, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, attachment, renderbuffer_target, renderbuffer_service_id)) 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::FramebufferRenderbuffer cmd; 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, attachment, renderbuffer_target, renderbuffer_client_id); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoVertexAttribPointer( 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset) { 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VertexAttribPointer(index, size, type, GL_FALSE, stride, 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BufferOffset(offset))) 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::VertexAttribPointer cmd; 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index, size, GL_FLOAT, GL_FALSE, stride, offset); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoVertexAttribDivisorANGLE( 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index, GLuint divisor) { 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VertexAttribDivisorANGLE(index, divisor)) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::VertexAttribDivisorANGLE cmd; 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index, divisor); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForGenVertexArraysOES(){ 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenVertexArraysOES(1, _)) 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceVertexArrayId)) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForDeleteVertexArraysOES(){ 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, _)) 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid GLES2DecoderTestBase::AddExpectationsForDeleteBoundVertexArraysOES() { 10600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Expectations are the same as a delete, followed by binding VAO 0. 10610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddExpectationsForDeleteVertexArraysOES(); 10620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddExpectationsForBindVertexArrayOES(); 10630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 10640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForBindVertexArrayOES() { 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindVertexArrayOES(_)) 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32 vv = 0; vv < group_->max_vertex_attribs(); ++vv) { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForRestoreAttribState(vv); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ELEMENT_ARRAY_BUFFER, _)) 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForRestoreAttribState(GLuint attrib) { 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(attrib, _, _, _, _, _)) 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(attrib, _)) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attrib != 0 || 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bajones): Not sure if I can tell which of these will be called 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(attrib)) 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DisableVertexAttribArray(attrib)) 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GCC requires these declarations, but MSVC requires they not be present 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef COMPILER_MSVC 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kBackBufferWidth; 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kBackBufferHeight; 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxTextureSize; 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxCubeMapTextureSize; 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kNumVertexAttribs; 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kNumTextureUnits; 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxTextureImageUnits; 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVertexTextureImageUnits; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxFragmentUniformVectors; 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVaryingVectors; 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVertexUniformVectors; 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxViewportWidth; 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxViewportHeight; 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportX; 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportY; 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportWidth; 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportHeight; 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceAttrib0BufferId; 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFixedAttribBufferId; 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceBufferId; 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFramebufferId; 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceRenderbufferId; 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceTextureId; 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceProgramId; 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceShaderId; 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceElementBufferId; 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceQueryId; 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceVertexArrayId; 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 GLES2DecoderTestBase::kSharedMemoryId; 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t GLES2DecoderTestBase::kSharedBufferSize; 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kSharedMemoryOffset; 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 GLES2DecoderTestBase::kInvalidSharedMemoryId; 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInvalidSharedMemoryOffset; 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInitialResult; 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint8 GLES2DecoderTestBase::kInitialMemoryValue; 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kNewClientId; 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kNewServiceId; 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInvalidClientId; 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceVertexShaderId; 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFragmentShaderId; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumShaderId; 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumProgramId; 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumTextureBufferId; 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumVertexBufferId; 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumFBOId; 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumPositionAttrib; 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumTexAttrib; 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumSamplerLocation; 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLsizei GLES2DecoderTestBase::kNumVertices; 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLsizei GLES2DecoderTestBase::kNumIndices; 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kValidIndexRangeStart; 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kValidIndexRangeCount; 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kInvalidIndexRangeStart; 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kInvalidIndexRangeCount; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kOutOfRangeIndexRangeEnd; 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kMaxValidIndex; 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxAttribLength; 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib1Size; 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib2Size; 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib3Size; 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib1Location; 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib2Location; 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib3Location; 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib1Type; 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib2Type; 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib3Type; 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kInvalidAttribLocation; 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kBadAttribIndex; 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxUniformLength; 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1Size; 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2Size; 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3Size; 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1RealLocation; 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2RealLocation; 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2ElementRealLocation; 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3RealLocation; 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1FakeLocation; 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2FakeLocation; 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2ElementFakeLocation; 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3FakeLocation; 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1DesiredLocation; 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2DesiredLocation; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3DesiredLocation; 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform1Type; 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform2Type; 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform3Type; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniformCubemapType; 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kInvalidUniformLocation; 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kBadUniformIndex; 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib1Name = "attrib1"; 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib2Name = "attrib2"; 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib3Name = "attrib3"; 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform1Name = "uniform1"; 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform2Name = "uniform2[0]"; 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform3Name = "uniform3[0]"; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupDefaultProgram() { 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static UniformInfo uniforms[] = { 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform1Name, kUniform1Size, kUniform1Type, 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1FakeLocation, kUniform1RealLocation, 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1DesiredLocation }, 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform2Name, kUniform2Size, kUniform2Type, 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2FakeLocation, kUniform2RealLocation, 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2DesiredLocation }, 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform3Name, kUniform3Size, kUniform3Type, 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3FakeLocation, kUniform3RealLocation, 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3DesiredLocation }, 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_, kServiceVertexShaderId, 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_, kServiceFragmentShaderId); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupCubemapProgram() { 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static UniformInfo uniforms[] = { 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform1Name, kUniform1Size, kUniformCubemapType, 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1FakeLocation, kUniform1RealLocation, 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1DesiredLocation, }, 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform2Name, kUniform2Size, kUniform2Type, 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2FakeLocation, kUniform2RealLocation, 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2DesiredLocation, }, 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform3Name, kUniform3Size, kUniform3Type, 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3FakeLocation, kUniform3RealLocation, 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3DesiredLocation, }, 1276558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch }; 1277558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 1278558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_program_id_, kServiceProgramId, 1279558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_vertex_shader_id_, kServiceVertexShaderId, 1280558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_fragment_shader_id_, kServiceFragmentShaderId); 1281558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1282558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1283558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { 1284558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 1285558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch .Times(1) 1286558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch .RetiresOnSaturation(); 1287558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch cmds::UseProgram cmd; 1288558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch cmd.Init(client_program_id_); 1289558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1290558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1291558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 1292558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1293558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid GLES2DecoderTestBase::SetupSamplerExternalProgram() { 1294558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { 1295558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static AttribInfo attribs[] = { 1296558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 1297558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 1298558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 1299558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch }; 1300558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static UniformInfo uniforms[] = { 1301558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform1Name, kUniform1Size, kUniformSamplerExternalType, 1302558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform1FakeLocation, kUniform1RealLocation, 1303558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform1DesiredLocation, }, 1304558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform2Name, kUniform2Size, kUniform2Type, 1305558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform2FakeLocation, kUniform2RealLocation, 1306558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform2DesiredLocation, }, 1307558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform3Name, kUniform3Size, kUniform3Type, 1308558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform3FakeLocation, kUniform3RealLocation, 1309558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform3DesiredLocation, }, 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_, kServiceVertexShaderId, 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_, kServiceFragmentShaderId); 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::TearDown() { 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::TearDown(); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupShader( 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::AttribInfo* attribs, size_t num_attribs, 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::UniformInfo* uniforms, size_t num_uniforms, 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program_client_id, GLuint program_service_id, 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint vertex_shader_client_id, GLuint vertex_shader_service_id, 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint fragment_shader_client_id, GLuint fragment_shader_service_id) { 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence s; 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AttachShader(program_service_id, vertex_shader_service_id)) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AttachShader(program_service_id, fragment_shader_service_id)) 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestHelper::SetupShader( 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.get(), attribs, num_attribs, uniforms, num_uniforms, 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) program_service_id); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader( 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_VERTEX_SHADER, vertex_shader_client_id, vertex_shader_service_id); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader( 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_FRAGMENT_SHADER, fragment_shader_client_id, 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fragment_shader_service_id); 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetShader(vertex_shader_client_id)->SetStatus(true, "", NULL); 13602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetShader(fragment_shader_client_id)->SetStatus(true, "", NULL); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::AttachShader attach_cmd; 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attach_cmd.Init(program_client_id, vertex_shader_client_id); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attach_cmd.Init(program_client_id, fragment_shader_client_id); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::LinkProgram link_cmd; 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_cmd.Init(program_client_id); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd)); 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::DoEnableDisable(GLenum cap, bool enable) { 1376010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(cap, enable); 1377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable) { 1378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmds::Enable cmd; 1379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmd.Init(cap); 1380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 1382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmds::Disable cmd; 1383010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmd.Init(cap); 1384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 1387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoEnableVertexAttribArray(GLint index) { 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(index)) 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::EnableVertexAttribArray cmd; 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBufferData(GLenum target, GLsizei size) { 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW)) 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BufferData cmd; 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, size, 0, 0, GL_STREAM_DRAW); 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBufferSubData( 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint offset, GLsizei size, const void* data) { 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferSubData(target, offset, size, 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_address_)) 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, data, size); 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BufferSubData cmd; 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, offset, size, shared_memory_id_, shared_memory_offset_); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupVertexBuffer() { 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(1); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat f = 0; 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ARRAY_BUFFER, kNumVertices * 2 * sizeof(f)); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupAllNeededVertexBuffers() { 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ARRAY_BUFFER, kNumVertices * 16 * sizeof(float)); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(0); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(1); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(2); 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0); 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupIndexBuffer() { 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_element_buffer_id_, 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceElementBufferId); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const GLshort indices[] = {100, 1, 2, 3, 4, 5, 6, 7, 100, 9}; 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(indices) == kNumIndices, Indices_is_not_10); 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices)); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, 2, indices); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 2, sizeof(indices) - 2, &indices[1]); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupTexture() { 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kSharedMemoryId, kSharedMemoryOffset); 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DeleteVertexBuffer() { 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDeleteBuffer(client_buffer_id_, kServiceBufferId); 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DeleteIndexBuffer() { 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDeleteBuffer(client_element_buffer_id_, kServiceElementBufferId); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0WithError( 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_vertices, GLuint buffer_id, GLenum error) { 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId)) 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_vertices * sizeof(GLfloat) * 4, 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _, GL_DYNAMIC_DRAW)) 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferSubData( 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_ARRAY_BUFFER, 0, num_vertices * sizeof(GLfloat) * 4, _)) 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL)) 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0)) 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL)) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id)) 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0( 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_vertices, GLuint buffer_id) { 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForSimulatedAttrib0WithError( 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_vertices, buffer_id, GL_NO_ERROR); 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine:: 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCommandBufferEngine() { 1513effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1514effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); 1515effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shm->CreateAndMapAnonymous(kSharedBufferSize); 1516e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch valid_buffer_ = MakeBufferFromSharedMemory(shm.Pass(), kSharedBufferSize); 1517effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ClearSharedMemory(); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine:: 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)~MockCommandBufferEngine() {} 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1524effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_refptr<gpu::Buffer> 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::GetSharedMemoryBuffer( 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 shm_id) { 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_; 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::set_token( 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 token) { 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::SetGetBuffer( 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 /* transfer_buffer_id */) { 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::SetGetOffset( 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 offset) { 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32 GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::GetGetOffset() { 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::SetUp() { 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::SetUp(); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupDefaultProgram(); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Include the auto-generated part of this file. We split this because it means 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we can easily edit the non-auto generated parts right here in this file 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instead of having to edit some template or the code generator. 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 1564