12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 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) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "gpu/GLES2/gl2extchromium.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2ext.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Dboolean; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Dchar; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Denum; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Dint; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Dsizei; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Dsizeiptr; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WGC3Duint; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebGLId; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebGraphicsContext3D; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static const WebGLId kFramebufferId = 1; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static const WebGLId kProgramId = 2; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static const WebGLId kRenderbufferId = 3; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static const WebGLId kShaderId = 4; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static unsigned s_context_id = 1; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const WebGLId TestWebGraphicsContext3D::kExternalTextureId = 1337; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstatic base::LazyInstance<base::Lock>::Leaky 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_shared_namespace_lock = LAZY_INSTANCE_INITIALIZER; 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace* 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestWebGraphicsContext3D::shared_namespace_ = NULL; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace::Namespace() 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : next_buffer_id(1), 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch next_image_id(1), 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch next_texture_id(1) { 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestWebGraphicsContext3D::Namespace::~Namespace() { 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch g_shared_namespace_lock.Get().AssertAcquired(); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (shared_namespace_ == this) 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch shared_namespace_ = NULL; 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestWebGraphicsContext3D::TestWebGraphicsContext3D() 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : FakeWebGraphicsContext3D(), 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_id_(s_context_id++), 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) support_swapbuffers_complete_callback_(true), 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_io_surface_(false), 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_egl_image_(false), 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_make_current_succeeds_(-1), 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_bind_texture_succeeds_(-1), 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_end_query_succeeds_(-1), 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch times_gen_mailbox_succeeds_(-1), 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_(false), 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_image_chromium_succeeds_(-1), 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_buffer_chromium_succeeds_(-1), 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_callback_(NULL), 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) swap_buffers_callback_(NULL), 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memory_allocation_changed_callback_(NULL), 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) max_texture_size_(1024), 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width_(0), 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) height_(0), 76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bound_buffer_(0), 77b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_ptr_factory_(this) { 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CreateNamespace(); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestWebGraphicsContext3D::TestWebGraphicsContext3D( 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebGraphicsContext3D::Attributes& attributes) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : FakeWebGraphicsContext3D(), 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_id_(s_context_id++), 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) attributes_(attributes), 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) support_swapbuffers_complete_callback_(true), 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_io_surface_(false), 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_egl_image_(false), 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_make_current_succeeds_(-1), 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_bind_texture_succeeds_(-1), 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_end_query_succeeds_(-1), 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch times_gen_mailbox_succeeds_(-1), 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_(false), 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_image_chromium_succeeds_(-1), 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_buffer_chromium_succeeds_(-1), 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_callback_(NULL), 97b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) swap_buffers_callback_(NULL), 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memory_allocation_changed_callback_(NULL), 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) max_texture_size_(1024), 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width_(0), 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) height_(0), 102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bound_buffer_(0), 103b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_ptr_factory_(this) { 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CreateNamespace(); 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid TestWebGraphicsContext3D::CreateNamespace() { 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (attributes_.shareResources) { 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(g_shared_namespace_lock.Get()); 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (shared_namespace_) { 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_ = shared_namespace_; 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_ = new Namespace; 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch shared_namespace_ = namespace_.get(); 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_ = new Namespace; 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestWebGraphicsContext3D::~TestWebGraphicsContext3D() { 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) { 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (sync_point_callbacks_[i] != NULL) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delete sync_point_callbacks_[i]; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(g_shared_namespace_lock.Get()); 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_ = NULL; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestWebGraphicsContext3D::makeContextCurrent() { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (times_make_current_succeeds_ >= 0) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!times_make_current_succeeds_) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INNOCENT_CONTEXT_RESET_ARB); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --times_make_current_succeeds_; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !context_lost_; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int TestWebGraphicsContext3D::width() { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return width_; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int TestWebGraphicsContext3D::height() { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return height_; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void TestWebGraphicsContext3D::reshapeWithScaleFactor( 15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int width, int height, float scale_factor) { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width_ = width; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) height_ = height; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestWebGraphicsContext3D::isContextLost() { 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return context_lost_; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Denum TestWebGraphicsContext3D::getGraphicsResetStatusARB() { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return context_lost_ ? GL_UNKNOWN_CONTEXT_RESET_ARB : GL_NO_ERROR; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Denum TestWebGraphicsContext3D::checkFramebufferStatus( 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum target) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (context_lost_) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GL_FRAMEBUFFER_UNDEFINED_OES; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GL_FRAMEBUFFER_COMPLETE; 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGraphicsContext3D::Attributes 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebGraphicsContext3D::getContextAttributes() { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return attributes_; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebKit::WebString TestWebGraphicsContext3D::getString(WGC3Denum name) { 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string string; 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (support_swapbuffers_complete_callback_) 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) string += "GL_CHROMIUM_swapbuffers_complete_callback"; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (name == GL_EXTENSIONS) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (have_extension_io_surface_) 183b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) string += " GL_CHROMIUM_iosurface GL_ARB_texture_rectangle"; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (have_extension_egl_image_) 185b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) string += " GL_OES_EGL_image_external"; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return WebKit::WebString::fromUTF8(string.c_str()); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dint TestWebGraphicsContext3D::getUniformLocation( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId program, 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WGC3Dchar* name) { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dsizeiptr TestWebGraphicsContext3D::getVertexAttribOffset( 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Duint index, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum pname) { 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isBuffer( 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId buffer) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isEnabled( 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum cap) { 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isFramebuffer( 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId framebuffer) { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isProgram( 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId program) { 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isRenderbuffer( 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId renderbuffer) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isShader( 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId shader) { 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean TestWebGraphicsContext3D::isTexture( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId texture) { 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createBuffer() { 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NextBufferId(); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteBuffer(WebGLId id) { 2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned context_id = id >> 17; 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned buffer_id = id & 0x1ffff; 2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(buffer_id && buffer_id < namespace_->next_buffer_id); 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(context_id, context_id_); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createFramebuffer() { 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kFramebufferId | context_id_ << 16; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteFramebuffer(WebGLId id) { 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kFramebufferId | context_id_ << 16, id); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createProgram() { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kProgramId | context_id_ << 16; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteProgram(WebGLId id) { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kProgramId | context_id_ << 16, id); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createRenderbuffer() { 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kRenderbufferId | context_id_ << 16; 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteRenderbuffer(WebGLId id) { 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kRenderbufferId | context_id_ << 16, id); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createShader(WGC3Denum) { 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kShaderId | context_id_ << 16; 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteShader(WebGLId id) { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kShaderId | context_id_ << 16, id); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::createTexture() { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId texture_id = NextTextureId(); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_NE(texture_id, kExternalTextureId); 2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch namespace_->textures.push_back(texture_id); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return texture_id; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::deleteTexture(WebGLId texture_id) { 2917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<WebKit::WebGLId>& textures = namespace_->textures; 2937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(std::find(textures.begin(), textures.end(), texture_id) != 2947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch textures.end()); 2957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch textures.erase(std::find(textures.begin(), textures.end(), texture_id)); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::attachShader(WebGLId program, WebGLId shader) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kProgramId | context_id_ << 16, program); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kShaderId | context_id_ << 16, shader); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::useProgram(WebGLId program) { 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!program) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kProgramId | context_id_ << 16, program); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindFramebuffer( 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum target, WebGLId framebuffer) { 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!framebuffer) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kFramebufferId | context_id_ << 16, framebuffer); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindRenderbuffer( 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum target, WebGLId renderbuffer) { 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!renderbuffer) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kRenderbufferId | context_id_ << 16, renderbuffer); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::bindTexture( 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum target, WebGLId texture_id) { 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (times_bind_texture_succeeds_ >= 0) { 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!times_bind_texture_succeeds_) { 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INNOCENT_CONTEXT_RESET_ARB); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --times_bind_texture_succeeds_; 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!texture_id) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (texture_id == kExternalTextureId) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 3387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<WebKit::WebGLId>& textures = namespace_->textures; 3397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(std::find(textures.begin(), textures.end(), texture_id) != 3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch textures.end()); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) used_textures_.insert(texture_id); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::endQueryEXT(WGC3Denum target) { 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (times_end_query_succeeds_ >= 0) { 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!times_end_query_succeeds_) { 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_INNOCENT_CONTEXT_RESET_ARB); 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --times_end_query_succeeds_; 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::getQueryObjectuivEXT( 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGLId query, 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum pname, 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Duint* params) { 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the context is lost, behave as if result is available. 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *params = 1; 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::getIntegerv( 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WGC3Denum pname, 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Dint* value) { 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (pname == GL_MAX_TEXTURE_SIZE) 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *value = max_texture_size_; 368a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) else if (pname == GL_ACTIVE_TEXTURE) 369a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) *value = GL_TEXTURE0; 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::genMailboxCHROMIUM(WebKit::WGC3Dbyte* mailbox) { 3737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (times_gen_mailbox_succeeds_ >= 0) { 3747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!times_gen_mailbox_succeeds_) { 3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GL_INNOCENT_CONTEXT_RESET_ARB); 3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 3787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch --times_gen_mailbox_succeeds_; 3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (context_lost_) { 3817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch memset(mailbox, 0, 64); 3827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 3837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 3847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static char mailbox_name1 = '1'; 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static char mailbox_name2 = '1'; 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[0] = mailbox_name1; 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[1] = mailbox_name2; 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox[2] = '\0'; 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (++mailbox_name1 == 0) { 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mailbox_name1 = '1'; 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++mailbox_name2; 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::setContextLostCallback( 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGraphicsContextLostCallback* callback) { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_callback_ = callback; 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestWebGraphicsContext3D::loseContextCHROMIUM(WGC3Denum current, 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WGC3Denum other) { 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (context_lost_) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_ = true; 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (context_lost_callback_) 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) context_lost_callback_->onContextLost(); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < shared_contexts_.size(); ++i) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_contexts_[i]->loseContextCHROMIUM(current, other); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_contexts_.clear(); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::signalSyncPoint( 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned sync_point, 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebGraphicsSyncPointCallback* callback) { 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sync_point_callbacks_.push_back(callback); 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 420a3f7b4e666c476898878fa745f637129375cd889Ben Murdochvoid TestWebGraphicsContext3D::signalQuery( 421a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebKit::WebGLId query, 422a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebGraphicsSyncPointCallback* callback) { 423a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch sync_point_callbacks_.push_back(callback); 424a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 425a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 426b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void TestWebGraphicsContext3D::setSwapBuffersCompleteCallbackCHROMIUM( 427b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* callback) { 428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (support_swapbuffers_complete_callback_) 429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) swap_buffers_callback_ = callback; 430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TestWebGraphicsContext3D::setMemoryAllocationChangedCallbackCHROMIUM( 433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) { 434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memory_allocation_changed_callback_ = callback; 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::prepareTexture() { 438b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (swap_buffers_callback_) { 439b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 440b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, base::Bind(&TestWebGraphicsContext3D::SwapBuffersComplete, 441b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 442b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallAllSyncPointCallbacks(); 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::finish() { 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallAllSyncPointCallbacks(); 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::flush() { 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallAllSyncPointCallbacks(); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static void CallAndDestroy( 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback* callback) { 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!callback) 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback->onSyncPointReached(); 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delete callback; 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::CallAllSyncPointCallbacks() { 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) { 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->PostTask( 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&CallAndDestroy, 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sync_point_callbacks_[i])); 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sync_point_callbacks_.clear(); 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 472b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void TestWebGraphicsContext3D::SwapBuffersComplete() { 473b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (swap_buffers_callback_) 474b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) swap_buffers_callback_->onSwapBuffersComplete(); 475b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 476b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::bindBuffer(WebKit::WGC3Denum target, 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebGLId buffer) { 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bound_buffer_ = buffer; 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!bound_buffer_) 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned context_id = buffer >> 17; 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned buffer_id = buffer & 0x1ffff; 4847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 4857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(buffer_id && buffer_id < namespace_->next_buffer_id); 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(context_id, context_id_); 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 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) 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TestWebGraphicsContext3D::bufferData(WebKit::WGC3Denum target, 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Dsizeiptr size, 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const void* data, 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum usage) { 4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 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); 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (context_lost_) { 5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.get(bound_buffer_)->pixels.reset(); 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.get(bound_buffer_)->pixels.reset(new uint8[size]); 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (data != NULL) 5097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch memcpy(buffers.get(bound_buffer_)->pixels.get(), data, size); 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void* TestWebGraphicsContext3D::mapBufferCHROMIUM(WebKit::WGC3Denum target, 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum access) { 5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 5167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(buffers.count(bound_buffer_), 0u); 5177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_EQ(target, buffers.get(bound_buffer_)->target); 5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (times_map_buffer_chromium_succeeds_ >= 0) { 5197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!times_map_buffer_chromium_succeeds_) { 5207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return NULL; 5217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) --times_map_buffer_chromium_succeeds_; 5237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return buffers.get(bound_buffer_)->pixels.get(); 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebKit::WGC3Dboolean TestWebGraphicsContext3D::unmapBufferCHROMIUM( 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum target) { 5297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedPtrHashMap<unsigned, Buffer>& buffers = namespace_->buffers; 5317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(buffers.count(bound_buffer_), 0u); 5327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_EQ(target, buffers.get(bound_buffer_)->target); 5337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch buffers.get(bound_buffer_)->pixels.reset(); 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::bindTexImage2DCHROMIUM( 538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum target, 539868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dint image_id) { 5407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(namespace_->images.count(image_id), 0u); 542868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 543868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 544868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)WebKit::WGC3Duint TestWebGraphicsContext3D::createImageCHROMIUM( 545868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dsizei width, WebKit::WGC3Dsizei height, 546868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum internalformat) { 547868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(GL_RGBA8_OES, static_cast<int>(internalformat)); 548868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint image_id = NextImageId(); 5497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedPtrHashMap<unsigned, Image>& images = namespace_->images; 5517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch images.set(image_id, make_scoped_ptr(new Image).Pass()); 5527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch images.get(image_id)->pixels.reset(new uint8[width * height * 4]); 553868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return image_id; 554868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::destroyImageCHROMIUM( 557868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint id) { 5587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) unsigned context_id = id >> 17; 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) unsigned image_id = id & 0x1ffff; 5617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK(image_id && image_id < namespace_->next_image_id); 562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(context_id, context_id_); 563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void TestWebGraphicsContext3D::getImageParameterivCHROMIUM( 566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint image_id, 567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum pname, 568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dint* params) { 5697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(namespace_->images.count(image_id), 0u); 571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK_EQ(GL_IMAGE_ROWBYTES_CHROMIUM, static_cast<int>(pname)); 572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *params = 0; 573868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 574868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 575868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void* TestWebGraphicsContext3D::mapImageCHROMIUM(WebKit::WGC3Duint image_id, 576868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum access) { 5777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 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( 590868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint image_id) { 5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_GT(namespace_->images.count(image_id), 0u); 5937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochsize_t TestWebGraphicsContext3D::NumTextures() const { 5967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 5977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return namespace_->textures.size(); 5987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 5997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6007dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochWebKit::WebGLId TestWebGraphicsContext3D::TextureAt(int i) const { 6017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return namespace_->textures[i]; 603868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 604868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::NextTextureId() { 6067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebGLId texture_id = namespace_->next_texture_id++; 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(texture_id < (1 << 16)); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) texture_id |= context_id_ << 16; 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return texture_id; 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebGLId TestWebGraphicsContext3D::NextBufferId() { 6147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebGLId buffer_id = namespace_->next_buffer_id++; 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(buffer_id < (1 << 17)); 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) buffer_id |= context_id_ << 17; 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return buffer_id; 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 621868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)WebKit::WGC3Duint TestWebGraphicsContext3D::NextImageId() { 6227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::AutoLock lock(namespace_->lock); 6237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WGC3Duint image_id = namespace_->next_image_id++; 624868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(image_id < (1 << 17)); 625868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) image_id |= context_id_ << 17; 626868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return image_id; 627868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 628868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TestWebGraphicsContext3D::SetMemoryAllocation( 630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebGraphicsMemoryAllocation allocation) { 631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!memory_allocation_changed_callback_) 632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memory_allocation_changed_callback_->onMemoryAllocationChanged(allocation); 634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestWebGraphicsContext3D::Buffer::Buffer() : target(0) {} 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestWebGraphicsContext3D::Buffer::~Buffer() {} 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 640868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TestWebGraphicsContext3D::Image::Image() {} 641868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 642868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TestWebGraphicsContext3D::Image::~Image() {} 643868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 645