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

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

Issue 364193004: Reopened: Caching the result of readPixelsSupported (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix bug Created 6 years, 2 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 | « src/gpu/gl/GrGLCaps.cpp ('k') | tests/THashCache.cpp » ('j') | 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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 void GrGpuGL::contextAbandoned() { 171 void GrGpuGL::contextAbandoned() {
172 INHERITED::contextAbandoned(); 172 INHERITED::contextAbandoned();
173 fProgramCache->abandon(); 173 fProgramCache->abandon();
174 fHWProgramID = 0; 174 fHWProgramID = 0;
175 if (this->glCaps().pathRenderingSupport()) { 175 if (this->glCaps().pathRenderingSupport()) {
176 this->glPathRendering()->abandonGpuResources(); 176 this->glPathRendering()->abandonGpuResources();
177 } 177 }
178 } 178 }
179 179
180 /////////////////////////////////////////////////////////////////////////////// 180 ///////////////////////////////////////////////////////////////////////////////
181
182
183 GrPixelConfig GrGpuGL::preferredReadPixelsConfig(GrPixelConfig readConfig, 181 GrPixelConfig GrGpuGL::preferredReadPixelsConfig(GrPixelConfig readConfig,
184 GrPixelConfig surfaceConfig) co nst { 182 GrPixelConfig surfaceConfig) co nst {
185 if (GR_GL_RGBA_8888_PIXEL_OPS_SLOW && kRGBA_8888_GrPixelConfig == readConfig ) { 183 if (GR_GL_RGBA_8888_PIXEL_OPS_SLOW && kRGBA_8888_GrPixelConfig == readConfig ) {
186 return kBGRA_8888_GrPixelConfig; 184 return kBGRA_8888_GrPixelConfig;
187 } else if (this->glContext().isMesa() && 185 } else if (this->glContext().isMesa() &&
188 GrBytesPerPixel(readConfig) == 4 && 186 GrBytesPerPixel(readConfig) == 4 &&
189 GrPixelConfigSwapRAndB(readConfig) == surfaceConfig) { 187 GrPixelConfigSwapRAndB(readConfig) == surfaceConfig) {
190 // Mesa 3D takes a slow path on when reading back BGRA from an RGBA sur face and vice-versa. 188 // Mesa 3D takes a slow path on when reading back BGRA from an RGBA sur face and vice-versa.
191 // Perhaps this should be guarded by some compiletime or runtime check. 189 // Perhaps this should be guarded by some compiletime or runtime check.
192 return surfaceConfig; 190 return surfaceConfig;
193 } else if (readConfig == kBGRA_8888_GrPixelConfig && 191 } else if (readConfig == kBGRA_8888_GrPixelConfig
194 !this->glCaps().readPixelsSupported(this->glInterface(), 192 && !this->glCaps().readPixelsSupported(
195 GR_GL_BGRA, GR_GL_UNSIGNED_BY TE)) { 193 this->glInterface(),
194 GR_GL_BGRA,
195 GR_GL_UNSIGNED_BYTE,
196 surfaceConfig
197 )) {
196 return kRGBA_8888_GrPixelConfig; 198 return kRGBA_8888_GrPixelConfig;
197 } else { 199 } else {
198 return readConfig; 200 return readConfig;
199 } 201 }
200 } 202 }
201 203
202 GrPixelConfig GrGpuGL::preferredWritePixelsConfig(GrPixelConfig writeConfig, 204 GrPixelConfig GrGpuGL::preferredWritePixelsConfig(GrPixelConfig writeConfig,
203 GrPixelConfig surfaceConfig) c onst { 205 GrPixelConfig surfaceConfig) c onst {
204 if (GR_GL_RGBA_8888_PIXEL_OPS_SLOW && kRGBA_8888_GrPixelConfig == writeConfi g) { 206 if (GR_GL_RGBA_8888_PIXEL_OPS_SLOW && kRGBA_8888_GrPixelConfig == writeConfi g) {
205 return kBGRA_8888_GrPixelConfig; 207 return kBGRA_8888_GrPixelConfig;
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 SkASSERT(this->glCaps().unpackRowLengthSupport()); 702 SkASSERT(this->glCaps().unpackRowLengthSupport());
701 GL_CALL(PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0)); 703 GL_CALL(PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0));
702 } 704 }
703 if (glFlipY) { 705 if (glFlipY) {
704 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_FALSE)); 706 GL_CALL(PixelStorei(GR_GL_UNPACK_FLIP_Y, GR_GL_FALSE));
705 } 707 }
706 return succeeded; 708 return succeeded;
707 } 709 }
708 710
709 // TODO: This function is using a lot of wonky semantics like, if width == -1 711 // TODO: This function is using a lot of wonky semantics like, if width == -1
710 // then set width = desc.fWdith ... blah. A better way to do it might be to 712 // then set width = desc.fWdith ... blah. A better way to do it might be to
711 // create a CompressedTexData struct that takes a desc/ptr and figures out 713 // create a CompressedTexData struct that takes a desc/ptr and figures out
712 // the proper upload semantics. Then users can construct this function how they 714 // the proper upload semantics. Then users can construct this function how they
713 // see fit if they want to go against the "standard" way to do it. 715 // see fit if they want to go against the "standard" way to do it.
714 bool GrGpuGL::uploadCompressedTexData(const GrGLTexture::Desc& desc, 716 bool GrGpuGL::uploadCompressedTexData(const GrGLTexture::Desc& desc,
715 const void* data, 717 const void* data,
716 bool isNewTexture, 718 bool isNewTexture,
717 int left, int top, int width, int height) { 719 int left, int top, int width, int height) {
718 SkASSERT(data || isNewTexture); 720 SkASSERT(data || isNewTexture);
719 721
720 // No support for software flip y, yet... 722 // No support for software flip y, yet...
(...skipping 1880 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 this->setVertexArrayID(gpu, 0); 2603 this->setVertexArrayID(gpu, 0);
2602 } 2604 }
2603 int attrCount = gpu->glCaps().maxVertexAttributes(); 2605 int attrCount = gpu->glCaps().maxVertexAttributes();
2604 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2606 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2605 fDefaultVertexArrayAttribState.resize(attrCount); 2607 fDefaultVertexArrayAttribState.resize(attrCount);
2606 } 2608 }
2607 attribState = &fDefaultVertexArrayAttribState; 2609 attribState = &fDefaultVertexArrayAttribState;
2608 } 2610 }
2609 return attribState; 2611 return attribState;
2610 } 2612 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCaps.cpp ('k') | tests/THashCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698