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

Side by Side Diff: content/common/gpu/client/gl_helper.cc

Issue 388953002: Improving GestureNav screenshotting performance - Part 1 - gl_helper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor change Created 6 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
« no previous file with comments | « content/common/gpu/client/gl_helper.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 "content/common/gpu/client/gl_helper.h" 5 #include "content/common/gpu/client/gl_helper.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 uint32 sync_point) { 134 uint32 sync_point) {
135 return helper_->ConsumeMailboxToTexture(mailbox, sync_point); 135 return helper_->ConsumeMailboxToTexture(mailbox, sync_point);
136 } 136 }
137 137
138 void CropScaleReadbackAndCleanTexture( 138 void CropScaleReadbackAndCleanTexture(
139 GLuint src_texture, 139 GLuint src_texture,
140 const gfx::Size& src_size, 140 const gfx::Size& src_size,
141 const gfx::Rect& src_subrect, 141 const gfx::Rect& src_subrect,
142 const gfx::Size& dst_size, 142 const gfx::Size& dst_size,
143 unsigned char* out, 143 unsigned char* out,
144 const SkColorType color_type, 144 const SkColorType out_color_type,
145 const base::Callback<void(bool)>& callback, 145 const base::Callback<void(bool)>& callback,
146 GLHelper::ScalerQuality quality); 146 GLHelper::ScalerQuality quality);
147 147
148 void ReadbackTextureSync(GLuint texture, 148 void ReadbackTextureSync(GLuint texture,
149 const gfx::Rect& src_rect, 149 const gfx::Rect& src_rect,
150 unsigned char* out, 150 unsigned char* out,
151 SkColorType format); 151 SkColorType format);
152 152
153 void ReadbackTextureAsync(GLuint texture, 153 void ReadbackTextureAsync(GLuint texture,
154 const gfx::Size& dst_size, 154 const gfx::Size& dst_size,
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // |src_size| is the size of |src_texture|. 312 // |src_size| is the size of |src_texture|.
313 GLuint ScaleTexture(GLuint src_texture, 313 GLuint ScaleTexture(GLuint src_texture,
314 const gfx::Size& src_size, 314 const gfx::Size& src_size,
315 const gfx::Rect& src_subrect, 315 const gfx::Rect& src_subrect,
316 const gfx::Size& dst_size, 316 const gfx::Size& dst_size,
317 bool vertically_flip_texture, 317 bool vertically_flip_texture,
318 bool swizzle, 318 bool swizzle,
319 SkColorType color_type, 319 SkColorType color_type,
320 GLHelper::ScalerQuality quality); 320 GLHelper::ScalerQuality quality);
321 321
322 // Converts each four consecutive pixels of the source texture into one pixel
323 // in the result texture with each pixel channel representing the grayscale
324 // color of one of the four original pixels:
325 // R1B1G1A1 R2B2G2A2 R3B3G3A3 R4G4B4A4 -> X1X2X3X4
326 GLuint TransformTextureToGrayscale(GLuint src_texture,
327 const gfx::Size& src_size,
328 const gfx::Rect& src_subrect,
329 bool swizzle);
330
322 static void nullcallback(bool success) {} 331 static void nullcallback(bool success) {}
323 void ReadbackDone(Request *request, int bytes_per_pixel); 332 void ReadbackDone(Request *request, int bytes_per_pixel);
324 void FinishRequest(Request* request, bool result); 333 void FinishRequest(Request* request, bool result);
325 void CancelRequests(); 334 void CancelRequests();
326 335
327 static const float kRGBtoYColorWeights[]; 336 static const float kRGBtoYColorWeights[];
328 static const float kRGBtoUColorWeights[]; 337 static const float kRGBtoUColorWeights[];
329 static const float kRGBtoVColorWeights[]; 338 static const float kRGBtoVColorWeights[];
339 static const float kRGBtoGrayscaleColorWeights[];
330 340
331 GLES2Interface* gl_; 341 GLES2Interface* gl_;
332 gpu::ContextSupport* context_support_; 342 gpu::ContextSupport* context_support_;
333 GLHelper* helper_; 343 GLHelper* helper_;
334 344
335 // A scoped flush that will ensure all resource deletions are flushed when 345 // A scoped flush that will ensure all resource deletions are flushed when
336 // this object is destroyed. Must be declared before other Scoped* fields. 346 // this object is destroyed. Must be declared before other Scoped* fields.
337 ScopedFlush flush_; 347 ScopedFlush flush_;
338 348
339 std::queue<Request*> request_queue_; 349 std::queue<Request*> request_queue_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 dst_size.height(), 410 dst_size.height(),
401 0, 411 0,
402 format, 412 format,
403 type, 413 type,
404 NULL); 414 NULL);
405 } 415 }
406 scaler->Scale(src_texture, dst_texture); 416 scaler->Scale(src_texture, dst_texture);
407 return dst_texture; 417 return dst_texture;
408 } 418 }
409 419
420 GLuint GLHelper::CopyTextureToImpl::TransformTextureToGrayscale(
421 GLuint src_texture,
422 const gfx::Size& src_size,
423 const gfx::Rect& src_subrect,
no sievers 2014/07/15 19:31:49 |src_subrect| is ignored below?
mfomitchev 2014/07/16 19:16:07 Done.
424 bool swizzle) {
425 LOG(ERROR) << "GLHelper::CopyTextureToImpl::TransformTextureToGrayscale";
426
427 GLuint dst_texture = 1u;
mfomitchev 2014/07/11 20:21:33 Should we set the id to 0 instead of 1 here? Does
no sievers 2014/07/15 19:31:49 Yea I'd init to 0, it's what we do in other places
mfomitchev 2014/07/16 19:16:06 Done.
428 gl_->GenTextures(1, &dst_texture);
429 {
430 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, dst_texture);
431 gl_->TexImage2D(GL_TEXTURE_2D,
432 0,
433 GL_BGRA_EXT,
434 src_size.width(),
435 src_size.height(),
no sievers 2014/07/15 19:31:49 This is the wrong size, shouldn't it be a fourth o
mfomitchev 2014/07/16 19:16:06 Done.
436 0,
437 GL_BGRA_EXT,
438 GL_UNSIGNED_BYTE,
439 NULL);
440 }
441
442 helper_->InitScalerImpl();
443 scoped_ptr<ScalerInterface> grayscale_scaler(
444 helper_->scaler_impl_.get()->CreatePlanarScaler(
445 src_size,
446 gfx::Rect(0, 0, (src_size.width() + 3) & ~3, src_size.height()),
447 gfx::Size((src_size.width() + 3) / 4, src_size.height()),
448 false,
449 (swizzle == kSwizzleBGRA),
450 kRGBtoGrayscaleColorWeights));
451 grayscale_scaler->Scale(src_texture, dst_texture);
452 return dst_texture;
453 }
454
410 void GLHelper::CopyTextureToImpl::ReadbackAsync( 455 void GLHelper::CopyTextureToImpl::ReadbackAsync(
411 const gfx::Size& dst_size, 456 const gfx::Size& dst_size,
412 int32 bytes_per_row, 457 int32 bytes_per_row,
413 int32 row_stride_bytes, 458 int32 row_stride_bytes,
414 unsigned char* out, 459 unsigned char* out,
415 const SkColorType color_type, 460 const SkColorType color_type,
416 ReadbackSwizzle swizzle, 461 ReadbackSwizzle swizzle,
417 const base::Callback<void(bool)>& callback) { 462 const base::Callback<void(bool)>& callback) {
418 if (!IsReadbackConfigSupported(color_type)) { 463 if (color_type != kAlpha_8_SkColorType &&
464 !IsReadbackConfigSupported(color_type)) {
419 callback.Run(false); 465 callback.Run(false);
420 return; 466 return;
421 } 467 }
422 Request* request = 468
423 new Request(dst_size, bytes_per_row, row_stride_bytes, out, callback);
424 request_queue_.push(request);
425 request->buffer = 0u;
426 // Start with ARGB8888 params as any other format which is not 469 // Start with ARGB8888 params as any other format which is not
427 // supported is already asserted above. 470 // supported is already asserted above.
428 GLenum format = GL_RGBA, type = GL_UNSIGNED_BYTE; 471 GLenum format = GL_RGBA, type = GL_UNSIGNED_BYTE;
429 int bytes_per_pixel = 4; 472 int bytes_per_pixel = 4;
430 473
474 gfx::Size readback_size = dst_size;
431 switch (color_type) { 475 switch (color_type) {
432 case kN32_SkColorType: 476 case kN32_SkColorType:
433 if (swizzle == kSwizzleBGRA) 477 if (swizzle == kSwizzleBGRA)
434 format = GL_BGRA_EXT; 478 format = GL_BGRA_EXT;
435 break; 479 break;
436 case kRGB_565_SkColorType: 480 case kRGB_565_SkColorType:
437 format = GL_RGB; 481 format = GL_RGB;
438 type = GL_UNSIGNED_SHORT_5_6_5; 482 type = GL_UNSIGNED_SHORT_5_6_5;
439 bytes_per_pixel = 2; 483 bytes_per_pixel = 2;
440 break; 484 break;
485 case kAlpha_8_SkColorType:
486 // For readback purposes, treat the texture as BGRA of smaller size.
487 format = GL_BGRA_EXT;
488 bytes_per_pixel = 4;
489 readback_size.set_width((dst_size.width() + 3) / 4);
441 default: 490 default:
442 NOTREACHED(); 491 NOTREACHED();
443 break; 492 break;
444 } 493 }
494
495 Request* request = new Request(
496 readback_size, bytes_per_row, row_stride_bytes, out, callback);
497 request_queue_.push(request);
498 request->buffer = 0u;
445 gl_->GenBuffers(1, &request->buffer); 499 gl_->GenBuffers(1, &request->buffer);
446 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, request->buffer); 500 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, request->buffer);
447 gl_->BufferData(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 501 gl_->BufferData(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM,
448 bytes_per_pixel * dst_size.GetArea(), 502 bytes_per_pixel * readback_size.GetArea(),
449 NULL, 503 NULL,
450 GL_STREAM_READ); 504 GL_STREAM_READ);
451 505
452 request->query = 0u; 506 request->query = 0u;
453 gl_->GenQueriesEXT(1, &request->query); 507 gl_->GenQueriesEXT(1, &request->query);
454 gl_->BeginQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM, request->query); 508 gl_->BeginQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM, request->query);
455 gl_->ReadPixels(0, 509 gl_->ReadPixels(
456 0, 510 0, 0, readback_size.width(), readback_size.height(), format, type, NULL);
457 dst_size.width(),
458 dst_size.height(),
459 format,
460 type,
461 NULL);
462 gl_->EndQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM); 511 gl_->EndQueryEXT(GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM);
463 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0); 512 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0);
464 context_support_->SignalQuery( 513 context_support_->SignalQuery(
465 request->query, 514 request->query,
466 base::Bind(&CopyTextureToImpl::ReadbackDone, AsWeakPtr(), 515 base::Bind(&CopyTextureToImpl::ReadbackDone, AsWeakPtr(),
467 request, bytes_per_pixel)); 516 request, bytes_per_pixel));
468 } 517 }
518
469 void GLHelper::CopyTextureToImpl::CropScaleReadbackAndCleanTexture( 519 void GLHelper::CopyTextureToImpl::CropScaleReadbackAndCleanTexture(
470 GLuint src_texture, 520 GLuint src_texture,
471 const gfx::Size& src_size, 521 const gfx::Size& src_size,
472 const gfx::Rect& src_subrect, 522 const gfx::Rect& src_subrect,
473 const gfx::Size& dst_size, 523 const gfx::Size& dst_size,
474 unsigned char* out, 524 unsigned char* out,
475 const SkColorType color_type, 525 const SkColorType out_color_type,
476 const base::Callback<void(bool)>& callback, 526 const base::Callback<void(bool)>& callback,
477 GLHelper::ScalerQuality quality) { 527 GLHelper::ScalerQuality quality) {
478 if (!IsReadbackConfigSupported(color_type)) { 528 if (out_color_type != kAlpha_8_SkColorType &&
529 !IsReadbackConfigSupported(out_color_type)) {
479 callback.Run(false); 530 callback.Run(false);
480 return; 531 return;
481 } 532 }
482 GLuint texture = ScaleTexture(src_texture, 533
483 src_size, 534 bool swizzle =
484 src_subrect,
485 dst_size,
486 true,
487 #if (SK_R32_SHIFT == 16) && !SK_B32_SHIFT 535 #if (SK_R32_SHIFT == 16) && !SK_B32_SHIFT
488 true, 536 true;
489 #else 537 #else
490 false, 538 false;
491 #endif 539 #endif
492 color_type, 540
493 quality); 541 GLuint texture =
542 ScaleTexture(src_texture,
543 src_size,
544 src_subrect,
545 dst_size,
546 true,
547 swizzle,
548 out_color_type == kAlpha_8_SkColorType ? kN32_SkColorType
no sievers 2014/07/15 19:31:49 This seems wrong for Alpha_8. If you are using the
mfomitchev 2014/07/16 19:16:06 Done.
549 : out_color_type,
550 quality);
494 DCHECK(texture); 551 DCHECK(texture);
552
553 if (out_color_type == kAlpha_8_SkColorType) {
554 texture =
555 TransformTextureToGrayscale(texture, src_size, src_subrect, swizzle);
no sievers 2014/07/15 19:31:49 +hubbe to comment if this can be done in a single
hubbe 2014/07/15 21:05:56 It can, iff quality is SCALER_QUALITY_FAST, search
mfomitchev 2014/07/16 19:16:06 Done. Also added vertically_flip_texture to Encode
mfomitchev 2014/07/16 19:16:06 Also fixed: the second arg should be dst_size, not
556
557 DCHECK(texture);
558 }
495 ScopedFramebuffer dst_framebuffer(gl_); 559 ScopedFramebuffer dst_framebuffer(gl_);
496 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder(gl_, 560 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder(gl_,
497 dst_framebuffer); 561 dst_framebuffer);
498 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, texture); 562 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, texture);
499 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, 563 gl_->FramebufferTexture2D(GL_FRAMEBUFFER,
500 GL_COLOR_ATTACHMENT0, 564 GL_COLOR_ATTACHMENT0,
501 GL_TEXTURE_2D, 565 GL_TEXTURE_2D,
502 texture, 566 texture,
503 0); 567 0);
504 int bytes_per_pixel = 4; 568 int bytes_per_pixel = 4;
505 switch (color_type) { 569 switch (out_color_type) {
506 case kN32_SkColorType: 570 case kN32_SkColorType:
507 // Do nothing params already set. 571 // Do nothing params already set.
508 break; 572 break;
509 case kRGB_565_SkColorType: 573 case kRGB_565_SkColorType:
510 bytes_per_pixel = 2; 574 bytes_per_pixel = 2;
511 break; 575 break;
576 case kAlpha_8_SkColorType:
577 bytes_per_pixel = 1;
578 break;
512 default: 579 default:
513 NOTREACHED(); 580 NOTREACHED();
514 break; 581 break;
515 } 582 }
516 ReadbackAsync(dst_size, 583 ReadbackAsync(dst_size,
517 dst_size.width() * bytes_per_pixel, 584 dst_size.width() * bytes_per_pixel,
518 dst_size.width() * bytes_per_pixel, 585 dst_size.width() * bytes_per_pixel,
519 out, 586 out,
520 color_type, 587 out_color_type,
521 kSwizzleNone, 588 kSwizzleNone,
522 callback); 589 callback);
523 gl_->DeleteTextures(1, &texture); 590 gl_->DeleteTextures(1, &texture);
524 } 591 }
525 592
526 void GLHelper::CopyTextureToImpl::ReadbackTextureSync( 593 void GLHelper::CopyTextureToImpl::ReadbackTextureSync(
527 GLuint texture, 594 GLuint texture,
528 const gfx::Rect& src_rect, 595 const gfx::Rect& src_rect,
529 unsigned char* out, 596 unsigned char* out,
530 SkColorType color_type) { 597 SkColorType color_type) {
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 readback_support_(new GLHelperReadbackSupport(gl)) {} 742 readback_support_(new GLHelperReadbackSupport(gl)) {}
676 743
677 GLHelper::~GLHelper() {} 744 GLHelper::~GLHelper() {}
678 745
679 void GLHelper::CropScaleReadbackAndCleanTexture( 746 void GLHelper::CropScaleReadbackAndCleanTexture(
680 GLuint src_texture, 747 GLuint src_texture,
681 const gfx::Size& src_size, 748 const gfx::Size& src_size,
682 const gfx::Rect& src_subrect, 749 const gfx::Rect& src_subrect,
683 const gfx::Size& dst_size, 750 const gfx::Size& dst_size,
684 unsigned char* out, 751 unsigned char* out,
685 const SkColorType color_type, 752 const SkColorType out_color_type,
686 const base::Callback<void(bool)>& callback, 753 const base::Callback<void(bool)>& callback,
687 GLHelper::ScalerQuality quality) { 754 GLHelper::ScalerQuality quality) {
688 InitCopyTextToImpl(); 755 InitCopyTextToImpl();
689 copy_texture_to_impl_->CropScaleReadbackAndCleanTexture( 756 copy_texture_to_impl_->CropScaleReadbackAndCleanTexture(src_texture,
690 src_texture, 757 src_size,
691 src_size, 758 src_subrect,
692 src_subrect, 759 dst_size,
693 dst_size, 760 out,
694 out, 761 out_color_type,
695 color_type, 762 callback,
696 callback, 763 quality);
697 quality);
698 } 764 }
699 765
700 void GLHelper::CropScaleReadbackAndCleanMailbox( 766 void GLHelper::CropScaleReadbackAndCleanMailbox(
701 const gpu::Mailbox& src_mailbox, 767 const gpu::Mailbox& src_mailbox,
702 uint32 sync_point, 768 uint32 sync_point,
703 const gfx::Size& src_size, 769 const gfx::Size& src_size,
704 const gfx::Rect& src_subrect, 770 const gfx::Rect& src_subrect,
705 const gfx::Size& dst_size, 771 const gfx::Size& dst_size,
706 unsigned char* out, 772 unsigned char* out,
707 const SkColorType color_type, 773 const SkColorType out_color_type,
708 const base::Callback<void(bool)>& callback, 774 const base::Callback<void(bool)>& callback,
709 GLHelper::ScalerQuality quality) { 775 GLHelper::ScalerQuality quality) {
710 GLuint mailbox_texture = ConsumeMailboxToTexture(src_mailbox, sync_point); 776 GLuint mailbox_texture = ConsumeMailboxToTexture(src_mailbox, sync_point);
711 CropScaleReadbackAndCleanTexture( 777 CropScaleReadbackAndCleanTexture(
712 mailbox_texture, src_size, src_subrect, dst_size, out, 778 mailbox_texture, src_size, src_subrect, dst_size, out,
713 color_type, 779 out_color_type,
714 callback, 780 callback,
715 quality); 781 quality);
716 gl_->DeleteTextures(1, &mailbox_texture); 782 gl_->DeleteTextures(1, &mailbox_texture);
717 } 783 }
718 784
719 void GLHelper::ReadbackTextureSync(GLuint texture, 785 void GLHelper::ReadbackTextureSync(GLuint texture,
720 const gfx::Rect& src_rect, 786 const gfx::Rect& src_rect,
721 unsigned char* out, 787 unsigned char* out,
722 SkColorType format) { 788 SkColorType format) {
723 InitCopyTextToImpl(); 789 InitCopyTextToImpl();
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 swizzle, 987 swizzle,
922 callback); 988 callback);
923 } 989 }
924 990
925 const float GLHelper::CopyTextureToImpl::kRGBtoYColorWeights[] = { 991 const float GLHelper::CopyTextureToImpl::kRGBtoYColorWeights[] = {
926 0.257f, 0.504f, 0.098f, 0.0625f}; 992 0.257f, 0.504f, 0.098f, 0.0625f};
927 const float GLHelper::CopyTextureToImpl::kRGBtoUColorWeights[] = { 993 const float GLHelper::CopyTextureToImpl::kRGBtoUColorWeights[] = {
928 -0.148f, -0.291f, 0.439f, 0.5f}; 994 -0.148f, -0.291f, 0.439f, 0.5f};
929 const float GLHelper::CopyTextureToImpl::kRGBtoVColorWeights[] = { 995 const float GLHelper::CopyTextureToImpl::kRGBtoVColorWeights[] = {
930 0.439f, -0.368f, -0.071f, 0.5f}; 996 0.439f, -0.368f, -0.071f, 0.5f};
997 const float GLHelper::CopyTextureToImpl::kRGBtoGrayscaleColorWeights[] = {
998 0.213f, 0.715f, 0.072f, 0.0f};
931 999
932 // YUV readback constructors. Initiates the main scaler pipeline and 1000 // YUV readback constructors. Initiates the main scaler pipeline and
933 // one planar scaler for each of the Y, U and V planes. 1001 // one planar scaler for each of the Y, U and V planes.
934 GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUVImpl( 1002 GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUVImpl(
935 GLES2Interface* gl, 1003 GLES2Interface* gl,
936 CopyTextureToImpl* copy_impl, 1004 CopyTextureToImpl* copy_impl,
937 GLHelperScaling* scaler_impl, 1005 GLHelperScaling* scaler_impl,
938 GLHelper::ScalerQuality quality, 1006 GLHelper::ScalerQuality quality,
939 const gfx::Size& src_size, 1007 const gfx::Size& src_size,
940 const gfx::Rect& src_subrect, 1008 const gfx::Rect& src_subrect,
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 return copy_texture_to_impl_->CreateReadbackPipelineYUV(quality, 1321 return copy_texture_to_impl_->CreateReadbackPipelineYUV(quality,
1254 src_size, 1322 src_size,
1255 src_subrect, 1323 src_subrect,
1256 dst_size, 1324 dst_size,
1257 dst_subrect, 1325 dst_subrect,
1258 flip_vertically, 1326 flip_vertically,
1259 use_mrt); 1327 use_mrt);
1260 } 1328 }
1261 1329
1262 } // namespace content 1330 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/client/gl_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698