13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "cc/test/test_web_graphics_context_3d.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <algorithm> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/lazy_instance.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "cc/test/test_context_support.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "gpu/GLES2/gl2extchromium.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2ext.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const GLuint kFramebufferId = 1; 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const GLuint kRenderbufferId = 2; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static unsigned s_context_id = 1; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const GLuint TestWebGraphicsContext3D::kExternalTextureId = 1337; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic base::LazyInstance<base::Lock>::Leaky 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_shared_namespace_lock = LAZY_INSTANCE_INITIALIZER; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace* 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestWebGraphicsContext3D::shared_namespace_ = NULL; 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace::Namespace() 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : next_buffer_id(1), 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch next_image_id(1), 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch next_texture_id(1) { 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace::~Namespace() { 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_shared_namespace_lock.Get().AssertAcquired(); 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (shared_namespace_ == this) 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch shared_namespace_ = NULL; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// static 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)scoped_ptr<TestWebGraphicsContext3D> TestWebGraphicsContext3D::Create() { 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return make_scoped_ptr(new TestWebGraphicsContext3D()); 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestWebGraphicsContext3D::TestWebGraphicsContext3D() 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : context_id_(s_context_id++), 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_bind_texture_succeeds_(-1), 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_end_query_succeeds_(-1), 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_(false), 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_image_chromium_succeeds_(-1), 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_buffer_chromium_succeeds_(-1), 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) current_used_transfer_buffer_usage_bytes_(0), 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) max_used_transfer_buffer_usage_bytes_(0), 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) next_program_id_(1000), 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) next_shader_id_(2000), 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) max_texture_size_(2048), 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reshape_called_(false), 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width_(0), 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) height_(0), 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scale_factor_(-1.f), 678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) test_support_(NULL), 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) last_update_type_(NoUpdate), 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) next_insert_sync_point_(1), 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) last_waited_sync_point_(0), 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bound_buffer_(0), 72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_ptr_factory_(this) { 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CreateNamespace(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TestWebGraphicsContext3D::~TestWebGraphicsContext3D() { 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::AutoLock lock(g_shared_namespace_lock.Get()); 788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) namespace_ = NULL; 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid TestWebGraphicsContext3D::CreateNamespace() { 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::AutoLock lock(g_shared_namespace_lock.Get()); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (shared_namespace_) { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) namespace_ = shared_namespace_; 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_ = new Namespace; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) shared_namespace_ = namespace_.get(); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void TestWebGraphicsContext3D::reshapeWithScaleFactor( 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int width, int height, float scale_factor) { 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reshape_called_ = true; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width_ = width; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) height_ = height; 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scale_factor_ = scale_factor; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestWebGraphicsContext3D::isContextLost() { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return context_lost_; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLenum TestWebGraphicsContext3D::checkFramebufferStatus( 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (context_lost_) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GL_FRAMEBUFFER_UNDEFINED_OES; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GL_FRAMEBUFFER_COMPLETE; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLint TestWebGraphicsContext3D::getUniformLocation( 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint program, 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GLchar* name) { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLsizeiptr TestWebGraphicsContext3D::getVertexAttribOffset( 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint index, 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname) { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isBuffer( 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint buffer) { 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isEnabled( 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum cap) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isFramebuffer( 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint framebuffer) { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isProgram( 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint program) { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isRenderbuffer( 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint renderbuffer) { 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isShader( 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint shader) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::isTexture( 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint texture) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::genBuffers(GLsizei count, GLuint* ids) { 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ids[i] = NextBufferId(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void TestWebGraphicsContext3D::genFramebuffers( 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei count, GLuint* ids) { 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ids[i] = kFramebufferId | context_id_ << 16; 1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void TestWebGraphicsContext3D::genRenderbuffers( 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei count, GLuint* ids) { 1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ids[i] = kRenderbufferId | context_id_ << 16; 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::genTextures(GLsizei count, GLuint* ids) { 1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) { 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ids[i] = NextTextureId(); 1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK_NE(ids[i], kExternalTextureId); 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) namespace_->textures.Append(ids[i], new TestTexture()); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteBuffers(GLsizei count, GLuint* ids) { 1850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (int i = 0; i < count; ++i) 1860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RetireBufferId(ids[i]); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void TestWebGraphicsContext3D::deleteFramebuffers( 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei count, GLuint* ids) { 1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK_EQ(kFramebufferId | context_id_ << 16, ids[i]); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void TestWebGraphicsContext3D::deleteRenderbuffers( 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizei count, GLuint* ids) { 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) 1981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK_EQ(kRenderbufferId | context_id_ << 16, ids[i]); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteTextures(GLsizei count, GLuint* ids) { 2020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (int i = 0; i < count; ++i) 2030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RetireTextureId(ids[i]); 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::AutoLock lock(namespace_->lock); 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < count; ++i) { 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) namespace_->textures.Remove(ids[i]); 2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) texture_targets_.UnbindTexture(ids[i]); 2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createBuffer() { 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id; 2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) genBuffers(1, &id); 2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return id; 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createFramebuffer() { 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id; 2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) genFramebuffers(1, &id); 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return id; 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createRenderbuffer() { 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id; 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) genRenderbuffers(1, &id); 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return id; 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createTexture() { 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id; 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) genTextures(1, &id); 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return id; 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteBuffer(GLuint id) { 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) deleteBuffers(1, &id); 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteFramebuffer(GLuint id) { 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) deleteFramebuffers(1, &id); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteRenderbuffer(GLuint id) { 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) deleteRenderbuffers(1, &id); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteTexture(GLuint id) { 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) deleteTextures(1, &id); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned TestWebGraphicsContext3D::createProgram() { 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned program = next_program_id_++ | context_id_ << 16; 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) program_set_.insert(program); 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return program; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createShader(GLenum) { 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) unsigned shader = next_shader_id_++ | context_id_ << 16; 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shader_set_.insert(shader); 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return shader; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createExternalTexture() { 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::AutoLock lock(namespace_->lock); 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) namespace_->textures.Append(kExternalTextureId, new TestTexture()); 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kExternalTextureId; 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteProgram(GLuint id) { 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!program_set_.count(id)) 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ADD_FAILURE() << "deleteProgram called on unknown program " << id; 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) program_set_.erase(id); 2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::deleteShader(GLuint id) { 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!shader_set_.count(id)) 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ADD_FAILURE() << "deleteShader called on unknown shader " << id; 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shader_set_.erase(id); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::attachShader(GLuint program, GLuint shader) { 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!program_set_.count(program)) 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ADD_FAILURE() << "attachShader called with unknown program " << program; 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!shader_set_.count(shader)) 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ADD_FAILURE() << "attachShader called with unknown shader " << shader; 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::useProgram(GLuint program) { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!program) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!program_set_.count(program)) 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ADD_FAILURE() << "useProgram called on unknown program " << program; 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindFramebuffer( 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, GLuint framebuffer) { 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!framebuffer) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK_EQ(kFramebufferId | context_id_ << 16, framebuffer); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindRenderbuffer( 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, GLuint renderbuffer) { 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!renderbuffer) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK_EQ(kRenderbufferId | context_id_ << 16, renderbuffer); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindTexture( 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, GLuint texture_id) { 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (times_bind_texture_succeeds_ >= 0) { 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!times_bind_texture_succeeds_) { 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INNOCENT_CONTEXT_RESET_ARB); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --times_bind_texture_succeeds_; 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!texture_id) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(namespace_->textures.ContainsId(texture_id)); 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) texture_targets_.BindTexture(target, texture_id); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) used_textures_.insert(texture_id); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::BoundTextureId( 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target) { 3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return texture_targets_.BoundTexture(target); 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_refptr<TestTexture> TestWebGraphicsContext3D::BoundTexture( 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target) { 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The caller is expected to lock the namespace for texture access. 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) namespace_->lock.AssertAcquired(); 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return namespace_->textures.TextureForId(BoundTextureId(target)); 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::CheckTextureIsBound(GLenum target) { 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(BoundTextureId(target)); 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::createQueryEXT() { return 1u; } 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::endQueryEXT(GLenum target) { 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (times_end_query_succeeds_ >= 0) { 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!times_end_query_succeeds_) { 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INNOCENT_CONTEXT_RESET_ARB); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --times_end_query_succeeds_; 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::getQueryObjectuivEXT( 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint query, 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint* params) { 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the context is lost, behave as if result is available. 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *params = 1; 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::getIntegerv( 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* value) { 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (pname == GL_MAX_TEXTURE_SIZE) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *value = max_texture_size_; 369a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) else if (pname == GL_ACTIVE_TEXTURE) 370a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) *value = GL_TEXTURE0; 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::getProgramiv(GLuint program, 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* value) { 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (pname == GL_LINK_STATUS) 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *value = 1; 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::getShaderiv(GLuint shader, 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* value) { 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (pname == GL_COMPILE_STATUS) 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *value = 1; 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::getShaderPrecisionFormat(GLenum shadertype, 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum precisiontype, 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* range, 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* precision) { 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Return the minimum precision requirements of the GLES2 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // specification. 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (precisiontype) { 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_LOW_INT: 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 8; 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 8; 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 0; 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_MEDIUM_INT: 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 10; 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 10; 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 0; 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_HIGH_INT: 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 16; 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 16; 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 0; 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_LOW_FLOAT: 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 8; 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 8; 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 8; 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_MEDIUM_FLOAT: 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 14; 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 14; 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 10; 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case GL_HIGH_FLOAT: 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[0] = 62; 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) range[1] = 62; 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *precision = 16; 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::genMailboxCHROMIUM(GLbyte* mailbox) { 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static char mailbox_name1 = '1'; 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static char mailbox_name2 = '1'; 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[0] = mailbox_name1; 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[1] = mailbox_name2; 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[2] = '\0'; 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (++mailbox_name1 == 0) { 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox_name1 = '1'; 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++mailbox_name2; 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLuint TestWebGraphicsContext3D::createAndConsumeTextureCHROMIUM( 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GLenum target, 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GLbyte* mailbox) { 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return createTexture(); 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::loseContextCHROMIUM(GLenum current, 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum other) { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (context_lost_) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_ = true; 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!context_lost_callback_.is_null()) 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context_lost_callback_.Run(); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < shared_contexts_.size(); ++i) 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_contexts_[i]->loseContextCHROMIUM(current, other); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_contexts_.clear(); 459a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 460a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::finish() { 4628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) test_support_->CallAllSyncPointCallbacks(); 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::flush() { 4668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) test_support_->CallAllSyncPointCallbacks(); 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLint TestWebGraphicsContext3D::getAttribLocation(GLuint program, 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GLchar* name) { 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return 0; 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLenum TestWebGraphicsContext3D::getError() { return GL_NO_ERROR; } 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::bindBuffer(GLenum target, 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint buffer) { 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bound_buffer_ = buffer; 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!bound_buffer_) 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 4810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned context_id = buffer >> 16; 4820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned buffer_id = buffer & 0xffff; 4837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 4840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(buffer_id); 4850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_LT(buffer_id, namespace_->next_buffer_id); 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(context_id, context_id_); 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 488424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 4897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (buffers.count(bound_buffer_) == 0) 4907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.set(bound_buffer_, make_scoped_ptr(new Buffer).Pass()); 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.get(bound_buffer_)->target = target; 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::bufferData(GLenum target, 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLsizeiptr size, 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const void* data, 4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum usage) { 4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 500424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 5017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(buffers.count(bound_buffer_), 0u); 5027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_EQ(target, buffers.get(bound_buffer_)->target); 50358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Buffer* buffer = buffers.get(bound_buffer_); 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (context_lost_) { 50558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) buffer->pixels.reset(); 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 50858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 509f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) size_t old_size = buffer->size; 510f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 51158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) buffer->pixels.reset(new uint8[size]); 51258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) buffer->size = size; 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (data != NULL) 51458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) memcpy(buffer->pixels.get(), data, size); 515f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (buffer->target == GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM) 516f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) current_used_transfer_buffer_usage_bytes_ += buffer->size - old_size; 517f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) max_used_transfer_buffer_usage_bytes_ = 518f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::max(max_used_transfer_buffer_usage_bytes_, 519f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) current_used_transfer_buffer_usage_bytes_); 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void* TestWebGraphicsContext3D::mapBufferCHROMIUM(GLenum target, 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum access) { 5247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 525424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 5267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(buffers.count(bound_buffer_), 0u); 5277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_EQ(target, buffers.get(bound_buffer_)->target); 5287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (times_map_buffer_chromium_succeeds_ >= 0) { 5297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!times_map_buffer_chromium_succeeds_) { 5307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return NULL; 5317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) --times_map_buffer_chromium_succeeds_; 5337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return buffers.get(bound_buffer_)->pixels.get(); 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLboolean TestWebGraphicsContext3D::unmapBufferCHROMIUM( 5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target) { 5407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 541424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(buffers.count(bound_buffer_), 0u); 5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_EQ(target, buffers.get(bound_buffer_)->target); 5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.get(bound_buffer_)->pixels.reset(); 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 548010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GLuint TestWebGraphicsContext3D::createImageCHROMIUM(GLsizei width, 549010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GLsizei height, 550010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GLenum internalformat, 551010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GLenum usage) { 552868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(GL_RGBA8_OES, static_cast<int>(internalformat)); 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint image_id = NextImageId(); 5547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 555424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Image>& images = namespace_->images; 5567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch images.set(image_id, make_scoped_ptr(new Image).Pass()); 5577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch images.get(image_id)->pixels.reset(new uint8[width * height * 4]); 558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return image_id; 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::destroyImageCHROMIUM( 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id) { 5630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RetireImageId(id); 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::getImageParameterivCHROMIUM( 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint image_id, 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* params) { 5707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(namespace_->images.count(image_id), 0u); 572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(GL_IMAGE_ROWBYTES_CHROMIUM, static_cast<int>(pname)); 573868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *params = 0; 574868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 575868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 576010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void* TestWebGraphicsContext3D::mapImageCHROMIUM(GLuint image_id) { 5777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 578424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::ScopedPtrHashMap<unsigned, Image>& images = namespace_->images; 5797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(images.count(image_id), 0u); 5807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (times_map_image_chromium_succeeds_ >= 0) { 5817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!times_map_image_chromium_succeeds_) { 5827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return NULL; 5837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) --times_map_image_chromium_succeeds_; 5857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return images.get(image_id)->pixels.get(); 587868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 588868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 589868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::unmapImageCHROMIUM( 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint image_id) { 5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(namespace_->images.count(image_id), 0u); 5937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 595a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)unsigned TestWebGraphicsContext3D::insertSyncPoint() { 596a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return next_insert_sync_point_++; 597a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 598a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestWebGraphicsContext3D::waitSyncPoint(unsigned sync_point) { 600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (sync_point) 601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) last_waited_sync_point_ = sync_point; 602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 603a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 6047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochsize_t TestWebGraphicsContext3D::NumTextures() const { 6057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return namespace_->textures.Size(); 6077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 6087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::TextureAt(int i) const { 6107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return namespace_->textures.IdAt(i); 612868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 613868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::NextTextureId() { 6157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint texture_id = namespace_->next_texture_id++; 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(texture_id < (1 << 16)); 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) texture_id |= context_id_ << 16; 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return texture_id; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::RetireTextureId(GLuint id) { 6230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::AutoLock lock(namespace_->lock); 6240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned context_id = id >> 16; 6250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned texture_id = id & 0xffff; 6260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(texture_id); 6270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_LT(texture_id, namespace_->next_texture_id); 6280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_EQ(context_id, context_id_); 6290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 6300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::NextBufferId() { 6327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint buffer_id = namespace_->next_buffer_id++; 6340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(buffer_id < (1 << 16)); 6350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) buffer_id |= context_id_ << 16; 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return buffer_id; 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::RetireBufferId(GLuint id) { 6400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::AutoLock lock(namespace_->lock); 6410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned context_id = id >> 16; 6420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned buffer_id = id & 0xffff; 6430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(buffer_id); 6440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_LT(buffer_id, namespace_->next_buffer_id); 6450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_EQ(context_id, context_id_); 6460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 6470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::NextImageId() { 6497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint image_id = namespace_->next_image_id++; 6510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(image_id < (1 << 16)); 6520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) image_id |= context_id_ << 16; 653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return image_id; 654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::RetireImageId(GLuint id) { 6570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::AutoLock lock(namespace_->lock); 6580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned context_id = id >> 16; 6590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned image_id = id & 0xffff; 6600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK(image_id); 6610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_LT(image_id, namespace_->next_image_id); 6620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DCHECK_EQ(context_id, context_id_); 6630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 6640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 66558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void TestWebGraphicsContext3D::SetMaxTransferBufferUsageBytes( 66658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) size_t max_transfer_buffer_usage_bytes) { 66758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_capabilities_.max_transfer_buffer_usage_bytes = 66858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) max_transfer_buffer_usage_bytes; 66958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 67058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestWebGraphicsContext3D::TextureTargets::TextureTargets() { 6724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Initialize default bindings. 6734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bound_textures_[GL_TEXTURE_2D] = 0; 6744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bound_textures_[GL_TEXTURE_EXTERNAL_OES] = 0; 6754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bound_textures_[GL_TEXTURE_RECTANGLE_ARB] = 0; 6764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 6774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestWebGraphicsContext3D::TextureTargets::~TextureTargets() {} 6794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TestWebGraphicsContext3D::TextureTargets::BindTexture( 6815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target, 6825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id) { 6834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure this is a supported target by seeing if it was bound to before. 6844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(bound_textures_.find(target) != bound_textures_.end()); 6854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bound_textures_[target] = id; 6864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 6874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::texParameteri(GLenum target, 6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint param) { 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckTextureIsBound(target); 692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::AutoLock lock_for_texture_access(namespace_->lock); 693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<TestTexture> texture = BoundTexture(target); 694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(texture->IsValidParameter(pname)); 695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) texture->params[pname] = param; 696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestWebGraphicsContext3D::getTexParameteriv(GLenum target, 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 7005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint* value) { 701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckTextureIsBound(target); 702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::AutoLock lock_for_texture_access(namespace_->lock); 703f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<TestTexture> texture = BoundTexture(target); 704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(texture->IsValidParameter(pname)); 705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestTexture::TextureParametersMap::iterator it = texture->params.find(pname); 706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (it != texture->params.end()) 707f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *value = it->second; 708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TestWebGraphicsContext3D::TextureTargets::UnbindTexture( 7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint id) { 7124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Bind zero to any targets that the id is bound to. 7134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (TargetTextureMap::iterator it = bound_textures_.begin(); 7144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it != bound_textures_.end(); 7154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it++) { 7164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (it->second == id) 7174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it->second = 0; 7184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 7194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 7204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 7215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)GLuint TestWebGraphicsContext3D::TextureTargets::BoundTexture( 7225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum target) { 7234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(bound_textures_.find(target) != bound_textures_.end()); 7244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return bound_textures_[target]; 7254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 7264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 72758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TestWebGraphicsContext3D::Buffer::Buffer() : target(0), size(0) {} 728c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 729c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestWebGraphicsContext3D::Buffer::~Buffer() {} 730c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 731868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TestWebGraphicsContext3D::Image::Image() {} 732868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 733868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TestWebGraphicsContext3D::Image::~Image() {} 734868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 736