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 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 fTextureBarrierSupport = ctxInfo.hasExtension("GL_NV_texture_barrier"); | 110 fTextureBarrierSupport = ctxInfo.hasExtension("GL_NV_texture_barrier"); |
111 } | 111 } |
112 | 112 |
113 if (kGL_GrGLStandard == standard) { | 113 if (kGL_GrGLStandard == standard) { |
114 fSampleLocationsSupport = version >= GR_GL_VER(3,2) || | 114 fSampleLocationsSupport = version >= GR_GL_VER(3,2) || |
115 ctxInfo.hasExtension("GL_ARB_texture_multisamp
le"); | 115 ctxInfo.hasExtension("GL_ARB_texture_multisamp
le"); |
116 } else { | 116 } else { |
117 fSampleLocationsSupport = version >= GR_GL_VER(3,1); | 117 fSampleLocationsSupport = version >= GR_GL_VER(3,1); |
118 } | 118 } |
119 | 119 |
120 // ARB_texture_rg is part of OpenGL 3.0, but mesa doesn't support GL_RED | 120 // ARB_texture_rg is part of OpenGL 3.0, but mesa doesn't support GL_RED |
121 // and GL_RG on FBO textures. | 121 // and GL_RG on FBO textures. |
122 if (kMesa_GrGLDriver != ctxInfo.driver()) { | 122 if (kMesa_GrGLDriver != ctxInfo.driver()) { |
123 if (kGL_GrGLStandard == standard) { | 123 if (kGL_GrGLStandard == standard) { |
124 fTextureRedSupport = version >= GR_GL_VER(3,0) || | 124 fTextureRedSupport = version >= GR_GL_VER(3,0) || |
125 ctxInfo.hasExtension("GL_ARB_texture_rg"); | 125 ctxInfo.hasExtension("GL_ARB_texture_rg"); |
126 } else { | 126 } else { |
127 fTextureRedSupport = version >= GR_GL_VER(3,0) || | 127 fTextureRedSupport = version >= GR_GL_VER(3,0) || |
128 ctxInfo.hasExtension("GL_EXT_texture_rg"); | 128 ctxInfo.hasExtension("GL_EXT_texture_rg"); |
129 } | 129 } |
130 } | 130 } |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 } else if (kGLES_GrGLStandard == standard) { | 238 } else if (kGLES_GrGLStandard == standard) { |
239 if (version >= GR_GL_VER(3,0)) { | 239 if (version >= GR_GL_VER(3,0)) { |
240 fMipMapLevelAndLodControlSupport = true; | 240 fMipMapLevelAndLodControlSupport = true; |
241 } | 241 } |
242 } | 242 } |
243 | 243 |
244 #ifdef SK_BUILD_FOR_WIN | 244 #ifdef SK_BUILD_FOR_WIN |
245 // We're assuming that on Windows Chromium we're using ANGLE. | 245 // We're assuming that on Windows Chromium we're using ANGLE. |
246 bool isANGLE = kANGLE_GrGLDriver == ctxInfo.driver() || | 246 bool isANGLE = kANGLE_GrGLDriver == ctxInfo.driver() || |
247 kChromium_GrGLDriver == ctxInfo.driver(); | 247 kChromium_GrGLDriver == ctxInfo.driver(); |
248 // Angle has slow read/write pixel paths for 32bit RGBA (but fast for BGRA).
| 248 // Angle has slow read/write pixel paths for 32bit RGBA (but fast for BGRA). |
249 fRGBA8888PixelsOpsAreSlow = isANGLE; | 249 fRGBA8888PixelsOpsAreSlow = isANGLE; |
250 // On DX9 ANGLE reading a partial FBO is slow. TODO: Check whether this is s
till true and | 250 // On DX9 ANGLE reading a partial FBO is slow. TODO: Check whether this is s
till true and |
251 // check DX11 ANGLE. | 251 // check DX11 ANGLE. |
252 fPartialFBOReadIsSlow = isANGLE; | 252 fPartialFBOReadIsSlow = isANGLE; |
253 #endif | 253 #endif |
254 | 254 |
255 bool isMESA = kMesa_GrGLDriver == ctxInfo.driver(); | 255 bool isMESA = kMesa_GrGLDriver == ctxInfo.driver(); |
256 bool isMAC = false; | 256 bool isMAC = false; |
257 #ifdef SK_BUILD_FOR_MAC | 257 #ifdef SK_BUILD_FOR_MAC |
258 isMAC = true; | 258 isMAC = true; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 | 293 |
294 glslCaps->fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0
) || | 294 glslCaps->fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0
) || |
295 ctxInfo.hasExtension("GL_OES_standard_derivatives"); | 295 ctxInfo.hasExtension("GL_OES_standard_derivatives"); |
296 | 296 |
297 glslCaps->fIntegerSupport = ctxInfo.version() >= GR_GL_VER(3, 0) && | 297 glslCaps->fIntegerSupport = ctxInfo.version() >= GR_GL_VER(3, 0) && |
298 ctxInfo.glslGeneration() >= k330_GrGLSLGeneration; // We use this va
lue for GLSL ES 3.0. | 298 ctxInfo.glslGeneration() >= k330_GrGLSLGeneration; // We use this va
lue for GLSL ES 3.0. |
299 } | 299 } |
300 | 300 |
301 if (ctxInfo.hasExtension("GL_EXT_shader_pixel_local_storage")) { | 301 if (ctxInfo.hasExtension("GL_EXT_shader_pixel_local_storage")) { |
302 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 | 302 #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 |
303 GR_GL_GetIntegerv(gli, GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT, | 303 GR_GL_GetIntegerv(gli, GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT, |
304 &glslCaps->fPixelLocalStorageSize); | 304 &glslCaps->fPixelLocalStorageSize); |
305 glslCaps->fPLSPathRenderingSupport = glslCaps->fFBFetchSupport; | 305 glslCaps->fPLSPathRenderingSupport = glslCaps->fFBFetchSupport; |
306 } | 306 } |
307 else { | 307 else { |
308 glslCaps->fPixelLocalStorageSize = 0; | 308 glslCaps->fPixelLocalStorageSize = 0; |
309 glslCaps->fPLSPathRenderingSupport = false; | 309 glslCaps->fPLSPathRenderingSupport = false; |
310 } | 310 } |
311 | 311 |
312 // Protect ourselves against tracking huge amounts of texture state. | 312 // Protect ourselves against tracking huge amounts of texture state. |
313 static const uint8_t kMaxSaneSamplers = 32; | 313 static const uint8_t kMaxSaneSamplers = 32; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 fMapBufferType = kMapBufferRange_MapBufferType; | 381 fMapBufferType = kMapBufferRange_MapBufferType; |
382 } else if (ctxInfo.hasExtension("GL_OES_mapbuffer")) { | 382 } else if (ctxInfo.hasExtension("GL_OES_mapbuffer")) { |
383 fMapBufferFlags = kCanMap_MapFlag; | 383 fMapBufferFlags = kCanMap_MapFlag; |
384 fMapBufferType = kMapBuffer_MapBufferType; | 384 fMapBufferType = kMapBuffer_MapBufferType; |
385 } | 385 } |
386 } | 386 } |
387 | 387 |
388 if (kGL_GrGLStandard == standard) { | 388 if (kGL_GrGLStandard == standard) { |
389 if (version >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_ARB_pixel_buf
fer_object")) { | 389 if (version >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_ARB_pixel_buf
fer_object")) { |
390 fTransferBufferType = kPBO_TransferBufferType; | 390 fTransferBufferType = kPBO_TransferBufferType; |
391 } | 391 } |
392 } else { | 392 } else { |
393 if (version >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_NV_pixel_buff
er_object")) { | 393 if (version >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_NV_pixel_buff
er_object")) { |
394 fTransferBufferType = kPBO_TransferBufferType; | 394 fTransferBufferType = kPBO_TransferBufferType; |
395 } else if (ctxInfo.hasExtension("GL_CHROMIUM_pixel_transfer_buffer_objec
t")) { | 395 } else if (ctxInfo.hasExtension("GL_CHROMIUM_pixel_transfer_buffer_objec
t")) { |
396 fTransferBufferType = kChromium_TransferBufferType; | 396 fTransferBufferType = kChromium_TransferBufferType; |
397 } | 397 } |
398 } | 398 } |
399 | 399 |
400 // On many GPUs, map memory is very expensive, so we effectively disable it
here by setting the | 400 // On many GPUs, map memory is very expensive, so we effectively disable it
here by setting the |
401 // threshold to the maximum unless the client gives us a hint that map memor
y is cheap. | 401 // threshold to the maximum unless the client gives us a hint that map memor
y is cheap. |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 r.appendf("Draw indirect support: %s\n", (fDrawIndirectSupport ? "YES" : "NO
")); | 1085 r.appendf("Draw indirect support: %s\n", (fDrawIndirectSupport ? "YES" : "NO
")); |
1086 r.appendf("Multi draw indirect support: %s\n", (fMultiDrawIndirectSupport ?
"YES" : "NO")); | 1086 r.appendf("Multi draw indirect support: %s\n", (fMultiDrawIndirectSupport ?
"YES" : "NO")); |
1087 r.appendf("Base instance support: %s\n", (fBaseInstanceSupport ? "YES" : "NO
")); | 1087 r.appendf("Base instance support: %s\n", (fBaseInstanceSupport ? "YES" : "NO
")); |
1088 r.appendf("Use non-VBO for dynamic data: %s\n", | 1088 r.appendf("Use non-VBO for dynamic data: %s\n", |
1089 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); | 1089 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
1090 r.appendf("RGBA 8888 pixel ops are slow: %s\n", (fRGBA8888PixelsOpsAreSlow ?
"YES" : "NO")); | 1090 r.appendf("RGBA 8888 pixel ops are slow: %s\n", (fRGBA8888PixelsOpsAreSlow ?
"YES" : "NO")); |
1091 r.appendf("Partial FBO read is slow: %s\n", (fPartialFBOReadIsSlow ? "YES" :
"NO")); | 1091 r.appendf("Partial FBO read is slow: %s\n", (fPartialFBOReadIsSlow ? "YES" :
"NO")); |
1092 r.appendf("Bind uniform location support: %s\n", (fBindUniformLocationSuppor
t ? "YES" : "NO")); | 1092 r.appendf("Bind uniform location support: %s\n", (fBindUniformLocationSuppor
t ? "YES" : "NO")); |
1093 r.appendf("Rectangle texture support: %s\n", (fRectangleTextureSupport? "YES
" : "NO")); | 1093 r.appendf("Rectangle texture support: %s\n", (fRectangleTextureSupport? "YES
" : "NO")); |
1094 r.appendf("Texture swizzle support: %s\n", (fTextureSwizzleSupport ? "YES" :
"NO")); | 1094 r.appendf("Texture swizzle support: %s\n", (fTextureSwizzleSupport ? "YES" :
"NO")); |
1095 r.appendf("BGRA to RGBA readback conversions are slow: %s\n", | 1095 r.appendf("BGRA to RGBA readback conversions are slow: %s\n", |
1096 (fRGBAToBGRAReadbackConversionsAreSlow ? "YES" : "NO")); | 1096 (fRGBAToBGRAReadbackConversionsAreSlow ? "YES" : "NO")); |
1097 | 1097 |
1098 r.append("Configs\n-------\n"); | 1098 r.append("Configs\n-------\n"); |
1099 for (int i = 0; i < kGrPixelConfigCnt; ++i) { | 1099 for (int i = 0; i < kGrPixelConfigCnt; ++i) { |
1100 r.appendf(" cfg: %d flags: 0x%04x, b_internal: 0x%08x s_internal: 0x%08
x, e_format: " | 1100 r.appendf(" cfg: %d flags: 0x%04x, b_internal: 0x%08x s_internal: 0x%08
x, e_format: " |
1101 "0x%08x, e_format_teximage: 0x%08x, e_type: 0x%08x, i_for_texi
mage: 0x%08x, " | 1101 "0x%08x, e_format_teximage: 0x%08x, e_type: 0x%08x, i_for_texi
mage: 0x%08x, " |
1102 "i_for_renderbuffer: 0x%08x\n", | 1102 "i_for_renderbuffer: 0x%08x\n", |
1103 i, | 1103 i, |
1104 fConfigTable[i].fFlags, | 1104 fConfigTable[i].fFlags, |
1105 fConfigTable[i].fFormats.fBaseInternalFormat, | 1105 fConfigTable[i].fFormats.fBaseInternalFormat, |
(...skipping 28 matching lines...) Expand all Loading... |
1134 case kGeometry_GrShaderType: | 1134 case kGeometry_GrShaderType: |
1135 return GR_GL_GEOMETRY_SHADER; | 1135 return GR_GL_GEOMETRY_SHADER; |
1136 case kFragment_GrShaderType: | 1136 case kFragment_GrShaderType: |
1137 return GR_GL_FRAGMENT_SHADER; | 1137 return GR_GL_FRAGMENT_SHADER; |
1138 } | 1138 } |
1139 SkFAIL("Unknown shader type."); | 1139 SkFAIL("Unknown shader type."); |
1140 return -1; | 1140 return -1; |
1141 } | 1141 } |
1142 | 1142 |
1143 void GrGLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, | 1143 void GrGLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
1144 const GrGLInterface* intf, | 1144 const GrGLInterface* intf, |
1145 GrGLSLCaps* glslCaps) { | 1145 GrGLSLCaps* glslCaps) { |
1146 if (kGLES_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_V
ER(4, 1) || | 1146 if (kGLES_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_V
ER(4, 1) || |
1147 ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { | 1147 ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { |
1148 for (int s = 0; s < kGrShaderTypeCount; ++s) { | 1148 for (int s = 0; s < kGrShaderTypeCount; ++s) { |
1149 if (kGeometry_GrShaderType != s) { | 1149 if (kGeometry_GrShaderType != s) { |
1150 GrShaderType shaderType = static_cast<GrShaderType>(s); | 1150 GrShaderType shaderType = static_cast<GrShaderType>(s); |
1151 GrGLenum glShader = shader_type_to_gl_shader(shaderType); | 1151 GrGLenum glShader = shader_type_to_gl_shader(shaderType); |
1152 GrShaderCaps::PrecisionInfo* first = nullptr; | 1152 GrShaderCaps::PrecisionInfo* first = nullptr; |
1153 glslCaps->fShaderPrecisionVaries = false; | 1153 glslCaps->fShaderPrecisionVaries = false; |
1154 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 1154 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
1155 GrSLPrecision precision = static_cast<GrSLPrecision>(p); | 1155 GrSLPrecision precision = static_cast<GrSLPrecision>(p); |
1156 GrGLenum glPrecision = precision_to_gl_float_type(precision)
; | 1156 GrGLenum glPrecision = precision_to_gl_float_type(precision)
; |
1157 GrGLint range[2]; | 1157 GrGLint range[2]; |
1158 GrGLint bits; | 1158 GrGLint bits; |
1159 GR_GL_GetShaderPrecisionFormat(intf, glShader, glPrecision,
range, &bits); | 1159 GR_GL_GetShaderPrecisionFormat(intf, glShader, glPrecision,
range, &bits); |
1160 if (bits) { | 1160 if (bits) { |
1161 glslCaps->fFloatPrecisions[s][p].fLogRangeLow = range[0]
; | 1161 glslCaps->fFloatPrecisions[s][p].fLogRangeLow = range[0]
; |
1162 glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = range[1
]; | 1162 glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = range[1
]; |
1163 glslCaps->fFloatPrecisions[s][p].fBits = bits; | 1163 glslCaps->fFloatPrecisions[s][p].fBits = bits; |
1164 if (!first) { | 1164 if (!first) { |
1165 first = &glslCaps->fFloatPrecisions[s][p]; | 1165 first = &glslCaps->fFloatPrecisions[s][p]; |
1166 } | 1166 } |
1167 else if (!glslCaps->fShaderPrecisionVaries) { | 1167 else if (!glslCaps->fShaderPrecisionVaries) { |
1168 glslCaps->fShaderPrecisionVaries = | 1168 glslCaps->fShaderPrecisionVaries = |
1169 (*first != glslCaps->fFloat
Precisions[s][p]); | 1169 (*first != glslCaps->fFloat
Precisions[s][p]); |
1170 } | 1170 } |
1171 } | 1171 } |
1172 } | 1172 } |
1173 } | 1173 } |
1174 } | 1174 } |
1175 } | 1175 } |
1176 else { | 1176 else { |
1177 // We're on a desktop GL that doesn't have precision info. Assume they'r
e all 32bit float. | 1177 // We're on a desktop GL that doesn't have precision info. Assume they'r
e all 32bit float. |
1178 glslCaps->fShaderPrecisionVaries = false; | 1178 glslCaps->fShaderPrecisionVaries = false; |
1179 for (int s = 0; s < kGrShaderTypeCount; ++s) { | 1179 for (int s = 0; s < kGrShaderTypeCount; ++s) { |
1180 if (kGeometry_GrShaderType != s) { | 1180 if (kGeometry_GrShaderType != s) { |
1181 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 1181 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
1182 glslCaps->fFloatPrecisions[s][p].fLogRangeLow = 127; | 1182 glslCaps->fFloatPrecisions[s][p].fLogRangeLow = 127; |
1183 glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = 127; | 1183 glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = 127; |
1184 glslCaps->fFloatPrecisions[s][p].fBits = 23; | 1184 glslCaps->fFloatPrecisions[s][p].fBits = 23; |
1185 } | 1185 } |
1186 } | 1186 } |
1187 } | 1187 } |
1188 } | 1188 } |
1189 // GetShaderPrecisionFormat doesn't accept GL_GEOMETRY_SHADER as a shader ty
pe. Assume they're | 1189 // GetShaderPrecisionFormat doesn't accept GL_GEOMETRY_SHADER as a shader ty
pe. Assume they're |
1190 // the same as the vertex shader. Only fragment shaders were ever allowed to
omit support for | 1190 // the same as the vertex shader. Only fragment shaders were ever allowed to
omit support for |
1191 // highp. GS was added after GetShaderPrecisionFormat was added to the list
of features that | 1191 // highp. GS was added after GetShaderPrecisionFormat was added to the list
of features that |
1192 // are recommended against. | 1192 // are recommended against. |
1193 if (glslCaps->fGeometryShaderSupport) { | 1193 if (glslCaps->fGeometryShaderSupport) { |
1194 for (int p = 0; p < kGrSLPrecisionCount; ++p) { | 1194 for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
1195 glslCaps->fFloatPrecisions[kGeometry_GrShaderType][p] = | 1195 glslCaps->fFloatPrecisions[kGeometry_GrShaderType][p] = |
1196 glslCaps->fFloatPrecisions[kVerte
x_GrShaderType][p]; | 1196 glslCaps->fFloatPrecisions[kVerte
x_GrShaderType][p]; |
1197 } | 1197 } |
1198 } | 1198 } |
1199 } | 1199 } |
1200 | 1200 |
1201 bool GrGLCaps::bgraIsInternalFormat() const { | 1201 bool GrGLCaps::bgraIsInternalFormat() const { |
1202 return fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat =
= GR_GL_BGRA; | 1202 return fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat =
= GR_GL_BGRA; |
1203 } | 1203 } |
1204 | 1204 |
1205 bool GrGLCaps::getTexImageFormats(GrPixelConfig surfaceConfig, GrPixelConfig ext
ernalConfig, | 1205 bool GrGLCaps::getTexImageFormats(GrPixelConfig surfaceConfig, GrPixelConfig ext
ernalConfig, |
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1826 // unsupported. (If we have no sRGB support at all, this will get overwr
itten below). | 1826 // unsupported. (If we have no sRGB support at all, this will get overwr
itten below). |
1827 fConfigTable[kSBGRA_8888_GrPixelConfig].fFlags = 0; | 1827 fConfigTable[kSBGRA_8888_GrPixelConfig].fFlags = 0; |
1828 } | 1828 } |
1829 | 1829 |
1830 // If BGRA is supported as an internal format it must always be specified to
glTex[Sub]Image | 1830 // If BGRA is supported as an internal format it must always be specified to
glTex[Sub]Image |
1831 // as a base format. | 1831 // as a base format. |
1832 // GL_EXT_texture_format_BGRA8888: | 1832 // GL_EXT_texture_format_BGRA8888: |
1833 // This extension GL_BGRA as an unsized internal format. However, it is
written against ES | 1833 // This extension GL_BGRA as an unsized internal format. However, it is
written against ES |
1834 // 2.0 and therefore doesn't define a value for GL_BGRA8 as ES 2.0 uses
unsized internal | 1834 // 2.0 and therefore doesn't define a value for GL_BGRA8 as ES 2.0 uses
unsized internal |
1835 // formats. | 1835 // formats. |
1836 // GL_APPLE_texture_format_BGRA8888: | 1836 // GL_APPLE_texture_format_BGRA8888: |
1837 // ES 2.0: the extension makes BGRA an external format but not an intern
al format. | 1837 // ES 2.0: the extension makes BGRA an external format but not an intern
al format. |
1838 // ES 3.0: the extension explicitly states GL_BGRA8 is not a valid inter
nal format for | 1838 // ES 3.0: the extension explicitly states GL_BGRA8 is not a valid inter
nal format for |
1839 // glTexImage (just for glTexStorage). | 1839 // glTexImage (just for glTexStorage). |
1840 if (useSizedTexFormats && this->bgraIsInternalFormat()) { | 1840 if (useSizedTexFormats && this->bgraIsInternalFormat()) { |
1841 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fInternalFormatTexImage
= GR_GL_BGRA; | 1841 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fInternalFormatTexImage
= GR_GL_BGRA; |
1842 } | 1842 } |
1843 | 1843 |
1844 // If we don't have texture swizzle support then the shader generator must i
nsert the | 1844 // If we don't have texture swizzle support then the shader generator must i
nsert the |
1845 // swizzle into shader code. | 1845 // swizzle into shader code. |
1846 if (!this->textureSwizzleSupport()) { | 1846 if (!this->textureSwizzleSupport()) { |
(...skipping 26 matching lines...) Expand all Loading... |
1873 for (int j = 0; j < kExternalFormatUsageCnt; ++j) { | 1873 for (int j = 0; j < kExternalFormatUsageCnt; ++j) { |
1874 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] != | 1874 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] != |
1875 fConfigTable[i].fFormats.fExternalFormat[j]); | 1875 fConfigTable[i].fFormats.fExternalFormat[j]); |
1876 } | 1876 } |
1877 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats
.fExternalType); | 1877 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats
.fExternalType); |
1878 } | 1878 } |
1879 #endif | 1879 #endif |
1880 } | 1880 } |
1881 | 1881 |
1882 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} | 1882 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} |
OLD | NEW |