| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "GrGLCaps.h" | 9 #include "GrGLCaps.h" |
| 10 | 10 |
| 11 #include "GrGLContext.h" | 11 #include "GrGLContext.h" |
| 12 #include "glsl/GrGLSLCaps.h" | 12 #include "glsl/GrGLSLCaps.h" |
| 13 #include "SkTSearch.h" | 13 #include "SkTSearch.h" |
| 14 #include "SkTSort.h" | 14 #include "SkTSort.h" |
| 15 | 15 |
| 16 GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, | 16 GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, |
| 17 const GrGLContextInfo& ctxInfo, | 17 const GrGLContextInfo& ctxInfo, |
| 18 const GrGLInterface* glInterface) : INHERITED(contextOptions)
{ | 18 const GrGLInterface* glInterface) : INHERITED(contextOptions)
{ |
| 19 fVerifiedColorConfigs.reset(); | 19 fVerifiedColorConfigs.reset(); |
| 20 fStencilFormats.reset(); | 20 fStencilFormats.reset(); |
| 21 fStencilVerifiedColorConfigs.reset(); | |
| 22 fMSFBOType = kNone_MSFBOType; | 21 fMSFBOType = kNone_MSFBOType; |
| 23 fInvalidateFBType = kNone_InvalidateFBType; | 22 fInvalidateFBType = kNone_InvalidateFBType; |
| 24 fLATCAlias = kLATC_LATCAlias; | 23 fLATCAlias = kLATC_LATCAlias; |
| 25 fMapBufferType = kNone_MapBufferType; | 24 fMapBufferType = kNone_MapBufferType; |
| 26 fMaxFragmentUniformVectors = 0; | 25 fMaxFragmentUniformVectors = 0; |
| 27 fMaxVertexAttributes = 0; | 26 fMaxVertexAttributes = 0; |
| 28 fMaxFragmentTextureUnits = 0; | 27 fMaxFragmentTextureUnits = 0; |
| 29 fRGBA8RenderbufferSupport = false; | 28 fRGBA8RenderbufferSupport = false; |
| 30 fBGRAIsInternalFormat = false; | 29 fBGRAIsInternalFormat = false; |
| 31 fTextureSwizzleSupport = false; | 30 fTextureSwizzleSupport = false; |
| (...skipping 980 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 fStencilFormats.push_back() = gS8; | 1011 fStencilFormats.push_back() = gS8; |
| 1013 //fStencilFormats.push_back() = gS16; | 1012 //fStencilFormats.push_back() = gS16; |
| 1014 if (ctxInfo.version() >= GR_GL_VER(3,0) || | 1013 if (ctxInfo.version() >= GR_GL_VER(3,0) || |
| 1015 ctxInfo.hasExtension("GL_OES_packed_depth_stencil")) { | 1014 ctxInfo.hasExtension("GL_OES_packed_depth_stencil")) { |
| 1016 fStencilFormats.push_back() = gD24S8; | 1015 fStencilFormats.push_back() = gD24S8; |
| 1017 } | 1016 } |
| 1018 if (ctxInfo.hasExtension("GL_OES_stencil4")) { | 1017 if (ctxInfo.hasExtension("GL_OES_stencil4")) { |
| 1019 fStencilFormats.push_back() = gS4; | 1018 fStencilFormats.push_back() = gS4; |
| 1020 } | 1019 } |
| 1021 } | 1020 } |
| 1022 SkASSERT(0 == fStencilVerifiedColorConfigs.count()); | |
| 1023 fStencilVerifiedColorConfigs.push_back_n(fStencilFormats.count()); | |
| 1024 } | |
| 1025 | |
| 1026 void GrGLCaps::markColorConfigAndStencilFormatAsVerified( | |
| 1027 GrPixelConfig config, | |
| 1028 const GrGLStencilAttachment::Format& format)
{ | |
| 1029 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT | |
| 1030 return; | |
| 1031 #endif | |
| 1032 SkASSERT((unsigned)config < (unsigned)kGrPixelConfigCnt); | |
| 1033 SkASSERT(fStencilFormats.count() == fStencilVerifiedColorConfigs.count()); | |
| 1034 int count = fStencilFormats.count(); | |
| 1035 // we expect a really small number of possible formats so linear search | |
| 1036 // should be OK | |
| 1037 SkASSERT(count < 16); | |
| 1038 for (int i = 0; i < count; ++i) { | |
| 1039 if (format.fInternalFormat == | |
| 1040 fStencilFormats[i].fInternalFormat) { | |
| 1041 fStencilVerifiedColorConfigs[i].markVerified(config); | |
| 1042 return; | |
| 1043 } | |
| 1044 } | |
| 1045 SkFAIL("Why are we seeing a stencil format that " | |
| 1046 "GrGLCaps doesn't know about."); | |
| 1047 } | |
| 1048 | |
| 1049 bool GrGLCaps::isColorConfigAndStencilFormatVerified( | |
| 1050 GrPixelConfig config, | |
| 1051 const GrGLStencilAttachment::Format& format) con
st { | |
| 1052 #if !GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT | |
| 1053 return false; | |
| 1054 #endif | |
| 1055 SkASSERT((unsigned)config < (unsigned)kGrPixelConfigCnt); | |
| 1056 int count = fStencilFormats.count(); | |
| 1057 // we expect a really small number of possible formats so linear search | |
| 1058 // should be OK | |
| 1059 SkASSERT(count < 16); | |
| 1060 for (int i = 0; i < count; ++i) { | |
| 1061 if (format.fInternalFormat == | |
| 1062 fStencilFormats[i].fInternalFormat) { | |
| 1063 return fStencilVerifiedColorConfigs[i].isVerified(config); | |
| 1064 } | |
| 1065 } | |
| 1066 SkFAIL("Why are we seeing a stencil format that " | |
| 1067 "GLCaps doesn't know about."); | |
| 1068 return false; | |
| 1069 } | 1021 } |
| 1070 | 1022 |
| 1071 SkString GrGLCaps::dump() const { | 1023 SkString GrGLCaps::dump() const { |
| 1072 | 1024 |
| 1073 SkString r = INHERITED::dump(); | 1025 SkString r = INHERITED::dump(); |
| 1074 | 1026 |
| 1075 r.appendf("--- GL-Specific ---\n"); | 1027 r.appendf("--- GL-Specific ---\n"); |
| 1076 for (int i = 0; i < fStencilFormats.count(); ++i) { | 1028 for (int i = 0; i < fStencilFormats.count(); ++i) { |
| 1077 r.appendf("Stencil Format %d, stencil bits: %02d, total bits: %02d\n", | 1029 r.appendf("Stencil Format %d, stencil bits: %02d, total bits: %02d\n", |
| 1078 i, | 1030 i, |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1237 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 1189 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
| 1238 glslCaps->fFloatPrecisions[kGeometry_GrShaderType][p] = | 1190 glslCaps->fFloatPrecisions[kGeometry_GrShaderType][p] = |
| 1239 glslCaps->fFloatPrecisions[kVerte
x_GrShaderType][p]; | 1191 glslCaps->fFloatPrecisions[kVerte
x_GrShaderType][p]; |
| 1240 } | 1192 } |
| 1241 } | 1193 } |
| 1242 } | 1194 } |
| 1243 | 1195 |
| 1244 | 1196 |
| 1245 | 1197 |
| 1246 | 1198 |
| OLD | NEW |