gles2_cmd_decoder_unittest_base.h revision f2477e01787aa58f445919b809d89e252beef54f
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_BASE_H_ 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_BASE_H_ 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h" 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h" 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/buffer_manager.h" 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/cmd_buffer_engine.h" 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/context_group.h" 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/framebuffer_manager.h" 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h" 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/program_manager.h" 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/query_manager.h" 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/renderbuffer_manager.h" 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/shader_manager.h" 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/stream_texture_manager_mock.h" 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/test_helper.h" 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/texture_manager.h" 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "gpu/command_buffer/service/vertex_array_manager.h" 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/gl/gl_context_stub.h" 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/gl/gl_surface_stub.h" 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/gl/gl_mock.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CommandLine; 297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace gpu { 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace gles2 { 327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MemoryTracker; 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdochclass GLES2DecoderTestBase : public testing::Test { 367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch public: 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) GLES2DecoderTestBase(); 387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual ~GLES2DecoderTestBase(); 397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Template to call glGenXXX functions. 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template <typename T> 427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void GenHelper(GLuint client_id) { 437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch int8 buffer[sizeof(T) + sizeof(client_id)]; 447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch T& cmd = *reinterpret_cast<T*>(&buffer); 457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch cmd.Init(1, &client_id); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(error::kNoError, 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ExecuteImmediateCmd(cmd, sizeof(client_id))); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This template exists solely so we can specialize it for 517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // certain commands. 527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename T, int id> 537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SpecializedSetup(bool valid) { 547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename T> 577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch T* GetImmediateAs() { 587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return reinterpret_cast<T*>(immediate_buffer_); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template <typename T, typename Command> 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) T GetImmediateDataAs(Command* cmd) { 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return reinterpret_cast<T>(ImmediateDataAddress(cmd)); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void ClearSharedMemory() { 677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch engine_->ClearSharedMemory(); 687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void SetUp() OVERRIDE; 717757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void TearDown() OVERRIDE; 727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename T> 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) error::Error ExecuteCmd(const T& cmd) { 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return decoder_->DoCommand(cmd.kCmdId, 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ComputeNumEntries(sizeof(cmd)) - 1, 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) &cmd); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 817757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename T> 827757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch error::Error ExecuteImmediateCmd(const T& cmd, size_t data_size) { 837757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 847757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return decoder_->DoCommand(cmd.kCmdId, 857757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch ComputeNumEntries(sizeof(cmd) + data_size) - 1, 867757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch &cmd); 877757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 887757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 89e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch template <typename T> 907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch T GetSharedMemoryAs() { 917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return reinterpret_cast<T>(shared_memory_address_); 927757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename T> 957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch T GetSharedMemoryAsWithOffset(uint32 offset) { 967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void* ptr = reinterpret_cast<int8*>(shared_memory_address_) + offset; 977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return reinterpret_cast<T>(ptr); 987757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 997757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1007757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch IdAllocatorInterface* GetIdAllocator(GLuint namespace_id) { 1017757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->GetIdAllocator(namespace_id); 1027757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Buffer* GetBuffer(GLuint service_id) { 1057757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->buffer_manager()->GetBuffer(service_id); 1067757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1077757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1087757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Framebuffer* GetFramebuffer(GLuint service_id) { 1097757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->framebuffer_manager()->GetFramebuffer(service_id); 1107757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1117757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1127757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Renderbuffer* GetRenderbuffer( 1137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint service_id) { 1147757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->renderbuffer_manager()->GetRenderbuffer(service_id); 1157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1177757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch TextureRef* GetTexture(GLuint client_id) { 1187757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->texture_manager()->GetTexture(client_id); 1197757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1207757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Shader* GetShader(GLuint client_id) { 1227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->shader_manager()->GetShader(client_id); 1237757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1247757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Program* GetProgram(GLuint client_id) { 1267757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->program_manager()->GetProgram(client_id); 1277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch QueryManager::Query* GetQueryInfo(GLuint client_id) { 1307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return decoder_->GetQueryManager()->GetQuery(client_id); 1317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // This name doesn't match the underlying function, but doing it this way 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // prevents the need to special-case the unit test generation 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VertexAttribManager* GetVertexArrayInfo(GLuint client_id) { 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return decoder_->GetVertexArrayManager()->GetVertexAttribManager(client_id); 1377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch ProgramManager* program_manager() { 1407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return group_->program_manager(); 1417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch ::testing::StrictMock<MockStreamTextureManager>* 1447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch stream_texture_manager() const { 1457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return stream_texture_manager_.get(); 1467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoCreateProgram(GLuint client_id, GLuint service_id); 1497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoCreateShader(GLenum shader_type, GLuint client_id, GLuint service_id); 1507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetBucketAsCString(uint32 bucket_id, const char* str); 1527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void set_memory_tracker(MemoryTracker* memory_tracker) { 1547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch memory_tracker_ = memory_tracker; 1557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void InitDecoder( 1587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const char* extensions, 1597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_alpha, 1607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_depth, 1617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_stencil, 1627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_alpha, 1637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_depth, 1647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_stencil, 1657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool bind_generates_resource); 1667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void InitDecoderWithCommandLine( 1687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const char* extensions, 1697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_alpha, 1707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_depth, 1717757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool has_stencil, 1727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_alpha, 1737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_depth, 1747757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool request_stencil, 1757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool bind_generates_resource, 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const CommandLine* command_line); 1777757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ContextGroup& group() const { 1799bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) return *group_.get(); 1809bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 1819bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1829bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) ::testing::StrictMock< ::gfx::MockGLInterface>* GetGLMock() const { 1839bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) return gl_.get(); 1849bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 1859bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 186f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) GLES2Decoder* GetDecoder() const { 1877757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return decoder_.get(); 1887757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch typedef TestHelper::AttribInfo AttribInfo; 1917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch typedef TestHelper::UniformInfo UniformInfo; 1927757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupShader( 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttribInfo* attribs, size_t num_attribs, 1957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch UniformInfo* uniforms, size_t num_uniforms, 1967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint client_id, GLuint service_id, 1977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint vertex_shader_client_id, GLuint vertex_shader_service_id, 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) GLuint fragment_shader_client_id, GLuint fragment_shader_service_id); 1997757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2007757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForClearingUniforms( 2017757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch UniformInfo* uniforms, size_t num_uniforms) { 2027757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch TestHelper::SetupExpectationsForClearingUniforms( 2037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch gl_.get(), uniforms, num_uniforms); 2047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 2057757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2067757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupInitCapabilitiesExpectations(); 2077757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupInitStateExpectations(); 2087757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void ExpectEnableDisable(GLenum cap, bool enable); 2097757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2107757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Setups up a shader for testing glUniform. 2117757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupShaderForUniform(GLenum uniform_type); 2127757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupDefaultProgram(); 2137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupCubemapProgram(); 2147757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupSamplerExternalProgram(); 2157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupTexture(); 2167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2177757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Note that the error is returned as GLint instead of GLenum. 2187757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // This is because there is a mismatch in the types of GLenum and 2197757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // the error values GL_NO_ERROR, GL_INVALID_ENUM, etc. GLenum is 2207757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // typedef'd as unsigned int while the error values are defined as 2217757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // integers. This is problematic for template functions such as 2227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // EXPECT_EQ that expect both types to be the same. 2237757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLint GetGLError(); 2247757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2257757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBindBuffer(GLenum target, GLuint client_id, GLuint service_id); 2267757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBindFramebuffer(GLenum target, GLuint client_id, GLuint service_id); 2277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBindRenderbuffer(GLenum target, GLuint client_id, GLuint service_id); 2287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBindTexture(GLenum target, GLuint client_id, GLuint service_id); 2297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBindVertexArrayOES(GLuint client_id, GLuint service_id); 2307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsBuffer(GLuint client_id); 2327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsFramebuffer(GLuint client_id); 2337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsProgram(GLuint client_id); 2347757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsRenderbuffer(GLuint client_id); 2357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsShader(GLuint client_id); 2367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool DoIsTexture(GLuint client_id); 2377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteBuffer(GLuint client_id, GLuint service_id); 2397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteFramebuffer( 2407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint client_id, GLuint service_id, 2417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool reset_draw, GLenum draw_target, GLuint draw_id, 2427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool reset_read, GLenum read_target, GLuint read_id); 2437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteProgram(GLuint client_id, GLuint service_id); 2447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteRenderbuffer(GLuint client_id, GLuint service_id); 2457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteShader(GLuint client_id, GLuint service_id); 2467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoDeleteTexture(GLuint client_id, GLuint service_id); 2477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoCompressedTexImage2D( 2497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, GLint level, GLenum format, 2507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei width, GLsizei height, GLint border, 2517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei size, uint32 bucket_id); 2527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoTexImage2D( 2537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, GLint level, GLenum internal_format, 2547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei width, GLsizei height, GLint border, 2557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum format, GLenum type, 2567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch uint32 shared_memory_id, uint32 shared_memory_offset); 2577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoRenderbufferStorage( 2587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, GLenum internal_format, GLenum actual_format, 2597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei width, GLsizei height, GLenum error); 2607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoFramebufferRenderbuffer( 2617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, 2627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum attachment, 2637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum renderbuffer_target, 2647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint renderbuffer_client_id, 2657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint renderbuffer_service_id, 2667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum error); 2677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoFramebufferTexture2D( 2687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, GLenum attachment, GLenum tex_target, 2697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint texture_client_id, GLuint texture_service_id, 2707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLint level, GLenum error); 2717757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoVertexAttribPointer( 2727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset); 2737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoVertexAttribDivisorANGLE(GLuint index, GLuint divisor); 2747757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoEnableVertexAttribArray(GLint index); 2767757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2777757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBufferData(GLenum target, GLsizei size); 2787757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2797757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DoBufferSubData( 2807757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, GLint offset, GLsizei size, const void* data); 2817757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2827757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupVertexBuffer(); 2837757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupAllNeededVertexBuffers(); 2847757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2857757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupIndexBuffer(); 2867757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2877757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DeleteVertexBuffer(); 2887757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2897757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void DeleteIndexBuffer(); 2907757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2917757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupClearTextureExpections( 2927757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint service_id, 2937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint old_service_id, 2947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum bind_target, 2957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, 2967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLint level, 2977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum format, 2987757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum type, 2997757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei width, 3007757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei height); 3017757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3027757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForRestoreClearState( 3037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_red, 3047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_green, 3057757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_blue, 3067757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_alpha, 3077757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint restore_stencil, 3087757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_depth, 3097757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool restore_scissor_test); 3107757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3117757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForFramebufferClearing( 3127757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, 3137757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint clear_bits, 3147757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_red, 3157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_green, 3167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_blue, 3177757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_alpha, 3187757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint restore_stencil, 3197757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_depth, 3207757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool restore_scissor_test); 3217757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3227757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForFramebufferClearingMulti( 3237757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint read_framebuffer_service_id, 3247757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint draw_framebuffer_service_id, 3257757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLenum target, 3267757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint clear_bits, 3277757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_red, 3287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_green, 3297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_blue, 3307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_alpha, 3317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint restore_stencil, 3327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLclampf restore_depth, 3337757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool restore_scissor_test); 3347757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForApplyingDirtyState( 3367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool framebuffer_is_rgb, 3377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool framebuffer_has_depth, 3387757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool framebuffer_has_stencil, 3397757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint color_bits, // NOTE! bits are 0x1000, 0x0100, 0x0010, and 0x0001 3407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool depth_mask, 3417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool depth_enabled, 3427757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint front_stencil_mask, 3437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLuint back_stencil_mask, 3447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool stencil_enabled, 3457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool cull_face_enabled, 3467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool scissor_test_enabled, 3477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool blend_enabled); 3487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void SetupExpectationsForApplyingDefaultDirtyState(); 3507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3517757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForSimulatedAttrib0WithError( 3527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei num_vertices, GLuint buffer_id, GLenum error); 3537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForSimulatedAttrib0( 3557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLsizei num_vertices, GLuint buffer_id); 3567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForGenVertexArraysOES(); 3587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForDeleteVertexArraysOES(); 3597757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForBindVertexArrayOES(); 3607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void AddExpectationsForRestoreAttribState(GLuint attrib); 3617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch GLvoid* BufferOffset(unsigned i) { 3637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return static_cast<int8 *>(NULL)+(i); 3647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 3657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch template <typename Command, typename Result> 3677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool IsObjectHelper(GLuint client_id) { 3687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Result* result = static_cast<Result*>(shared_memory_address_); 3697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch Command cmd; 3707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch cmd.Init(client_id, kSharedMemoryId, kSharedMemoryOffset); 3717757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool isObject = static_cast<bool>(*result); 3737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3747757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return isObject; 3757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 3767757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: 3787757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch static const int kBackBufferWidth = 128; 379 static const int kBackBufferHeight = 64; 380 381 static const GLint kMaxTextureSize = 2048; 382 static const GLint kMaxCubeMapTextureSize = 256; 383 static const GLint kNumVertexAttribs = 16; 384 static const GLint kNumTextureUnits = 8; 385 static const GLint kMaxTextureImageUnits = 8; 386 static const GLint kMaxVertexTextureImageUnits = 2; 387 static const GLint kMaxFragmentUniformVectors = 16; 388 static const GLint kMaxVaryingVectors = 8; 389 static const GLint kMaxVertexUniformVectors = 128; 390 static const GLint kMaxViewportWidth = 8192; 391 static const GLint kMaxViewportHeight = 8192; 392 393 static const GLint kViewportX = 0; 394 static const GLint kViewportY = 0; 395 static const GLint kViewportWidth = kBackBufferWidth; 396 static const GLint kViewportHeight = kBackBufferHeight; 397 398 static const GLuint kServiceAttrib0BufferId = 801; 399 static const GLuint kServiceFixedAttribBufferId = 802; 400 401 static const GLuint kServiceBufferId = 301; 402 static const GLuint kServiceFramebufferId = 302; 403 static const GLuint kServiceRenderbufferId = 303; 404 static const GLuint kServiceTextureId = 304; 405 static const GLuint kServiceProgramId = 305; 406 static const GLuint kServiceShaderId = 306; 407 static const GLuint kServiceElementBufferId = 308; 408 static const GLuint kServiceQueryId = 309; 409 static const GLuint kServiceVertexArrayId = 310; 410 411 static const int32 kSharedMemoryId = 401; 412 static const size_t kSharedBufferSize = 2048; 413 static const uint32 kSharedMemoryOffset = 132; 414 static const int32 kInvalidSharedMemoryId = 402; 415 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1; 416 static const uint32 kInitialResult = 0xBDBDBDBDu; 417 static const uint8 kInitialMemoryValue = 0xBDu; 418 419 static const uint32 kNewClientId = 501; 420 static const uint32 kNewServiceId = 502; 421 static const uint32 kInvalidClientId = 601; 422 423 static const GLuint kServiceVertexShaderId = 321; 424 static const GLuint kServiceFragmentShaderId = 322; 425 426 static const GLuint kServiceCopyTextureChromiumShaderId = 701; 427 static const GLuint kServiceCopyTextureChromiumProgramId = 721; 428 429 static const GLuint kServiceCopyTextureChromiumTextureBufferId = 751; 430 static const GLuint kServiceCopyTextureChromiumVertexBufferId = 752; 431 static const GLuint kServiceCopyTextureChromiumFBOId = 753; 432 static const GLuint kServiceCopyTextureChromiumPositionAttrib = 761; 433 static const GLuint kServiceCopyTextureChromiumTexAttrib = 762; 434 static const GLuint kServiceCopyTextureChromiumSamplerLocation = 763; 435 436 static const GLsizei kNumVertices = 100; 437 static const GLsizei kNumIndices = 10; 438 static const int kValidIndexRangeStart = 1; 439 static const int kValidIndexRangeCount = 7; 440 static const int kInvalidIndexRangeStart = 0; 441 static const int kInvalidIndexRangeCount = 7; 442 static const int kOutOfRangeIndexRangeEnd = 10; 443 static const GLuint kMaxValidIndex = 7; 444 445 static const GLint kMaxAttribLength = 10; 446 static const char* kAttrib1Name; 447 static const char* kAttrib2Name; 448 static const char* kAttrib3Name; 449 static const GLint kAttrib1Size = 1; 450 static const GLint kAttrib2Size = 1; 451 static const GLint kAttrib3Size = 1; 452 static const GLint kAttrib1Location = 0; 453 static const GLint kAttrib2Location = 1; 454 static const GLint kAttrib3Location = 2; 455 static const GLenum kAttrib1Type = GL_FLOAT_VEC4; 456 static const GLenum kAttrib2Type = GL_FLOAT_VEC2; 457 static const GLenum kAttrib3Type = GL_FLOAT_VEC3; 458 static const GLint kInvalidAttribLocation = 30; 459 static const GLint kBadAttribIndex = kNumVertexAttribs; 460 461 static const GLint kMaxUniformLength = 12; 462 static const char* kUniform1Name; 463 static const char* kUniform2Name; 464 static const char* kUniform3Name; 465 static const GLint kUniform1Size = 1; 466 static const GLint kUniform2Size = 3; 467 static const GLint kUniform3Size = 2; 468 static const GLint kUniform1RealLocation = 3; 469 static const GLint kUniform2RealLocation = 10; 470 static const GLint kUniform2ElementRealLocation = 12; 471 static const GLint kUniform3RealLocation = 20; 472 static const GLint kUniform1FakeLocation = 0; // These are 473 static const GLint kUniform2FakeLocation = 1; // hardcoded 474 static const GLint kUniform2ElementFakeLocation = 0x10001; // to match 475 static const GLint kUniform3FakeLocation = 2; // ProgramManager. 476 static const GLint kUniform1DesiredLocation = -1; 477 static const GLint kUniform2DesiredLocation = -1; 478 static const GLint kUniform3DesiredLocation = -1; 479 static const GLenum kUniform1Type = GL_SAMPLER_2D; 480 static const GLenum kUniform2Type = GL_INT_VEC2; 481 static const GLenum kUniform3Type = GL_FLOAT_VEC3; 482 static const GLenum kUniformSamplerExternalType = GL_SAMPLER_EXTERNAL_OES; 483 static const GLenum kUniformCubemapType = GL_SAMPLER_CUBE; 484 static const GLint kInvalidUniformLocation = 30; 485 static const GLint kBadUniformIndex = 1000; 486 487 // Use StrictMock to make 100% sure we know how GL will be called. 488 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 489 scoped_refptr<gfx::GLSurfaceStub> surface_; 490 scoped_refptr<gfx::GLContextStub> context_; 491 scoped_ptr<GLES2Decoder> mock_decoder_; 492 scoped_ptr<GLES2Decoder> decoder_; 493 MemoryTracker* memory_tracker_; 494 495 GLuint client_buffer_id_; 496 GLuint client_framebuffer_id_; 497 GLuint client_program_id_; 498 GLuint client_renderbuffer_id_; 499 GLuint client_shader_id_; 500 GLuint client_texture_id_; 501 GLuint client_element_buffer_id_; 502 GLuint client_vertex_shader_id_; 503 GLuint client_fragment_shader_id_; 504 GLuint client_query_id_; 505 GLuint client_vertexarray_id_; 506 507 uint32 shared_memory_id_; 508 uint32 shared_memory_offset_; 509 void* shared_memory_address_; 510 void* shared_memory_base_; 511 512 int8 immediate_buffer_[256]; 513 514 private: 515 class MockCommandBufferEngine : public CommandBufferEngine { 516 public: 517 MockCommandBufferEngine(); 518 519 virtual ~MockCommandBufferEngine(); 520 521 virtual gpu::Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE; 522 523 void ClearSharedMemory() { 524 memset(data_.get(), kInitialMemoryValue, kSharedBufferSize); 525 } 526 527 virtual void set_token(int32 token) OVERRIDE; 528 529 virtual bool SetGetBuffer(int32 /* transfer_buffer_id */) OVERRIDE; 530 531 // Overridden from CommandBufferEngine. 532 virtual bool SetGetOffset(int32 offset) OVERRIDE; 533 534 // Overridden from CommandBufferEngine. 535 virtual int32 GetGetOffset() OVERRIDE; 536 537 private: 538 scoped_ptr<int8[]> data_; 539 gpu::Buffer valid_buffer_; 540 gpu::Buffer invalid_buffer_; 541 }; 542 543 void AddExpectationsForVertexAttribManager(); 544 545 scoped_ptr< ::testing::StrictMock<MockCommandBufferEngine> > engine_; 546 scoped_ptr< ::testing::StrictMock<MockStreamTextureManager> > 547 stream_texture_manager_; 548 scoped_refptr<ContextGroup> group_; 549}; 550 551class GLES2DecoderWithShaderTestBase : public GLES2DecoderTestBase { 552 public: 553 GLES2DecoderWithShaderTestBase() 554 : GLES2DecoderTestBase() { 555 } 556 557 protected: 558 virtual void SetUp() OVERRIDE; 559 virtual void TearDown() OVERRIDE; 560 561}; 562 563} // namespace gles2 564} // namespace gpu 565 566#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_BASE_H_ 567