Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc

Issue 14456004: GPU client side changes for GpuMemoryBuffers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@glapi
Patch Set: Add missing parameter in GLES2Implementation ctor in GLES2Implementation unittest Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" 5 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h"
6 6
7 #include <GLES2/gl2.h> 7 #include <GLES2/gl2.h>
8 #ifndef GL_GLEXT_PROTOTYPES 8 #ifndef GL_GLEXT_PROTOTYPES
9 #define GL_GLEXT_PROTOTYPES 1 9 #define GL_GLEXT_PROTOTYPES 1
10 #endif 10 #endif
11 #include <GLES2/gl2ext.h> 11 #include <GLES2/gl2ext.h>
12 #include <GLES2/gl2extchromium.h> 12 #include <GLES2/gl2extchromium.h>
13 13
14 #include <algorithm> 14 #include <algorithm>
15 #include <set> 15 #include <set>
16 #include <string> 16 #include <string>
17 17
18 #include "base/bind.h" 18 #include "base/bind.h"
19 #include "base/bind_helpers.h" 19 #include "base/bind_helpers.h"
20 #include "base/callback.h" 20 #include "base/callback.h"
21 #include "base/command_line.h" 21 #include "base/command_line.h"
22 #include "base/lazy_instance.h" 22 #include "base/lazy_instance.h"
23 #include "base/logging.h" 23 #include "base/logging.h"
24 #include "base/memory/singleton.h" 24 #include "base/memory/singleton.h"
25 #include "base/message_loop.h" 25 #include "base/message_loop.h"
26 #include "base/metrics/histogram.h" 26 #include "base/metrics/histogram.h"
27 #include "base/synchronization/lock.h" 27 #include "base/synchronization/lock.h"
28 #include "gpu/command_buffer/client/gles2_implementation.h" 28 #include "gpu/command_buffer/client/gles2_implementation.h"
29 #include "gpu/command_buffer/client/gles2_lib.h" 29 #include "gpu/command_buffer/client/gles2_lib.h"
30 #include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
31 #include "gpu/command_buffer/client/image_factory.h"
30 #include "gpu/command_buffer/client/transfer_buffer.h" 32 #include "gpu/command_buffer/client/transfer_buffer.h"
31 #include "gpu/command_buffer/common/constants.h" 33 #include "gpu/command_buffer/common/constants.h"
32 #include "gpu/command_buffer/service/command_buffer_service.h" 34 #include "gpu/command_buffer/service/command_buffer_service.h"
33 #include "gpu/command_buffer/service/context_group.h" 35 #include "gpu/command_buffer/service/context_group.h"
34 #include "gpu/command_buffer/service/gl_context_virtual.h" 36 #include "gpu/command_buffer/service/gl_context_virtual.h"
35 #include "gpu/command_buffer/service/gpu_scheduler.h" 37 #include "gpu/command_buffer/service/gpu_scheduler.h"
38 #include "gpu/command_buffer/service/image_manager.h"
36 #include "gpu/command_buffer/service/transfer_buffer_manager.h" 39 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
37 #include "ui/gl/gl_context.h" 40 #include "ui/gl/gl_context.h"
41 #include "ui/gl/gl_image.h"
38 #include "ui/gl/gl_share_group.h" 42 #include "ui/gl/gl_share_group.h"
39 #include "ui/gl/gl_surface.h" 43 #include "ui/gl/gl_surface.h"
40 #include "webkit/gpu/gl_bindings_skia_cmd_buffer.h" 44 #include "webkit/gpu/gl_bindings_skia_cmd_buffer.h"
41 45
42 using gpu::Buffer; 46 using gpu::Buffer;
43 using gpu::CommandBuffer; 47 using gpu::CommandBuffer;
44 using gpu::CommandBufferService; 48 using gpu::CommandBufferService;
45 using gpu::gles2::GLES2CmdHelper; 49 using gpu::gles2::GLES2CmdHelper;
46 using gpu::gles2::GLES2Implementation; 50 using gpu::gles2::GLES2Implementation;
51 using gpu::gles2::ImageFactory;
52 using gpu::gles2::ImageManager;
53 using gpu::GpuMemoryBuffer;
47 using gpu::GpuScheduler; 54 using gpu::GpuScheduler;
48 using gpu::TransferBuffer; 55 using gpu::TransferBuffer;
49 using gpu::TransferBufferManager; 56 using gpu::TransferBufferManager;
50 using gpu::TransferBufferManagerInterface; 57 using gpu::TransferBufferManagerInterface;
51 58
52 namespace webkit { 59 namespace webkit {
53 namespace gpu { 60 namespace gpu {
61 namespace {
62 class ImageFactoryInProcess;
63 }
54 64
55 class GLInProcessContext { 65 class GLInProcessContext {
56 public: 66 public:
57 // These are the same error codes as used by EGL. 67 // These are the same error codes as used by EGL.
58 enum Error { 68 enum Error {
59 SUCCESS = 0x3000, 69 SUCCESS = 0x3000,
60 NOT_INITIALIZED = 0x3001, 70 NOT_INITIALIZED = 0x3001,
61 BAD_ATTRIBUTE = 0x3004, 71 BAD_ATTRIBUTE = 0x3004,
62 BAD_GLContext = 0x3006, 72 BAD_GLContext = 0x3006,
63 CONTEXT_LOST = 0x300E 73 CONTEXT_LOST = 0x300E
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 bool Initialize(bool is_offscreen, 165 bool Initialize(bool is_offscreen,
156 gfx::AcceleratedWidget window, 166 gfx::AcceleratedWidget window,
157 const gfx::Size& size, 167 const gfx::Size& size,
158 const char* allowed_extensions, 168 const char* allowed_extensions,
159 const int32* attrib_list, 169 const int32* attrib_list,
160 gfx::GpuPreference gpu_preference); 170 gfx::GpuPreference gpu_preference);
161 void Destroy(); 171 void Destroy();
162 172
163 void OnContextLost(); 173 void OnContextLost();
164 174
175 ::gpu::gles2::ImageManager* GetImageManager();
176
177 scoped_refptr<ImageFactoryInProcess> GetImageFactory();
178
165 base::Closure context_lost_callback_; 179 base::Closure context_lost_callback_;
166 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_; 180 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
167 scoped_ptr<CommandBufferService> command_buffer_; 181 scoped_ptr<CommandBufferService> command_buffer_;
168 scoped_ptr< ::gpu::GpuScheduler> gpu_scheduler_; 182 scoped_ptr< ::gpu::GpuScheduler> gpu_scheduler_;
169 scoped_ptr< ::gpu::gles2::GLES2Decoder> decoder_; 183 scoped_ptr< ::gpu::gles2::GLES2Decoder> decoder_;
170 scoped_refptr<gfx::GLContext> context_; 184 scoped_refptr<gfx::GLContext> context_;
171 scoped_refptr<gfx::GLSurface> surface_; 185 scoped_refptr<gfx::GLSurface> surface_;
172 scoped_ptr<GLES2CmdHelper> gles2_helper_; 186 scoped_ptr<GLES2CmdHelper> gles2_helper_;
173 scoped_ptr<TransferBuffer> transfer_buffer_; 187 scoped_ptr<TransferBuffer> transfer_buffer_;
174 scoped_ptr<GLES2Implementation> gles2_implementation_; 188 scoped_ptr<GLES2Implementation> gles2_implementation_;
189 scoped_refptr<ImageFactoryInProcess> image_factory_;
175 scoped_ptr<WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback> 190 scoped_ptr<WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback>
176 signal_sync_point_callback_; 191 signal_sync_point_callback_;
177 Error last_error_; 192 Error last_error_;
178 bool share_resources_; 193 bool share_resources_;
179 bool context_lost_; 194 bool context_lost_;
180 195
181 DISALLOW_COPY_AND_ASSIGN(GLInProcessContext); 196 DISALLOW_COPY_AND_ASSIGN(GLInProcessContext);
182 }; 197 };
183 198
184 namespace { 199 namespace {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 if (context->GetDecoder()) 295 if (context->GetDecoder())
281 context->GetDecoder()->DetachFromThread(); 296 context->GetDecoder()->DetachFromThread();
282 } 297 }
283 298
284 AutoLockAndDecoderDetachThread::~AutoLockAndDecoderDetachThread() { 299 AutoLockAndDecoderDetachThread::~AutoLockAndDecoderDetachThread() {
285 std::for_each(contexts_.begin(), 300 std::for_each(contexts_.begin(),
286 contexts_.end(), 301 contexts_.end(),
287 &DetachThread); 302 &DetachThread);
288 } 303 }
289 304
305 class ImageFactoryInProcess
306 : public ImageFactory,
307 public base::RefCountedThreadSafe<ImageFactoryInProcess> {
308 public:
309 explicit ImageFactoryInProcess(ImageManager* image_manager);
310
311 // methods from ImageFactory
312 virtual scoped_ptr<GpuMemoryBuffer> CreateGpuMemoryBuffer(
313 int width, int height, GLenum internalformat,
314 unsigned* image_id) OVERRIDE;
315 virtual void DeleteGpuMemoryBuffer(unsigned image_id) OVERRIDE;
316 private:
317 friend class base::RefCountedThreadSafe<ImageFactoryInProcess>;
318 virtual ~ImageFactoryInProcess();
319
320 // ImageManager is referred by the ContextGroup and the
321 // ContextGroup outlives the client.
322 ImageManager* image_manager_;
323 unsigned next_id_;
324
325 DISALLOW_COPY_AND_ASSIGN(ImageFactoryInProcess);
326 };
327
328 ImageFactoryInProcess::ImageFactoryInProcess(
329 ImageManager* image_manager) : image_manager_(image_manager),
330 next_id_(0) {
331 }
332
333 ImageFactoryInProcess::~ImageFactoryInProcess() {
334 }
335
336 scoped_ptr<GpuMemoryBuffer> ImageFactoryInProcess::CreateGpuMemoryBuffer(
337 int width, int height, GLenum internalformat, unsigned int* image_id) {
338 // We're taking the lock here because we're accessing the ContextGroup's
339 // shared ImageManager and next_id_.
340 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
341 g_all_shared_contexts.Get());
342 // For Android WebView we assume the |internalformat| will always be
343 // GL_RGBA8_OES.
344 DCHECK_EQ(GL_RGBA8_OES, internalformat);
345 const GpuMemoryBuffer::Creator& create_gpu_memory_buffer_callback =
346 ::gpu::gles2::GetProcessDefaultGpuMemoryBufferFactory();
347 scoped_ptr<GpuMemoryBuffer> buffer =
348 create_gpu_memory_buffer_callback.Run(width, height);
349 scoped_refptr<gfx::GLImage> gl_image =
350 gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer->GetNativeBuffer(),
351 gfx::Size(width, height));
352 *image_id = ++next_id_; // Valid image_ids start from 1.
353 image_manager_->AddImage(gl_image, *image_id);
354 return buffer.Pass();
355 }
356
357 void ImageFactoryInProcess::DeleteGpuMemoryBuffer(unsigned int image_id) {
358 // We're taking the lock here because we're accessing the ContextGroup's
359 // shared ImageManager.
360 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
361 g_all_shared_contexts.Get());
362 image_manager_->RemoveImage(image_id);
363 }
364
290 } // namespace 365 } // namespace
291 366
292 static void CallAndDestroy( 367 static void CallAndDestroy(
293 scoped_ptr< 368 scoped_ptr<
294 WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback> callback) { 369 WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback> callback) {
295 callback->onSyncPointReached(); 370 callback->onSyncPointReached();
296 } 371 }
297 372
298 void GLInProcessContext::PumpCommands() { 373 void GLInProcessContext::PumpCommands() {
299 if (!context_lost_) { 374 if (!context_lost_) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 485
411 // TODO(gman): Remove This 486 // TODO(gman): Remove This
412 void GLInProcessContext::DisableShaderTranslation() { 487 void GLInProcessContext::DisableShaderTranslation() {
413 NOTREACHED(); 488 NOTREACHED();
414 } 489 }
415 490
416 GLES2Implementation* GLInProcessContext::GetImplementation() { 491 GLES2Implementation* GLInProcessContext::GetImplementation() {
417 return gles2_implementation_.get(); 492 return gles2_implementation_.get();
418 } 493 }
419 494
495 ::gpu::gles2::ImageManager* GLInProcessContext::GetImageManager() {
496 return decoder_->GetContextGroup()->image_manager();
497 }
498
499 scoped_refptr<ImageFactoryInProcess> GLInProcessContext::GetImageFactory() {
500 return image_factory_;
501 }
502
420 GLInProcessContext::GLInProcessContext(bool share_resources) 503 GLInProcessContext::GLInProcessContext(bool share_resources)
421 : last_error_(SUCCESS), 504 : last_error_(SUCCESS),
422 share_resources_(share_resources), 505 share_resources_(share_resources),
423 context_lost_(false) { 506 context_lost_(false) {
424 } 507 }
425 508
426 bool GLInProcessContext::Initialize( 509 bool GLInProcessContext::Initialize(
427 bool is_offscreen, 510 bool is_offscreen,
428 gfx::AcceleratedWidget window, 511 gfx::AcceleratedWidget window,
429 const gfx::Size& size, 512 const gfx::Size& size,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 // Create the GLES2 helper, which writes the command buffer protocol. 669 // Create the GLES2 helper, which writes the command buffer protocol.
587 gles2_helper_.reset(new GLES2CmdHelper(command_buffer_.get())); 670 gles2_helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
588 if (!gles2_helper_->Initialize(kCommandBufferSize)) { 671 if (!gles2_helper_->Initialize(kCommandBufferSize)) {
589 Destroy(); 672 Destroy();
590 return false; 673 return false;
591 } 674 }
592 675
593 // Create a transfer buffer. 676 // Create a transfer buffer.
594 transfer_buffer_.reset(new TransferBuffer(gles2_helper_.get())); 677 transfer_buffer_.reset(new TransferBuffer(gles2_helper_.get()));
595 678
679 if (share_resources_) {
680 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
681 g_all_shared_contexts.Get());
682 if (g_all_shared_contexts.Get().empty()) {
683 // Create the image factory for the first context.
684 image_factory_ = new ImageFactoryInProcess(GetImageManager());
685 } else {
686 // Share the image factory created by the first context.
687 GLInProcessContext* first_context = *g_all_shared_contexts.Get().begin();
688 image_factory_ = first_context->GetImageFactory();
689 }
690 } else {
691 // Create the image factory, this object retains its ownership.
692 image_factory_ = new ImageFactoryInProcess(GetImageManager());
693 }
694
596 // Create the object exposing the OpenGL API. 695 // Create the object exposing the OpenGL API.
597 gles2_implementation_.reset(new GLES2Implementation( 696 gles2_implementation_.reset(new GLES2Implementation(
598 gles2_helper_.get(), 697 gles2_helper_.get(),
599 context_group ? context_group->GetImplementation()->share_group() : NULL, 698 context_group ? context_group->GetImplementation()->share_group() : NULL,
600 transfer_buffer_.get(), 699 transfer_buffer_.get(),
601 true, 700 true,
602 false)); 701 false,
702 image_factory_));
603 703
604 if (!gles2_implementation_->Initialize( 704 if (!gles2_implementation_->Initialize(
605 kStartTransferBufferSize, 705 kStartTransferBufferSize,
606 kMinTransferBufferSize, 706 kMinTransferBufferSize,
607 kMaxTransferBufferSize)) { 707 kMaxTransferBufferSize)) {
608 return false; 708 return false;
609 } 709 }
610 710
611 if (share_resources_) { 711 if (share_resources_) {
612 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(), 712 AutoLockAndDecoderDetachThread lock(g_decoder_lock.Get(),
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 return gl_->glname(a1, a2); \ 1189 return gl_->glname(a1, a2); \
1090 } 1190 }
1091 1191
1092 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \ 1192 #define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \
1093 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \ 1193 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \
1094 t1 a1, t2 a2, t3 a3) { \ 1194 t1 a1, t2 a2, t3 a3) { \
1095 ClearContext(); \ 1195 ClearContext(); \
1096 gl_->glname(a1, a2, a3); \ 1196 gl_->glname(a1, a2, a3); \
1097 } 1197 }
1098 1198
1199 #define DELEGATE_TO_GL_3R(name, glname, t1, t2, t3, rt) \
1200 rt WebGraphicsContext3DInProcessCommandBufferImpl::name( \
1201 t1 a1, t2 a2, t3 a3) { \
1202 ClearContext(); \
1203 return gl_->glname(a1, a2, a3); \
1204 }
1205
1099 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \ 1206 #define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \
1100 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \ 1207 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \
1101 t1 a1, t2 a2, t3 a3, t4 a4) { \ 1208 t1 a1, t2 a2, t3 a3, t4 a4) { \
1102 ClearContext(); \ 1209 ClearContext(); \
1103 gl_->glname(a1, a2, a3, a4); \ 1210 gl_->glname(a1, a2, a3, a4); \
1104 } 1211 }
1105 1212
1106 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \ 1213 #define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \
1107 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \ 1214 void WebGraphicsContext3DInProcessCommandBufferImpl::name( \
1108 t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) { \ 1215 t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) { \
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 } 1916 }
1810 1917
1811 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() { 1918 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() {
1812 // TODO(kbr): improve the precision here. 1919 // TODO(kbr): improve the precision here.
1813 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB; 1920 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB;
1814 if (context_lost_callback_) { 1921 if (context_lost_callback_) {
1815 context_lost_callback_->onContextLost(); 1922 context_lost_callback_->onContextLost();
1816 } 1923 }
1817 } 1924 }
1818 1925
1926 DELEGATE_TO_GL_3R(createImageCHROMIUM, CreateImageCHROMIUM,
1927 WGC3Dsizei, WGC3Dsizei, WGC3Denum, WGC3Duint);
1928
1929 DELEGATE_TO_GL_1(destroyImageCHROMIUM, DestroyImageCHROMIUM, WGC3Duint);
1930
1931 DELEGATE_TO_GL_3(getImageParameterivCHROMIUM, GetImageParameterivCHROMIUM,
1932 WGC3Duint, WGC3Denum, GLint*);
1933
1934 DELEGATE_TO_GL_2R(mapImageCHROMIUM, MapImageCHROMIUM,
1935 WGC3Duint, WGC3Denum, void*);
1936
1937 DELEGATE_TO_GL_1(unmapImageCHROMIUM, UnmapImageCHROMIUM, WGC3Duint);
1938
1819 DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM, 1939 DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM,
1820 WebGLId, WGC3Dint, const WGC3Dchar*) 1940 WebGLId, WGC3Dint, const WGC3Dchar*)
1821 1941
1822 DELEGATE_TO_GL(shallowFlushCHROMIUM, ShallowFlushCHROMIUM) 1942 DELEGATE_TO_GL(shallowFlushCHROMIUM, ShallowFlushCHROMIUM)
1823 1943
1824 DELEGATE_TO_GL_1(genMailboxCHROMIUM, GenMailboxCHROMIUM, WGC3Dbyte*) 1944 DELEGATE_TO_GL_1(genMailboxCHROMIUM, GenMailboxCHROMIUM, WGC3Dbyte*)
1825 DELEGATE_TO_GL_2(produceTextureCHROMIUM, ProduceTextureCHROMIUM, 1945 DELEGATE_TO_GL_2(produceTextureCHROMIUM, ProduceTextureCHROMIUM,
1826 WGC3Denum, const WGC3Dbyte*) 1946 WGC3Denum, const WGC3Dbyte*)
1827 DELEGATE_TO_GL_2(consumeTextureCHROMIUM, ConsumeTextureCHROMIUM, 1947 DELEGATE_TO_GL_2(consumeTextureCHROMIUM, ConsumeTextureCHROMIUM,
1828 WGC3Denum, const WGC3Dbyte*) 1948 WGC3Denum, const WGC3Dbyte*)
(...skipping 26 matching lines...) Expand all
1855 1975
1856 DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM, 1976 DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM,
1857 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, 1977 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei,
1858 WGC3Denum, WGC3Denum, const void*) 1978 WGC3Denum, WGC3Denum, const void*)
1859 1979
1860 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM, 1980 DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM,
1861 WGC3Denum) 1981 WGC3Denum)
1862 1982
1863 } // namespace gpu 1983 } // namespace gpu
1864 } // namespace webkit 1984 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698