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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h

Issue 2125023002: Reland "webgl: use immutable texture for the default FBO." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add GL_BGRA8_EXT Created 4 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 GLenum creationInternalColorFormat = 0; 246 GLenum creationInternalColorFormat = 0;
247 GLenum colorFormat = 0; 247 GLenum colorFormat = 0;
248 }; 248 };
249 249
250 // If we used CHROMIUM_image as the backing storage for our buffers, 250 // If we used CHROMIUM_image as the backing storage for our buffers,
251 // we need to know the mapping from texture id to image. 251 // we need to know the mapping from texture id to image.
252 struct TextureInfo { 252 struct TextureInfo {
253 DISALLOW_NEW(); 253 DISALLOW_NEW();
254 GLuint textureId = 0; 254 GLuint textureId = 0;
255 GLuint imageId = 0; 255 GLuint imageId = 0;
256 bool immutable = false;
256 257
257 // A GpuMemoryBuffer is a concept that the compositor understands. and 258 // A GpuMemoryBuffer is a concept that the compositor understands. and
258 // is able to operate on. The id is scoped to renderer process. 259 // is able to operate on. The id is scoped to renderer process.
259 GLint gpuMemoryBufferId = -1; 260 GLint gpuMemoryBufferId = -1;
260 261
261 TextureParameters parameters; 262 TextureParameters parameters;
262 }; 263 };
263 264
264 struct MailboxInfo : public RefCounted<MailboxInfo> { 265 struct MailboxInfo : public RefCounted<MailboxInfo> {
265 WTF_MAKE_NONCOPYABLE(MailboxInfo); 266 WTF_MAKE_NONCOPYABLE(MailboxInfo);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 ReadbackSkia 315 ReadbackSkia
315 }; 316 };
316 317
317 // Helper function which does a readback from the currently-bound 318 // Helper function which does a readback from the currently-bound
318 // framebuffer into a buffer of a certain size with 4-byte pixels. 319 // framebuffer into a buffer of a certain size with 4-byte pixels.
319 void readBackFramebuffer(unsigned char* pixels, int width, int height, Readb ackOrder, WebGLImageConversion::AlphaOp); 320 void readBackFramebuffer(unsigned char* pixels, int width, int height, Readb ackOrder, WebGLImageConversion::AlphaOp);
320 321
321 // Helper function to flip a bitmap vertically. 322 // Helper function to flip a bitmap vertically.
322 void flipVertically(uint8_t* data, int width, int height); 323 void flipVertically(uint8_t* data, int width, int height);
323 324
324 // Helper to texImage2D with pixel==0 case: pixels are initialized to 0. 325 // Create a storage texture if possible.
325 // By default, alignment is 4, the OpenGL default setting. 326 // Return true if a storage texture is created.
326 void texImage2DResourceSafe(GLenum target, GLint level, GLenum internalforma t, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLin t alignment = 4); 327 // Return false if a regular texture is created.
328 bool createStorageTextureIfPossible(GLenum target, GLenum internalformat, GL sizei width, GLsizei height, GLint border, GLenum format, GLenum type);
327 // Allocate buffer storage to be sent to compositor using either texImage2D or CHROMIUM_image based on available support. 329 // Allocate buffer storage to be sent to compositor using either texImage2D or CHROMIUM_image based on available support.
328 void deleteChromiumImageForTexture(TextureInfo*); 330 void deleteChromiumImageForTexture(TextureInfo*);
329 331
330 // If RGB emulation is required, then the CHROMIUM image's alpha channel 332 // If RGB emulation is required, then the CHROMIUM image's alpha channel
331 // must be immediately cleared after it is bound to a texture. Nothing 333 // must be immediately cleared after it is bound to a texture. Nothing
332 // should be allowed to change the alpha channel after this. 334 // should be allowed to change the alpha channel after this.
333 void clearChromiumImageAlpha(const TextureInfo&); 335 void clearChromiumImageAlpha(const TextureInfo&);
334 336
335 // Tries to create a CHROMIUM_image backed texture if 337 // Tries to create a CHROMIUM_image backed texture if
336 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() is true. On failure, 338 // RuntimeEnabledFeatures::webGLImageChromiumEnabled() is true. On failure,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 371
370 std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider; 372 std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider;
371 // Lifetime is tied to the m_contextProvider. 373 // Lifetime is tied to the m_contextProvider.
372 gpu::gles2::GLES2Interface* m_gl; 374 gpu::gles2::GLES2Interface* m_gl;
373 std::unique_ptr<Extensions3DUtil> m_extensionsUtil; 375 std::unique_ptr<Extensions3DUtil> m_extensionsUtil;
374 IntSize m_size = { -1, -1 }; 376 IntSize m_size = { -1, -1 };
375 const bool m_discardFramebufferSupported; 377 const bool m_discardFramebufferSupported;
376 const bool m_wantAlphaChannel; 378 const bool m_wantAlphaChannel;
377 const bool m_premultipliedAlpha; 379 const bool m_premultipliedAlpha;
378 bool m_hasImplicitStencilBuffer = false; 380 bool m_hasImplicitStencilBuffer = false;
381 bool m_storageTextureSupported = false;
379 struct FrontBufferInfo { 382 struct FrontBufferInfo {
380 TextureInfo texInfo; 383 TextureInfo texInfo;
381 WebExternalTextureMailbox mailbox; 384 WebExternalTextureMailbox mailbox;
382 }; 385 };
383 FrontBufferInfo m_frontColorBuffer; 386 FrontBufferInfo m_frontColorBuffer;
384 387
385 std::unique_ptr<WTF::Closure> m_newMailboxCallback; 388 std::unique_ptr<WTF::Closure> m_newMailboxCallback;
386 389
387 // This is used when the user requests either a depth or stencil buffer. 390 // This is used when the user requests either a depth or stencil buffer.
388 GLuint m_depthStencilBuffer = 0; 391 GLuint m_depthStencilBuffer = 0;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 // used to resize the Canvas. 447 // used to resize the Canvas.
445 SkBitmap m_resizingBitmap; 448 SkBitmap m_resizingBitmap;
446 449
447 // Used to flip a bitmap vertically. 450 // Used to flip a bitmap vertically.
448 Vector<uint8_t> m_scanline; 451 Vector<uint8_t> m_scanline;
449 }; 452 };
450 453
451 } // namespace blink 454 } // namespace blink
452 455
453 #endif // DrawingBuffer_h 456 #endif // DrawingBuffer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698