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

Side by Side Diff: src/gpu/gl/GrGpuGL.cpp

Issue 580863004: Adding 3D lut color filter (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: New version Created 6 years, 3 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
« src/gpu/gl/GrGLCaps.cpp ('K') | « src/gpu/gl/GrGLSL.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 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 #include "GrGpuGL.h" 9 #include "GrGpuGL.h"
10 #include "GrGLStencilBuffer.h" 10 #include "GrGLStencilBuffer.h"
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 // At least some versions of the desktop ES3 drivers for NVIDIA won't accept GL_RED in 585 // At least some versions of the desktop ES3 drivers for NVIDIA won't accept GL_RED in
586 // glTexImage2D for the internal format but will accept GL_R8. 586 // glTexImage2D for the internal format but will accept GL_R8.
587 if (!useSizedFormat && kNVIDIA_GrGLVendor == this->glContext().vendor() && 587 if (!useSizedFormat && kNVIDIA_GrGLVendor == this->glContext().vendor() &&
588 kGLES_GrGLStandard == this->glStandard() && this->glVersion() >= GR_GL_V ER(3, 0)) { 588 kGLES_GrGLStandard == this->glStandard() && this->glVersion() >= GR_GL_V ER(3, 0)) {
589 useSizedFormat = true; 589 useSizedFormat = true;
590 } 590 }
591 if (!this->configToGLFormats(dataConfig, useSizedFormat, &internalFormat, 591 if (!this->configToGLFormats(dataConfig, useSizedFormat, &internalFormat,
592 &externalFormat, &externalType)) { 592 &externalFormat, &externalType)) {
593 return false; 593 return false;
594 } 594 }
595
596 bool is3DTexture = SkToBool(desc.fFlags & k3DTexture_GrTextureFlagBit);
597 if (is3DTexture && !this->glCaps().has3DTexImageSupport()) {
598 return false;
599 }
595 600
596 /* 601 /*
597 * check whether to allocate a temporary buffer for flipping y or 602 * check whether to allocate a temporary buffer for flipping y or
598 * because our srcData has extra bytes past each row. If so, we need 603 * because our srcData has extra bytes past each row. If so, we need
599 * to trim those off here, since GL ES may not let us specify 604 * to trim those off here, since GL ES may not let us specify
600 * GL_UNPACK_ROW_LENGTH. 605 * GL_UNPACK_ROW_LENGTH.
601 */ 606 */
602 bool restoreGLRowLength = false; 607 bool restoreGLRowLength = false;
603 bool swFlipY = false; 608 bool swFlipY = false;
604 bool glFlipY = false; 609 bool glFlipY = false;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 0 == left && 0 == top && 655 0 == left && 0 == top &&
651 desc.fWidth == width && desc.fHeight == height) { 656 desc.fWidth == width && desc.fHeight == height) {
652 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); 657 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface());
653 if (useTexStorage) { 658 if (useTexStorage) {
654 // We never resize or change formats of textures. 659 // We never resize or change formats of textures.
655 GL_ALLOC_CALL(this->glInterface(), 660 GL_ALLOC_CALL(this->glInterface(),
656 TexStorage2D(GR_GL_TEXTURE_2D, 661 TexStorage2D(GR_GL_TEXTURE_2D,
657 1, // levels 662 1, // levels
658 internalFormat, 663 internalFormat,
659 desc.fWidth, desc.fHeight)); 664 desc.fWidth, desc.fHeight));
665 } else if (is3DTexture) {
666 GL_ALLOC_CALL(this->glInterface(),
667 TexImage3D(GR_GL_TEXTURE_3D,
668 0, // level
669 internalFormat,
670 desc.fWidth, desc.fHeight,
671 desc.fWidth, // FIXME: width is used as dep th
bsalomon 2014/09/19 13:47:04 Why not just add a depth to fDesc and get rid of t
sugoi1 2014/09/24 19:12:48 Done.
672 0, // border
673 externalFormat, externalType,
674 data));
660 } else { 675 } else {
661 GL_ALLOC_CALL(this->glInterface(), 676 GL_ALLOC_CALL(this->glInterface(),
662 TexImage2D(GR_GL_TEXTURE_2D, 677 TexImage2D(GR_GL_TEXTURE_2D,
663 0, // level 678 0, // level
664 internalFormat, 679 internalFormat,
665 desc.fWidth, desc.fHeight, 680 desc.fWidth, desc.fHeight,
666 0, // border 681 0, // border
667 externalFormat, externalType, 682 externalFormat, externalType,
668 data)); 683 data));
669 } 684 }
670 GrGLenum error = check_alloc_error(desc, this->glInterface()); 685 GrGLenum error = check_alloc_error(desc, this->glInterface());
671 if (error != GR_GL_NO_ERROR) { 686 if (error != GR_GL_NO_ERROR) {
672 succeeded = false; 687 succeeded = false;
673 } else { 688 } else {
674 // if we have data and we used TexStorage to create the texture, we 689 // if we have data and we used TexStorage to create the texture, we
675 // now upload with TexSubImage. 690 // now upload with TexSubImage.
676 if (data && useTexStorage) { 691 if (data && useTexStorage) {
677 GL_CALL(TexSubImage2D(GR_GL_TEXTURE_2D, 692 if (is3DTexture) {
678 0, // level 693 GL_CALL(TexSubImage3D(GR_GL_TEXTURE_3D,
679 left, top, 694 0, // level,
680 width, height, 695 left, top,
681 externalFormat, externalType, 696 left, // FIXME: left used as Z offset
682 data)); 697 desc.fWidth, desc.fHeight,
698 desc.fWidth, // FIXME: width is used a s depth
699 externalFormat, externalType,
700 data));
701 } else {
702 GL_CALL(TexSubImage2D(GR_GL_TEXTURE_2D,
703 0, // level
704 left, top,
705 width, height,
706 externalFormat, externalType,
707 data));
708 }
683 } 709 }
684 } 710 }
685 } else { 711 } else {
686 if (swFlipY || glFlipY) { 712 if (swFlipY || glFlipY) {
687 top = desc.fHeight - (top + height); 713 top = desc.fHeight - (top + height);
688 } 714 }
689 GL_CALL(TexSubImage2D(GR_GL_TEXTURE_2D, 715 if (is3DTexture) {
690 0, // level 716 GL_CALL(TexSubImage3D(GR_GL_TEXTURE_3D,
691 left, top, 717 0, // level,
692 width, height, 718 left, top,
693 externalFormat, externalType, data)); 719 left, // FIXME: left used as Z offset
720 desc.fWidth, desc.fHeight,
721 desc.fWidth, // FIXME: width is used as depth
722 externalFormat, externalType,
723 data));
724 } else {
725 GL_CALL(TexSubImage2D(GR_GL_TEXTURE_2D,
726 0, // level
727 left, top,
728 width, height,
729 externalFormat, externalType, data));
730 }
694 } 731 }
695 732
696 if (restoreGLRowLength) { 733 if (restoreGLRowLength) {
697 SkASSERT(this->glCaps().unpackRowLengthSupport()); 734 SkASSERT(this->glCaps().unpackRowLengthSupport());
698 GL_CALL(PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0)); 735 GL_CALL(PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0));
699 } 736 }
700 if (glFlipY) { 737 if (glFlipY) {
701 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_FALSE)); 738 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_FALSE));
702 } 739 }
703 return succeeded; 740 return succeeded;
(...skipping 30 matching lines...) Expand all
734 SkASSERT(height <= desc.fHeight); 771 SkASSERT(height <= desc.fHeight);
735 } 772 }
736 #endif 773 #endif
737 774
738 // Make sure that the width and height that we pass to OpenGL 775 // Make sure that the width and height that we pass to OpenGL
739 // is a multiple of the block size. 776 // is a multiple of the block size.
740 int dataSize = GrCompressedFormatDataSize(desc.fConfig, width, height); 777 int dataSize = GrCompressedFormatDataSize(desc.fConfig, width, height);
741 778
742 // We only need the internal format for compressed 2D textures. 779 // We only need the internal format for compressed 2D textures.
743 GrGLenum internalFormat = 0; 780 GrGLenum internalFormat = 0;
744 if (!this->configToGLFormats(desc.fConfig, false, &internalFormat, NULL, NUL L)) { 781 if (!this->configToGLFormats(desc.fConfig, false, &internalFormat, NULL, NUL L) ||
782 // Compressed 3D textures not supported
783 SkToBool(desc.fFlags & k3DTexture_GrTextureFlagBit)) {
745 return false; 784 return false;
746 } 785 }
747 786
748 if (isNewTexture) { 787 if (isNewTexture) {
749 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface()); 788 CLEAR_ERROR_BEFORE_ALLOC(this->glInterface());
750 GL_ALLOC_CALL(this->glInterface(), 789 GL_ALLOC_CALL(this->glInterface(),
751 CompressedTexImage2D(GR_GL_TEXTURE_2D, 790 CompressedTexImage2D(GR_GL_TEXTURE_2D,
752 0, // level 791 0, // level
753 internalFormat, 792 internalFormat,
754 width, height, 793 width, height,
(...skipping 1842 matching lines...) Expand 10 before | Expand all | Expand 10 after
2597 this->setVertexArrayID(gpu, 0); 2636 this->setVertexArrayID(gpu, 0);
2598 } 2637 }
2599 int attrCount = gpu->glCaps().maxVertexAttributes(); 2638 int attrCount = gpu->glCaps().maxVertexAttributes();
2600 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2639 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2601 fDefaultVertexArrayAttribState.resize(attrCount); 2640 fDefaultVertexArrayAttribState.resize(attrCount);
2602 } 2641 }
2603 attribState = &fDefaultVertexArrayAttribState; 2642 attribState = &fDefaultVertexArrayAttribState;
2604 } 2643 }
2605 return attribState; 2644 return attribState;
2606 } 2645 }
OLDNEW
« src/gpu/gl/GrGLCaps.cpp ('K') | « src/gpu/gl/GrGLSL.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698