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" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gpu/command_buffer/service/mailbox_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/program_manager.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/test_helper.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "gpu/command_buffer/service/vertex_attrib_manager.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gl/gl_surface.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::gfx::MockGLInterface; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::InSequence; 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using ::testing::Invoke; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using ::testing::InvokeWithoutArgs; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::MatcherCast; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArrayArgument; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgPointee; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgumentPointee; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrictMock; 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using ::testing::WithArg; 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void NormalizeInitState(gpu::gles2::GLES2DecoderTestBase::InitState* init) { 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK(init); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char* kVAOExtensions[] = { 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "GL_OES_vertex_array_object", 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "GL_ARB_vertex_array_object", 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "GL_APPLE_vertex_array_object" 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool contains_vao_extension = false; 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t ii = 0; ii < arraysize(kVAOExtensions); ++ii) { 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (init->extensions.find(kVAOExtensions[ii]) != std::string::npos) { 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) contains_vao_extension = true; 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (init->use_native_vao) { 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (contains_vao_extension) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!init->extensions.empty()) 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init->extensions += " "; 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (StartsWithASCII(init->gl_version, "opengl es", false)) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init->extensions += kVAOExtensions[0]; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_MACOSX) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init->extensions += kVAOExtensions[1]; 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#else 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) init->extensions += kVAOExtensions[2]; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // OS_MACOSX 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Make sure we don't set up an invalid InitState. 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK(!contains_vao_extension); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace Anonymous 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderTestBase::GLES2DecoderTestBase() 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : surface_(NULL), 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_(NULL), 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memory_tracker_(NULL), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_buffer_id_(100), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_framebuffer_id_(101), 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_(102), 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_renderbuffer_id_(103), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_shader_id_(104), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_texture_id_(106), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_element_buffer_id_(107), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_(121), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_(122), 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_query_id_(123), 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) client_vertexarray_id_(124), 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_id_(0), 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_valid_(false), 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ignore_cached_state_for_test_(GetParam()), 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_red_(true), 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_(true), 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_blue_(true), 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_(true), 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_mask_(true), 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_stencil_front_mask_(static_cast<GLuint>(-1)), 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_stencil_back_mask_(static_cast<GLuint>(-1)) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(immediate_buffer_, 0xEE, sizeof(immediate_buffer_)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderTestBase::~GLES2DecoderTestBase() {} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetUp() { 115e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitState init; 116e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.gl_version = "3.0"; 117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.has_alpha = true; 118e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.has_depth = true; 119e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_alpha = true; 120e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.request_depth = true; 121e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch init.bind_generates_resource = true; 122e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitDecoder(init); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (GLint ii = 0; ii < kNumVertexAttribs; ++ii) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttrib4f(ii, 0.0f, 0.0f, 0.0f, 1.0f)) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 133e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochGLES2DecoderTestBase::InitState::InitState() 134e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : has_alpha(false), 135e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch has_depth(false), 136e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch has_stencil(false), 137e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_alpha(false), 138e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_depth(false), 139e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch request_stencil(false), 140e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bind_generates_resource(false), 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) lose_context_when_out_of_memory(false), 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) use_native_vao(true) { 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 144e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 145e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid GLES2DecoderTestBase::InitDecoder(const InitState& init) { 146e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InitDecoderWithCommandLine(init, NULL); 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void GLES2DecoderTestBase::InitDecoderWithCommandLine( 150e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const InitState& init, 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::CommandLine* command_line) { 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InitState normalized_init = init; 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NormalizeInitState(&normalized_init); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Framebuffer::ClearFramebufferCompleteComboMap(); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::GLSurface::InitializeOneOffWithMockBindingsForTests(); 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(new StrictMock<MockGLInterface>()); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetupMockGLBehaviors(); 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Only create stream texture manager if extension is requested. 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::string> list; 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::SplitString(normalized_init.extensions, ' ', &list); 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<FeatureInfo> feature_info; 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (command_line) 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) feature_info = new FeatureInfo(*command_line); 170e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch group_ = scoped_refptr<ContextGroup>( 171e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch new ContextGroup(NULL, 172e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch memory_tracker_, 173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ShaderTranslatorCache, 174e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch feature_info.get(), 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.bind_generates_resource)); 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool use_default_textures = normalized_init.bind_generates_resource; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence sequence; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) surface_ = new gfx::GLSurfaceStub; 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Context needs to be created before initializing ContextGroup, which will 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // in turn initialize FeatureInfo, which needs a context to determine 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // extension support. 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context_ = new gfx::GLContextStubWithExtensions; 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_->AddExtensionsString(normalized_init.extensions.c_str()); 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_->SetGLVersionString(normalized_init.gl_version.c_str()); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context_->MakeCurrent(surface_.get()); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_.get()); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestHelper::SetupContextGroupInitExpectations( 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gl_.get(), 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DisallowedFeatures(), 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.extensions.c_str(), 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.gl_version.c_str(), 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.bind_generates_resource); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We initialize the ContextGroup with a MockGLES2Decoder so that 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // we can use the ContextGroup to figure out how the real GLES2Decoder 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will initialize itself. 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mock_decoder_.reset(new MockGLES2Decoder()); 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Install FakeDoCommands handler so we can use individual DoCommand() 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // expectations. 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_decoder_, DoCommands(_, _, _, _)).WillRepeatedly( 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Invoke(mock_decoder_.get(), &MockGLES2Decoder::FakeDoCommands)); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) group_->Initialize(mock_decoder_.get(), DisallowedFeatures())); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2130de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*gl_, GenVertexArraysOES(1, _)) 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceVertexArrayId)) 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .RetiresOnSaturation(); 2170de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) EXPECT_CALL(*gl_, BindVertexArrayOES(_)).Times(1).RetiresOnSaturation(); 2180de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) } 2190de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (group_->feature_info()->workarounds().init_vertex_attributes) 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddExpectationsForVertexAttribManager(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForBindVertexArrayOES(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(0)) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLuint attrib_0_id[] = { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceAttrib0BufferId, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLuint fixed_attrib_buffer_id[] = { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceFixedAttribBufferId, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(arraysize(attrib_0_id), _)) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>(attrib_0_id, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attrib_0_id + arraysize(attrib_0_id))) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId)) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, NULL)) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0)) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(arraysize(fixed_attrib_buffer_id), _)) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>( 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixed_attrib_buffer_id, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixed_attrib_buffer_id + arraysize(fixed_attrib_buffer_id))) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (GLint tt = 0; tt < TestHelper::kNumTextureUnits; ++tt) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0 + tt)) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().oes_egl_image_external) { 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL(*gl_, 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_EXTERNAL_OES, 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultExternalTextureId 262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().arb_texture_rectangle) { 267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL( 268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *gl_, 269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_RECTANGLE_ARB, 270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultRectangleTextureId 272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL(*gl_, 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture(GL_TEXTURE_CUBE_MAP, 278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ? TestHelper::kServiceDefaultTextureCubemapId 280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : 0)) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_CALL( 284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *gl_, 285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BindTexture( 286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GL_TEXTURE_2D, 287c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_default_textures ? TestHelper::kServiceDefaultTexture2dId : 0)) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .Times(1) 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .RetiresOnSaturation(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(normalized_init.has_alpha ? 8 : 0)) 300e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(normalized_init.has_depth ? 24 : 0)) 303e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(normalized_init.has_stencil ? 8 : 0)) 306e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch .RetiresOnSaturation(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE)) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE)) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GLint max_viewport_dims[] = { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kMaxViewportWidth, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kMaxViewportHeight 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetIntegerv(GL_MAX_VIEWPORT_DIMS, _)) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArrayArgument<1>( 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_viewport_dims, max_viewport_dims + arraysize(max_viewport_dims))) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupInitCapabilitiesExpectations(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupInitStateExpectations(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0)) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, 0)) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // TODO(boliu): Remove OS_ANDROID once crbug.com/259023 is fixed and the 3467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // workaround has been reverted. 3477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if !defined(OS_ANDROID) 348b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*gl_, Clear( 349b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) 350b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) .Times(1) 351b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) .RetiresOnSaturation(); 3527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 353b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine_.reset(new StrictMock<MockCommandBufferEngine>()); 355effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<gpu::Buffer> buffer = 356effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch engine_->GetSharedMemoryBuffer(kSharedMemoryId); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_offset_ = kSharedMemoryOffset; 358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory_address_ = 359effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_id_ = kSharedMemoryId; 361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory_base_ = buffer->memory(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static const int32 kLoseContextWhenOutOfMemory = 0x10002; 364e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int32 attributes[] = { 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EGL_ALPHA_SIZE, 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.request_alpha ? 8 : 0, 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EGL_DEPTH_SIZE, 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.request_depth ? 24 : 0, 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EGL_STENCIL_SIZE, 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.request_stencil ? 8 : 0, 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kLoseContextWhenOutOfMemory, 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) normalized_init.lose_context_when_out_of_memory ? 1 : 0, }; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int32> attribs(attributes, attributes + arraysize(attributes)); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.reset(GLES2Decoder::Create(group_.get())); 377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) decoder_->SetIgnoreCachedStateForTest(ignore_cached_state_for_test_); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) decoder_->GetLogger()->set_log_synthesized_gl_errors(false); 37958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) decoder_->Initialize(surface_, 38058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) context_, 38158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false, 38258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) surface_->GetSize(), 38358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DisallowedFeatures(), 38458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) attribs); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->MakeCurrent(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->set_engine(engine_.get()); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->BeginDecoding(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(_, _)) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceBufferId)) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenBuffersImmediate>(client_buffer_id_); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceFramebufferId)) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenFramebuffersImmediate>(client_framebuffer_id_); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceRenderbufferId)) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenRenderbuffersImmediate>(client_renderbuffer_id_); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenTextures(_, _)) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceTextureId)) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenTexturesImmediate>(client_texture_id_); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenBuffersARB(_, _)) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceElementBufferId)) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GenHelper<cmds::GenBuffersImmediate>(client_element_buffer_id_); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateProgram(client_program_id_, kServiceProgramId); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader(GL_VERTEX_SHADER, client_shader_id_, kServiceShaderId); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::ResetDecoder() { 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!decoder_.get()) 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All Tests should have read all their GLErrors before getting here. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GL_NO_ERROR, GetGLError()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteBuffersARB(1, _)) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(2) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, Pointee(kServiceVertexArrayId))) 427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .Times(1) 428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .RetiresOnSaturation(); 429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) decoder_->EndDecoding(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_->Destroy(true); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.reset(); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) group_->Destroy(mock_decoder_.get(), false); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine_.reset(); 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::gfx::MockGLInterface::SetGLInterface(NULL); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.reset(); 438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::ClearGLBindings(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::TearDown() { 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ResetDecoder(); 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::ExpectEnableDisable(GLenum cap, bool enable) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enable) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(cap)) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Disable(cap)) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLint GLES2DecoderTestBase::GetGLError() { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::GetError cmd; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(shared_memory_id_, shared_memory_offset_); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<GLint>(*GetSharedMemoryAs<GLenum*>()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCreateShader( 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum shader_type, GLuint client_id, GLuint service_id) { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CreateShader(shader_type)) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(service_id)) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CreateShader cmd; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(shader_type, client_id); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsShader(GLuint client_id) { 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsShader, cmds::IsShader::Result>(client_id); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteShader( 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteShader(service_id)) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteShader cmd; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCreateProgram( 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CreateProgram()) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(service_id)) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CreateProgram cmd; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsProgram(GLuint client_id) { 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsProgram, cmds::IsProgram::Result>(client_id); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteProgram( 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint /* service_id */) { 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::DeleteProgram cmd; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_id); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetBucketAsCString( 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 bucket_id, const char* str) { 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 size = str ? (strlen(str) + 1) : 0; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd::SetBucketSize cmd1; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd1.Init(bucket_id, size); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (str) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, str, size); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd::SetBucketData cmd2; 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd2.Init(bucket_id, 0, size, kSharedMemoryId, kSharedMemoryOffset); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearSharedMemory(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void GLES2DecoderTestBase::SetupClearTextureExpectations( 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint service_id, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint old_service_id, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum bind_target, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLint level, 536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GLenum internal_format, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum format, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum type, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei height) { 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(bind_target, service_id)) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, TexImage2D( 545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) target, level, internal_format, width, height, 0, format, type, _)) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(bind_target, old_service_id)) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearing( 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint clear_bits, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupExpectationsForFramebufferClearingMulti( 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_bits, 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_green, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_blue, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_alpha, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_stencil, 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_depth, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_scissor_test); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForRestoreClearState( 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearColor( 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, restore_green, restore_blue, restore_alpha)) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearStencil(restore_stencil)) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearDepth(restore_depth)) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (restore_scissor_test) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST)) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearingMulti( 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint read_framebuffer_service_id, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint draw_framebuffer_service_id, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint clear_bits, 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_red, 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_green, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_blue, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_alpha, 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint restore_stencil, 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLclampf restore_depth, 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restore_scissor_test) { 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(gman): Figure out why InSequence stopped working. 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InSequence sequence; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(target)) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target == GL_READ_FRAMEBUFFER_EXT) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0)) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_DRAW_FRAMEBUFFER_EXT, read_framebuffer_service_id)) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_COLOR_BUFFER_BIT) != 0) { 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearColor(0.0f, 0.0f, 0.0f, 0.0f)) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 632010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForColorMask(true, true, true, true); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_STENCIL_BUFFER_BIT) != 0) { 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearStencil(0)) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, StencilMask(static_cast<GLuint>(-1))) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((clear_bits & GL_DEPTH_BUFFER_BIT) != 0) { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, ClearDepth(1.0f)) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 646010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForDepthMask(true); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 648010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, false); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, Clear(clear_bits)) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupExpectationsForRestoreClearState( 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_red, restore_green, restore_blue, restore_alpha, 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_stencil, restore_depth, restore_scissor_test); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target == GL_READ_FRAMEBUFFER_EXT) { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_READ_FRAMEBUFFER_EXT, read_framebuffer_service_id)) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT( 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_DRAW_FRAMEBUFFER_EXT, draw_framebuffer_service_id)) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SetupShaderForUniform(GLenum uniform_type) { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "foo", 1, GL_FLOAT, 1, }, 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "goo", 1, GL_FLOAT, 2, }, 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UniformInfo uniforms[] = { 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "bar", 1, uniform_type, 0, 2, -1, }, 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "car", 4, uniform_type, 1, 1, -1, }, 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kClientVertexShaderId = 5001; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kServiceVertexShaderId = 6001; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kClientFragmentShaderId = 5002; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GLuint kServiceFragmentShaderId = 6002; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kClientVertexShaderId, kServiceVertexShaderId, 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kClientFragmentShaderId, kServiceFragmentShaderId); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindBuffer( 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(target, service_id)) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindBuffer cmd; 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsBuffer(GLuint client_id) { 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsBuffer, cmds::IsBuffer::Result>(client_id); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteBuffer( 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(service_id))) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 712cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GenHelper<cmds::DeleteBuffersImmediate>(client_id); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForColorMask(bool red, 716010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool green, 717010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool blue, 718010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool alpha) { 719010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || cached_color_mask_red_ != red || 720010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_ != green || cached_color_mask_blue_ != blue || 721010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_ != alpha) { 722010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_red_ = red; 723010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_green_ = green; 724010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_blue_ = blue; 725010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_color_mask_alpha_ = alpha; 726010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, ColorMask(red, green, blue, alpha)) 727010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .Times(1) 728010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) .RetiresOnSaturation(); 729010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 730010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 731010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 732010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForDepthMask(bool mask) { 733010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (ignore_cached_state_for_test_ || cached_depth_mask_ != mask) { 734010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_mask_ = mask; 735010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, DepthMask(mask)).Times(1).RetiresOnSaturation(); 736010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 737010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 738010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 739116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GLES2DecoderTestBase::SetupExpectationsForStencilMask(GLuint front_mask, 740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLuint back_mask) { 74146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ignore_cached_state_for_test_ || 74246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cached_stencil_front_mask_ != front_mask) { 74346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cached_stencil_front_mask_ = front_mask; 74446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, front_mask)) 74546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .Times(1) 74646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .RetiresOnSaturation(); 74746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 74846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 74946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ignore_cached_state_for_test_ || 75046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cached_stencil_back_mask_ != back_mask) { 75146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cached_stencil_back_mask_ = back_mask; 75246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, back_mask)) 75346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .Times(1) 75446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .RetiresOnSaturation(); 75546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 75646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 75746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 758010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForEnableDisable(GLenum cap, 759010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool enable) { 760010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) switch (cap) { 761010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_BLEND: 762010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_blend == enable && 763010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 764010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 765010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_blend = enable; 766010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 767010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_CULL_FACE: 768010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_cull_face == enable && 769010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 770010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 771010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_cull_face = enable; 772010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 773010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_DEPTH_TEST: 774010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_depth_test == enable && 775010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 776010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 777010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_depth_test = enable; 778010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 779010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_DITHER: 780010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_dither == enable && 781010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 782010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 783010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_dither = enable; 784010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 785010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_POLYGON_OFFSET_FILL: 786010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_polygon_offset_fill == enable && 787010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 788010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 789010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_polygon_offset_fill = enable; 790010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 791010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SAMPLE_ALPHA_TO_COVERAGE: 792010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_sample_alpha_to_coverage == enable && 793010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 794010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 795010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_sample_alpha_to_coverage = enable; 796010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 797010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SAMPLE_COVERAGE: 798010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_sample_coverage == enable && 799010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 800010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 801010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_sample_coverage = enable; 802010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 803010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_SCISSOR_TEST: 804010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_scissor_test == enable && 805010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 806010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 807010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_scissor_test = enable; 808010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 809010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case GL_STENCIL_TEST: 810010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable_flags_.cached_stencil_test == enable && 811010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !ignore_cached_state_for_test_) 812010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 813010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) enable_flags_.cached_stencil_test = enable; 814010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) break; 815010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) default: 816010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NOTREACHED(); 817010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 818010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 819010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable) { 820010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, Enable(cap)).Times(1).RetiresOnSaturation(); 821010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 822010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(*gl_, Disable(cap)).Times(1).RetiresOnSaturation(); 823010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 824010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 825010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForApplyingDirtyState( 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_is_rgb, 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_has_depth, 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool framebuffer_has_stencil, 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint color_bits, 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool depth_mask, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool depth_enabled, 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint front_stencil_mask, 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint back_stencil_mask, 835010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool stencil_enabled) { 836010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_red = (color_bits & 0x1000) != 0; 837010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_green = (color_bits & 0x0100) != 0; 838010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_blue = (color_bits & 0x0010) != 0; 839010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool color_mask_alpha = (color_bits & 0x0001) && !framebuffer_is_rgb; 840010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 841010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForColorMask( 842010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) color_mask_red, color_mask_green, color_mask_blue, color_mask_alpha); 843010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForDepthMask(depth_mask); 84446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetupExpectationsForStencilMask(front_stencil_mask, back_stencil_mask); 845010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_DEPTH_TEST, 846010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) framebuffer_has_depth && depth_enabled); 847010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(GL_STENCIL_TEST, 848010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) framebuffer_has_stencil && stencil_enabled); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupExpectationsForApplyingDefaultDirtyState() { 852010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB 853010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // Framebuffer has depth 854010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // Framebuffer has stencil 855010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0x1111, // color bits 856010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, // depth mask 857010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, // depth enabled 858010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, // front stencil mask 859010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 0, // back stencil mask 860010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false); // stencil enabled 861010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 862010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 863010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GLES2DecoderTestBase::EnableFlags::EnableFlags() 864010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : cached_blend(false), 865010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_cull_face(false), 866010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_depth_test(false), 867010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_dither(true), 868010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_polygon_offset_fill(false), 869010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_sample_alpha_to_coverage(false), 870010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_sample_coverage(false), 871010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_scissor_test(false), 872010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cached_stencil_test(false) { 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindFramebuffer( 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(target, service_id)) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindFramebuffer cmd; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsFramebuffer(GLuint client_id) { 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsFramebuffer, cmds::IsFramebuffer::Result>( 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_id); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteFramebuffer( 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id, 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reset_draw, GLenum draw_target, GLuint draw_id, 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reset_read, GLenum read_target, GLuint read_id) { 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reset_draw) { 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(draw_target, draw_id)) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reset_read) { 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindFramebufferEXT(read_target, read_id)) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(service_id))) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GenHelper<cmds::DeleteFramebuffersImmediate>(client_id); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindRenderbuffer( 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_id_ = service_id; 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_valid_ = true; 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindRenderbufferEXT(target, service_id)) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindRenderbuffer cmd; 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 922116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GLES2DecoderTestBase::DoRenderbufferStorageMultisampleCHROMIUM( 923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLenum target, 924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLsizei samples, 925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLenum internal_format, 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLenum gl_format, 927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLsizei width, 928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GLsizei height) { 929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*gl_, GetError()) 930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .WillOnce(Return(GL_NO_ERROR)) 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .RetiresOnSaturation(); 932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*gl_, 933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RenderbufferStorageMultisampleEXT( 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch target, samples, gl_format, width, height)) 935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .Times(1) 936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .RetiresOnSaturation(); 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*gl_, GetError()) 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .WillOnce(Return(GL_NO_ERROR)) 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .RetiresOnSaturation(); 940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmds::RenderbufferStorageMultisampleCHROMIUM cmd; 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmd.Init(target, samples, internal_format, width, height); 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(GL_NO_ERROR, GetGLError()); 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 946116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GLES2DecoderTestBase::RestoreRenderbufferBindings() { 947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetDecoder()->RestoreRenderbufferBindings(); 948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_valid_ = false; 949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 951116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GLES2DecoderTestBase::EnsureRenderbufferBound(bool expect_bind) { 952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_NE(expect_bind, service_renderbuffer_valid_); 953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (expect_bind) { 955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_renderbuffer_valid_ = true; 956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*gl_, 957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BindRenderbufferEXT(GL_RENDERBUFFER, service_renderbuffer_id_)) 958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .Times(1) 959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .RetiresOnSaturation(); 960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else { 961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0); 962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsRenderbuffer(GLuint client_id) { 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsRenderbuffer, cmds::IsRenderbuffer::Result>( 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client_id); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteRenderbuffer( 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(service_id))) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 975cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GenHelper<cmds::DeleteRenderbuffersImmediate>(client_id); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBindTexture( 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, GLuint service_id) { 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindTexture(target, service_id)) 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BindTexture cmd; 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, client_id); 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderTestBase::DoIsTexture(GLuint client_id) { 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsObjectHelper<cmds::IsTexture, cmds::IsTexture::Result>(client_id); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoDeleteTexture( 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint client_id, GLuint service_id) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(service_id))) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 997cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GenHelper<cmds::DeleteTexturesImmediate>(client_id); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoTexImage2D( 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint level, GLenum internal_format, 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum format, GLenum type, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 shared_memory_id, uint32 shared_memory_offset) { 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_, TexImage2D(target, level, internal_format, 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) width, height, border, format, type, _)) 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::TexImage2D cmd; 1016cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd.Init(target, level, internal_format, width, height, format, 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, shared_memory_id, shared_memory_offset); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void GLES2DecoderTestBase::DoTexImage2DConvertInternalFormat( 10225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, GLint level, GLenum requested_internal_format, 10235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 10245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum format, GLenum type, 10255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 shared_memory_id, uint32 shared_memory_offset, 10265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum expected_internal_format) { 10275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 10305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, TexImage2D(target, level, expected_internal_format, 10315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) width, height, border, format, type, _)) 10325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .Times(1) 10335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 10345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) .RetiresOnSaturation(); 10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmds::TexImage2D cmd; 1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd.Init(target, level, requested_internal_format, width, height, 10395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) format, type, shared_memory_id, shared_memory_offset); 10405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 10425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoCompressedTexImage2D( 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint level, GLenum format, 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLint border, 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei size, uint32 bucket_id) { 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, CompressedTexImage2D( 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, level, format, width, height, border, size, _)) 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommonDecoder::Bucket* bucket = decoder_->CreateBucket(bucket_id); 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bucket->SetSize(size); 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::CompressedTexImage2DBucket cmd; 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init( 1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) target, level, format, width, height, 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bucket_id); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoRenderbufferStorage( 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLenum internal_format, GLenum actual_format, 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei width, GLsizei height, GLenum error) { 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, RenderbufferStorageEXT( 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, actual_format, width, height)) 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::RenderbufferStorage cmd; 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, internal_format, width, height); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoFramebufferTexture2D( 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLenum attachment, GLenum textarget, 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint texture_client_id, GLuint texture_service_id, GLint level, 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error) { 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, FramebufferTexture2DEXT( 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, attachment, textarget, texture_service_id, level)) 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::FramebufferTexture2D cmd; 1099cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd.Init(target, attachment, textarget, texture_client_id); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoFramebufferRenderbuffer( 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum attachment, 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum renderbuffer_target, 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer_client_id, 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint renderbuffer_service_id, 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum error) { 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target, attachment, renderbuffer_target, renderbuffer_service_id)) 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::FramebufferRenderbuffer cmd; 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, attachment, renderbuffer_target, renderbuffer_client_id); 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoVertexAttribPointer( 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset) { 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VertexAttribPointer(index, size, type, GL_FALSE, stride, 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BufferOffset(offset))) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::VertexAttribPointer cmd; 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index, size, GL_FLOAT, GL_FALSE, stride, offset); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoVertexAttribDivisorANGLE( 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint index, GLuint divisor) { 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VertexAttribDivisorANGLE(index, divisor)) 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::VertexAttribDivisorANGLE cmd; 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index, divisor); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForGenVertexArraysOES(){ 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GenVertexArraysOES(1, _)) 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SetArgumentPointee<1>(kServiceVertexArrayId)) 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForDeleteVertexArraysOES(){ 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, _)) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid GLES2DecoderTestBase::AddExpectationsForDeleteBoundVertexArraysOES() { 11650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Expectations are the same as a delete, followed by binding VAO 0. 11660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddExpectationsForDeleteVertexArraysOES(); 11670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddExpectationsForBindVertexArrayOES(); 11680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 11690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForBindVertexArrayOES() { 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (group_->feature_info()->feature_flags().native_vertex_array_object) { 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindVertexArrayOES(_)) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32 vv = 0; vv < group_->max_vertex_attribs(); ++vv) { 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForRestoreAttribState(vv); 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ELEMENT_ARRAY_BUFFER, _)) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForRestoreAttribState(GLuint attrib) { 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(attrib, _, _, _, _, _)) 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(attrib, _)) 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attrib != 0 || 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bajones): Not sure if I can tell which of these will be called 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(attrib)) 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, DisableVertexAttribArray(attrib)) 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GCC requires these declarations, but MSVC requires they not be present 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef COMPILER_MSVC 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kBackBufferWidth; 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kBackBufferHeight; 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxTextureSize; 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxCubeMapTextureSize; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kNumVertexAttribs; 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kNumTextureUnits; 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxTextureImageUnits; 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVertexTextureImageUnits; 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxFragmentUniformVectors; 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVaryingVectors; 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxVertexUniformVectors; 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxViewportWidth; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxViewportHeight; 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportX; 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportY; 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportWidth; 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kViewportHeight; 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceAttrib0BufferId; 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFixedAttribBufferId; 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceBufferId; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFramebufferId; 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceRenderbufferId; 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceTextureId; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceProgramId; 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceShaderId; 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceElementBufferId; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceQueryId; 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceVertexArrayId; 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 GLES2DecoderTestBase::kSharedMemoryId; 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t GLES2DecoderTestBase::kSharedBufferSize; 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kSharedMemoryOffset; 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 GLES2DecoderTestBase::kInvalidSharedMemoryId; 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInvalidSharedMemoryOffset; 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInitialResult; 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint8 GLES2DecoderTestBase::kInitialMemoryValue; 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kNewClientId; 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kNewServiceId; 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint32 GLES2DecoderTestBase::kInvalidClientId; 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceVertexShaderId; 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceFragmentShaderId; 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumShaderId; 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumProgramId; 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumTextureBufferId; 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumVertexBufferId; 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumFBOId; 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumPositionAttrib; 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumTexAttrib; 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kServiceCopyTextureChromiumSamplerLocation; 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLsizei GLES2DecoderTestBase::kNumVertices; 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLsizei GLES2DecoderTestBase::kNumIndices; 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kValidIndexRangeStart; 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kValidIndexRangeCount; 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kInvalidIndexRangeStart; 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kInvalidIndexRangeCount; 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int GLES2DecoderTestBase::kOutOfRangeIndexRangeEnd; 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLuint GLES2DecoderTestBase::kMaxValidIndex; 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxAttribLength; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib1Size; 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib2Size; 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib3Size; 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib1Location; 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib2Location; 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kAttrib3Location; 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib1Type; 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib2Type; 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kAttrib3Type; 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kInvalidAttribLocation; 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kBadAttribIndex; 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kMaxUniformLength; 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1Size; 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2Size; 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3Size; 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1RealLocation; 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2RealLocation; 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2ElementRealLocation; 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3RealLocation; 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1FakeLocation; 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2FakeLocation; 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2ElementFakeLocation; 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3FakeLocation; 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform1DesiredLocation; 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform2DesiredLocation; 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kUniform3DesiredLocation; 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform1Type; 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform2Type; 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniform3Type; 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLenum GLES2DecoderTestBase::kUniformCubemapType; 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kInvalidUniformLocation; 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GLint GLES2DecoderTestBase::kBadUniformIndex; 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib1Name = "attrib1"; 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib2Name = "attrib2"; 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kAttrib3Name = "attrib3"; 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform1Name = "uniform1"; 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform2Name = "uniform2[0]"; 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GLES2DecoderTestBase::kUniform3Name = "uniform3[0]"; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupDefaultProgram() { 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static UniformInfo uniforms[] = { 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform1Name, kUniform1Size, kUniform1Type, 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1FakeLocation, kUniform1RealLocation, 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1DesiredLocation }, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform2Name, kUniform2Size, kUniform2Type, 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2FakeLocation, kUniform2RealLocation, 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2DesiredLocation }, 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform3Name, kUniform3Size, kUniform3Type, 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3FakeLocation, kUniform3RealLocation, 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3DesiredLocation }, 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_, kServiceVertexShaderId, 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_, kServiceFragmentShaderId); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 13582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupCubemapProgram() { 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AttribInfo attribs[] = { 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static UniformInfo uniforms[] = { 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform1Name, kUniform1Size, kUniformCubemapType, 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1FakeLocation, kUniform1RealLocation, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform1DesiredLocation, }, 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform2Name, kUniform2Size, kUniform2Type, 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2FakeLocation, kUniform2RealLocation, 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform2DesiredLocation, }, 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { kUniform3Name, kUniform3Size, kUniform3Type, 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3FakeLocation, kUniform3RealLocation, 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kUniform3DesiredLocation, }, 1381558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch }; 1382558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 1383558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_program_id_, kServiceProgramId, 1384558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_vertex_shader_id_, kServiceVertexShaderId, 1385558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch client_fragment_shader_id_, kServiceFragmentShaderId); 1386558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1387558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1388558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { 1389558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 1390558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch .Times(1) 1391558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch .RetiresOnSaturation(); 1392558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch cmds::UseProgram cmd; 1393558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch cmd.Init(client_program_id_); 1394558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1395558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1396558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 1397558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1398558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid GLES2DecoderTestBase::SetupSamplerExternalProgram() { 1399558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { 1400558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static AttribInfo attribs[] = { 1401558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 1402558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 1403558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 1404558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch }; 1405558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static UniformInfo uniforms[] = { 1406558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform1Name, kUniform1Size, kUniformSamplerExternalType, 1407558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform1FakeLocation, kUniform1RealLocation, 1408558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform1DesiredLocation, }, 1409558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform2Name, kUniform2Size, kUniform2Type, 1410558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform2FakeLocation, kUniform2RealLocation, 1411558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform2DesiredLocation, }, 1412558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch { kUniform3Name, kUniform3Size, kUniform3Type, 1413558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform3FakeLocation, kUniform3RealLocation, 1414558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch kUniform3DesiredLocation, }, 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms), 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_program_id_, kServiceProgramId, 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_vertex_shader_id_, kServiceVertexShaderId, 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_fragment_shader_id_, kServiceFragmentShaderId); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, UseProgram(kServiceProgramId)) 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::UseProgram cmd; 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(client_program_id_); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::TearDown() { 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::TearDown(); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupShader( 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::AttribInfo* attribs, size_t num_attribs, 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::UniformInfo* uniforms, size_t num_uniforms, 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint program_client_id, GLuint program_service_id, 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint vertex_shader_client_id, GLuint vertex_shader_service_id, 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLuint fragment_shader_client_id, GLuint fragment_shader_service_id) { 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence s; 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AttachShader(program_service_id, vertex_shader_service_id)) 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AttachShader(program_service_id, fragment_shader_service_id)) 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestHelper::SetupShader( 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gl_.get(), attribs, num_attribs, uniforms, num_uniforms, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) program_service_id); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader( 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_VERTEX_SHADER, vertex_shader_client_id, vertex_shader_service_id); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoCreateShader( 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_FRAGMENT_SHADER, fragment_shader_client_id, 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fragment_shader_service_id); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestHelper::SetShaderStates( 14651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gl_.get(), GetShader(vertex_shader_client_id), true); 14661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestHelper::SetShaderStates( 14671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gl_.get(), GetShader(fragment_shader_client_id), true); 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::AttachShader attach_cmd; 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attach_cmd.Init(program_client_id, vertex_shader_client_id); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attach_cmd.Init(program_client_id, fragment_shader_client_id); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd)); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::LinkProgram link_cmd; 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link_cmd.Init(program_client_id); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd)); 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GLES2DecoderTestBase::DoEnableDisable(GLenum cap, bool enable) { 1483010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SetupExpectationsForEnableDisable(cap, enable); 1484010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (enable) { 1485010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmds::Enable cmd; 1486010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmd.Init(cap); 1487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 1489010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmds::Disable cmd; 1490010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cmd.Init(cap); 1491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1492010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 1494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoEnableVertexAttribArray(GLint index) { 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, EnableVertexAttribArray(index)) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::EnableVertexAttribArray cmd; 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(index); 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBufferData(GLenum target, GLsizei size) { 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW)) 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BufferData cmd; 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, size, 0, 0, GL_STREAM_DRAW); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DoBufferSubData( 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLint offset, GLsizei size, const void* data) { 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferSubData(target, offset, size, 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shared_memory_address_)) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(shared_memory_address_, data, size); 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmds::BufferSubData cmd; 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd.Init(target, offset, size, shared_memory_id_, shared_memory_offset_); 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupVertexBuffer() { 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(1); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLfloat f = 0; 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ARRAY_BUFFER, kNumVertices * 2 * sizeof(f)); 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupAllNeededVertexBuffers() { 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ARRAY_BUFFER, kNumVertices * 16 * sizeof(float)); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(0); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(1); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoEnableVertexAttribArray(2); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupIndexBuffer() { 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_element_buffer_id_, 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kServiceElementBufferId); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const GLshort indices[] = {100, 1, 2, 3, 4, 5, 6, 7, 100, 9}; 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(indices) == kNumIndices, Indices_is_not_10); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices)); 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, 2, indices); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 2, sizeof(indices) - 2, &indices[1]); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::SetupTexture() { 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kSharedMemoryId, kSharedMemoryOffset); 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DeleteVertexBuffer() { 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDeleteBuffer(client_buffer_id_, kServiceBufferId); 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::DeleteIndexBuffer() { 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoDeleteBuffer(client_element_buffer_id_, kServiceElementBufferId); 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0WithError( 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_vertices, GLuint buffer_id, GLenum error) { 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, GetError()) 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(GL_NO_ERROR)) 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error)) 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId)) 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_vertices * sizeof(GLfloat) * 4, 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _, GL_DYNAMIC_DRAW)) 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error == GL_NO_ERROR) { 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BufferSubData( 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GL_ARRAY_BUFFER, 0, num_vertices * sizeof(GLfloat) * 4, _)) 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL)) 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id)) 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(1) 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .RetiresOnSaturation(); 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0( 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLsizei num_vertices, GLuint buffer_id) { 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExpectationsForSimulatedAttrib0WithError( 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_vertices, buffer_id, GL_NO_ERROR); 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1612cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GLES2DecoderTestBase::SetupMockGLBehaviors() { 1613cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ON_CALL(*gl_, BindVertexArrayOES(_)) 1614cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillByDefault(Invoke( 1615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &gl_states_, 1616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &GLES2DecoderTestBase::MockGLStates::OnBindVertexArrayOES)); 1617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ON_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _)) 1618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillByDefault(WithArg<1>(Invoke( 1619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &gl_states_, 1620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &GLES2DecoderTestBase::MockGLStates::OnBindArrayBuffer))); 1621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ON_CALL(*gl_, VertexAttribPointer(_, _, _, _, _, NULL)) 1622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) .WillByDefault(InvokeWithoutArgs( 1623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &gl_states_, 1624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &GLES2DecoderTestBase::MockGLStates::OnVertexAttribNullPointer)); 1625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1626cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine:: 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCommandBufferEngine() { 1629effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1630effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); 1631effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shm->CreateAndMapAnonymous(kSharedBufferSize); 1632e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch valid_buffer_ = MakeBufferFromSharedMemory(shm.Pass(), kSharedBufferSize); 1633effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ClearSharedMemory(); 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine:: 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)~MockCommandBufferEngine() {} 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1640effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_refptr<gpu::Buffer> 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::GetSharedMemoryBuffer( 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 shm_id) { 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_; 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::set_token( 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 token) { 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::SetGetBuffer( 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 /* transfer_buffer_id */) { 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::SetGetOffset( 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 offset) { 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32 GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::GetGetOffset() { 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(false); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GLES2DecoderWithShaderTestBase::SetUp() { 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2DecoderTestBase::SetUp(); 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupDefaultProgram(); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Include the auto-generated part of this file. We split this because it means 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we can easily edit the non-auto generated parts right here in this file 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instead of having to edit some template or the code generator. 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 1680