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)#ifndef CC_TEST_TEST_WEB_GRAPHICS_CONTEXT_3D_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_TEST_TEST_WEB_GRAPHICS_CONTEXT_3D_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/ref_counted.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/memory/weak_ptr.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/stl_util.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/synchronization/lock.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/scoped_ptr_hash_map.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/debug/fake_web_graphics_context_3d.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace WebKit { struct WebGraphicsMemoryAllocation; } 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestWebGraphicsContext3D : public FakeWebGraphicsContext3D { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TestWebGraphicsContext3D> Create() { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(new TestWebGraphicsContext3D()); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TestWebGraphicsContext3D> Create( 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebGraphicsContext3D::Attributes& attributes) { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(new TestWebGraphicsContext3D(attributes)); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestWebGraphicsContext3D(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool makeContextCurrent(); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int width(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int height(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void reshapeWithScaleFactor( 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int width, int height, float scale_factor); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool isContextLost(); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Denum getGraphicsResetStatusARB(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void attachShader(WebKit::WebGLId program, WebKit::WebGLId shader); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void bindFramebuffer( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum target, WebKit::WebGLId framebuffer); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void bindRenderbuffer( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum target, WebKit::WebGLId renderbuffer); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void bindTexture( 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum target, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebGLId texture_id); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Denum checkFramebufferStatus(WebKit::WGC3Denum target); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Attributes getContextAttributes(); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebString getString(WebKit::WGC3Denum name); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dint getUniformLocation( 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebGLId program, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WGC3Dchar* name); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dsizeiptr getVertexAttribOffset( 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Duint index, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum pname); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isBuffer(WebKit::WebGLId buffer); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isEnabled(WebKit::WGC3Denum cap); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isFramebuffer(WebKit::WebGLId framebuffer); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isProgram(WebKit::WebGLId program); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isRenderbuffer(WebKit::WebGLId renderbuffer); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isShader(WebKit::WebGLId shader); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WGC3Dboolean isTexture(WebKit::WebGLId texture); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void useProgram(WebKit::WebGLId program); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createBuffer(); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createFramebuffer(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createProgram(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createRenderbuffer(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createShader(WebKit::WGC3Denum); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId createTexture(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteBuffer(WebKit::WebGLId id); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteFramebuffer(WebKit::WebGLId id); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteProgram(WebKit::WebGLId id); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteRenderbuffer(WebKit::WebGLId id); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteShader(WebKit::WebGLId id); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void deleteTexture(WebKit::WebGLId texture_id); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void endQueryEXT(WebKit::WGC3Denum target); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void getQueryObjectuivEXT( 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebGLId query, 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum pname, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Duint* params); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void getIntegerv( 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum pname, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Dint* value); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void genMailboxCHROMIUM(WebKit::WGC3Dbyte* mailbox); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void produceTextureCHROMIUM(WebKit::WGC3Denum target, 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebKit::WGC3Dbyte* mailbox) { } 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void consumeTextureCHROMIUM(WebKit::WGC3Denum target, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebKit::WGC3Dbyte* mailbox) { } 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setContextLostCallback( 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGraphicsContextLostCallback* callback); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void loseContextCHROMIUM(WebKit::WGC3Denum current, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WGC3Denum other); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Takes ownership of the |callback|. 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void signalSyncPoint(unsigned sync_point, 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebGraphicsSyncPointCallback* callback); 117a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual void signalQuery(WebKit::WebGLId query, 118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch WebGraphicsSyncPointCallback* callback); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void setSwapBuffersCompleteCallbackCHROMIUM( 121b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* callback); 122b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void setMemoryAllocationChangedCallbackCHROMIUM( 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback); 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void prepareTexture(); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void finish(); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void flush(); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void bindBuffer(WebKit::WGC3Denum target, WebKit::WebGLId buffer); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void bufferData(WebKit::WGC3Denum target, 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Dsizeiptr size, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const void* data, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum usage); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void* mapBufferCHROMIUM(WebKit::WGC3Denum target, 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WGC3Denum access); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebKit::WGC3Dboolean unmapBufferCHROMIUM(WebKit::WGC3Denum target); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void bindTexImage2DCHROMIUM(WebKit::WGC3Denum target, 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dint image_id); 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual WebKit::WGC3Duint createImageCHROMIUM( 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dsizei width, 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dsizei height, 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum internalformat); 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void destroyImageCHROMIUM(WebKit::WGC3Duint image_id); 146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void getImageParameterivCHROMIUM( 147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint image_id, 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum pname, 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Dint* params); 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void* mapImageCHROMIUM( 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Duint image_id, 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebKit::WGC3Denum access); 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void unmapImageCHROMIUM(WebKit::WGC3Duint image_id); 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When set, MakeCurrent() will fail after this many times. 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_times_make_current_succeeds(int times) { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_make_current_succeeds_ = times; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_times_bind_texture_succeeds(int times) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_bind_texture_succeeds_ = times; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_times_end_query_succeeds(int times) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) times_end_query_succeeds_ = times; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void set_times_gen_mailbox_succeeds(int times) { 1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch times_gen_mailbox_succeeds_ = times; 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // When set, mapImageCHROMIUM and mapBufferCHROMIUM will return NULL after 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // this many times. 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void set_times_map_image_chromium_succeeds(int times) { 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_image_chromium_succeeds_ = times; 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void set_times_map_buffer_chromium_succeeds(int times) { 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) times_map_buffer_chromium_succeeds_ = times; 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t NumTextures() const; 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebKit::WebGLId TextureAt(int i) const; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t NumUsedTextures() const { return used_textures_.size(); } 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool UsedTexture(int texture) const { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ContainsKey(used_textures_, texture); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ResetUsedTextures() { used_textures_.clear(); } 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void set_support_swapbuffers_complete_callback(bool support) { 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) support_swapbuffers_complete_callback_ = support; 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_have_extension_io_surface(bool have) { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_io_surface_ = have; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_have_extension_egl_image(bool have) { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_extension_egl_image_ = have; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When this context is lost, all contexts in its share group are also lost. 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void add_share_group_context(WebKit::WebGraphicsContext3D* context3d) { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shared_contexts_.push_back(context3d); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_max_texture_size(int size) { max_texture_size_ = size; } 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const WebKit::WebGLId kExternalTextureId; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebGLId NextTextureId(); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebKit::WebGLId NextBufferId(); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual WebKit::WebGLId NextImageId(); 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetMemoryAllocation(WebKit::WebGraphicsMemoryAllocation allocation); 212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch struct Buffer { 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Buffer(); 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~Buffer(); 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebKit::WGC3Denum target; 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<uint8[]> pixels; 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Buffer); 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch struct Image { 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Image(); 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~Image(); 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<uint8[]> pixels; 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Image); 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch struct Namespace : public base::RefCountedThreadSafe<Namespace> { 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Namespace(); 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Protects all fields. 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Lock lock; 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned next_buffer_id; 2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned next_image_id; 2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch unsigned next_texture_id; 2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<WebKit::WebGLId> textures; 2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedPtrHashMap<unsigned, Buffer> buffers; 2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedPtrHashMap<unsigned, Image> images; 2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch friend class base::RefCountedThreadSafe<Namespace>; 2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~Namespace(); 2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Namespace); 2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebGraphicsContext3D(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestWebGraphicsContext3D( 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebGraphicsContext3D::Attributes& attributes); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CallAllSyncPointCallbacks(); 258b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void SwapBuffersComplete(); 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void CreateNamespace(); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned context_id_; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Attributes attributes_; 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool support_swapbuffers_complete_callback_; 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool have_extension_io_surface_; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool have_extension_egl_image_; 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int times_make_current_succeeds_; 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int times_bind_texture_succeeds_; 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int times_end_query_succeeds_; 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int times_gen_mailbox_succeeds_; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool context_lost_; 2717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int times_map_image_chromium_succeeds_; 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int times_map_buffer_chromium_succeeds_; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGraphicsContextLostCallback* context_lost_callback_; 274b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* swap_buffers_callback_; 275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch memory_allocation_changed_callback_; 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<WebGraphicsSyncPointCallback*> sync_point_callbacks_; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::hash_set<WebKit::WebGLId> used_textures_; 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WebKit::WebGraphicsContext3D*> shared_contexts_; 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int max_texture_size_; 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width_; 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int height_; 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned bound_buffer_; 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_refptr<Namespace> namespace_; 2877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static Namespace* shared_namespace_; 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 289b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::WeakPtrFactory<TestWebGraphicsContext3D> weak_ptr_factory_; 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_TEST_TEST_WEB_GRAPHICS_CONTEXT_3D_H_ 295