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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 glslCaps->fGeometryShaderSupport = ctxInfo.version() >= GR_GL_VER(3, 2)
&& | 303 glslCaps->fGeometryShaderSupport = ctxInfo.version() >= GR_GL_VER(3, 2)
&& |
304 ctxInfo.glslGeneration() >= k150_GrGLSLGeneration; | 304 ctxInfo.glslGeneration() >= k150_GrGLSLGeneration; |
305 } | 305 } |
306 else { | 306 else { |
307 glslCaps->fDualSourceBlendingSupport = ctxInfo.hasExtension("GL_EXT_blen
d_func_extended"); | 307 glslCaps->fDualSourceBlendingSupport = ctxInfo.hasExtension("GL_EXT_blen
d_func_extended"); |
308 | 308 |
309 glslCaps->fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0
) || | 309 glslCaps->fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0
) || |
310 ctxInfo.hasExtension("GL_OES_standard_derivatives"); | 310 ctxInfo.hasExtension("GL_OES_standard_derivatives"); |
311 } | 311 } |
312 | 312 |
313 // We need dual source blending and the ability to disable multisample in or
der to support mixed | |
314 // samples in every corner case. | |
315 if (fMultisampleDisableSupport && glslCaps->fDualSourceBlendingSupport) { | |
316 // We understand "mixed samples" to mean the collective capability of 3
different extensions | |
317 glslCaps->fMixedSamplesSupport = | |
318 ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") && | |
319 ctxInfo.hasExtension("GL_NV_sample_mask_override_coverage") && | |
320 ctxInfo.hasExtension("GL_EXT_raster_multisample"); | |
321 } | |
322 // Workaround NVIDIA bug related to glInvalidateFramebuffer and mixed sample
s. | |
323 if (kNVIDIA_GrGLDriver == ctxInfo.driver() && fShaderCaps->mixedSamplesSuppo
rt()) { | |
324 fDiscardRenderTargetSupport = false; | |
325 fInvalidateFBType = kNone_InvalidateFBType; | |
326 } | |
327 | |
328 if (kGL_GrGLStandard == standard) { | 313 if (kGL_GrGLStandard == standard) { |
329 glslCaps->fProgrammableSampleLocationsSupport = | 314 glslCaps->fProgrammableSampleLocationsSupport = |
330 ctxInfo.version() >= GR_GL_VER(4, 3) && | 315 ctxInfo.version() >= GR_GL_VER(4, 3) && |
331 (ctxInfo.hasExtension("GL_ARB_sample_locations") || | 316 (ctxInfo.hasExtension("GL_ARB_sample_locations") || |
332 ctxInfo.hasExtension("GL_NV_sample_locations")); | 317 ctxInfo.hasExtension("GL_NV_sample_locations")); |
333 } else { | 318 } else { |
334 glslCaps->fProgrammableSampleLocationsSupport = | 319 glslCaps->fProgrammableSampleLocationsSupport = |
335 ctxInfo.version() >= GR_GL_VER(3, 1) && | 320 ctxInfo.version() >= GR_GL_VER(3, 1) && |
336 ctxInfo.hasExtension("GL_NV_sample_locations"); | 321 ctxInfo.hasExtension("GL_NV_sample_locations"); |
337 } | 322 } |
338 | 323 |
339 /************************************************************************** | 324 /************************************************************************** |
340 * GrCaps fields | 325 * GrCaps fields |
341 **************************************************************************/ | 326 **************************************************************************/ |
342 | 327 |
343 // fPathRenderingSupport and fMixedSampleSupport must be set before calling
initFSAASupport. | 328 // We need dual source blending and the ability to disable multisample in or
der to support mixed |
344 // Both of these are set in the GrShaderCaps. | 329 // samples in every corner case. |
| 330 if (fMultisampleDisableSupport && glslCaps->dualSourceBlendingSupport()) { |
| 331 fMixedSamplesSupport = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_sam
ples"); |
| 332 // Workaround NVIDIA bug related to glInvalidateFramebuffer and mixed sa
mples. |
| 333 if (fMixedSamplesSupport && kNVIDIA_GrGLDriver == ctxInfo.driver()) { |
| 334 fDiscardRenderTargetSupport = false; |
| 335 fInvalidateFBType = kNone_InvalidateFBType; |
| 336 } |
| 337 } |
| 338 |
| 339 // fPathRenderingSupport and fMixedSamplesSupport must be set before calling
initFSAASupport. |
345 this->initFSAASupport(ctxInfo, gli); | 340 this->initFSAASupport(ctxInfo, gli); |
346 this->initBlendEqationSupport(ctxInfo); | 341 this->initBlendEqationSupport(ctxInfo); |
347 this->initStencilFormats(ctxInfo); | 342 this->initStencilFormats(ctxInfo); |
348 | 343 |
349 if (kGL_GrGLStandard == standard) { | 344 if (kGL_GrGLStandard == standard) { |
350 // we could also look for GL_ATI_separate_stencil extension or | 345 // we could also look for GL_ATI_separate_stencil extension or |
351 // GL_EXT_stencil_two_side but they use different function signatures | 346 // GL_EXT_stencil_two_side but they use different function signatures |
352 // than GL2.0+ (and than each other). | 347 // than GL2.0+ (and than each other). |
353 fTwoSidedStencilSupport = (ctxInfo.version() >= GR_GL_VER(2,0)); | 348 fTwoSidedStencilSupport = (ctxInfo.version() >= GR_GL_VER(2,0)); |
354 // supported on GL 1.4 and higher or by extension | 349 // supported on GL 1.4 and higher or by extension |
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa
ce* gli) { | 971 void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa
ce* gli) { |
977 | 972 |
978 fMSFBOType = kNone_MSFBOType; | 973 fMSFBOType = kNone_MSFBOType; |
979 if (kGL_GrGLStandard != ctxInfo.standard()) { | 974 if (kGL_GrGLStandard != ctxInfo.standard()) { |
980 // We prefer the EXT/IMG extension over ES3 MSAA because we've observed | 975 // We prefer the EXT/IMG extension over ES3 MSAA because we've observed |
981 // ES3 driver bugs on at least one device with a tiled GPU (N10). | 976 // ES3 driver bugs on at least one device with a tiled GPU (N10). |
982 if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) { | 977 if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) { |
983 fMSFBOType = kES_EXT_MsToTexture_MSFBOType; | 978 fMSFBOType = kES_EXT_MsToTexture_MSFBOType; |
984 } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")
) { | 979 } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")
) { |
985 fMSFBOType = kES_IMG_MsToTexture_MSFBOType; | 980 fMSFBOType = kES_IMG_MsToTexture_MSFBOType; |
986 } else if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRender
ingSupport()) { | 981 } else if (fMixedSamplesSupport && fShaderCaps->pathRenderingSupport())
{ |
987 fMSFBOType = kMixedSamples_MSFBOType; | 982 fMSFBOType = kMixedSamples_MSFBOType; |
988 } else if (ctxInfo.version() >= GR_GL_VER(3,0)) { | 983 } else if (ctxInfo.version() >= GR_GL_VER(3,0)) { |
989 fMSFBOType = GrGLCaps::kES_3_0_MSFBOType; | 984 fMSFBOType = GrGLCaps::kES_3_0_MSFBOType; |
990 } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample"))
{ | 985 } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample"))
{ |
991 // chrome's extension is equivalent to the EXT msaa | 986 // chrome's extension is equivalent to the EXT msaa |
992 // and fbo_blit extensions. | 987 // and fbo_blit extensions. |
993 fMSFBOType = kDesktop_EXT_MSFBOType; | 988 fMSFBOType = kDesktop_EXT_MSFBOType; |
994 } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { | 989 } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { |
995 fMSFBOType = kES_Apple_MSFBOType; | 990 fMSFBOType = kES_Apple_MSFBOType; |
996 } | 991 } |
997 } else { | 992 } else { |
998 if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRenderingSupp
ort()) { | 993 if (fMixedSamplesSupport && fShaderCaps->pathRenderingSupport()) { |
999 fMSFBOType = kMixedSamples_MSFBOType; | 994 fMSFBOType = kMixedSamples_MSFBOType; |
1000 } else if ((ctxInfo.version() >= GR_GL_VER(3,0)) || | 995 } else if ((ctxInfo.version() >= GR_GL_VER(3,0)) || |
1001 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { | 996 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { |
1002 fMSFBOType = GrGLCaps::kDesktop_ARB_MSFBOType; | 997 fMSFBOType = GrGLCaps::kDesktop_ARB_MSFBOType; |
1003 } else if (ctxInfo.hasExtension("GL_EXT_framebuffer_multisample") && | 998 } else if (ctxInfo.hasExtension("GL_EXT_framebuffer_multisample") && |
1004 ctxInfo.hasExtension("GL_EXT_framebuffer_blit")) { | 999 ctxInfo.hasExtension("GL_EXT_framebuffer_blit")) { |
1005 fMSFBOType = GrGLCaps::kDesktop_EXT_MSFBOType; | 1000 fMSFBOType = GrGLCaps::kDesktop_EXT_MSFBOType; |
1006 } | 1001 } |
1007 } | 1002 } |
1008 } | 1003 } |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1316 glslCaps->fConfigSwizzle[kR11_EAC_GrPixelConfig] = "rrrr"; | 1311 glslCaps->fConfigSwizzle[kR11_EAC_GrPixelConfig] = "rrrr"; |
1317 glslCaps->fConfigSwizzle[kASTC_12x12_GrPixelConfig] = "rgba"; | 1312 glslCaps->fConfigSwizzle[kASTC_12x12_GrPixelConfig] = "rgba"; |
1318 glslCaps->fConfigSwizzle[kRGBA_float_GrPixelConfig] = "rgba"; | 1313 glslCaps->fConfigSwizzle[kRGBA_float_GrPixelConfig] = "rgba"; |
1319 glslCaps->fConfigSwizzle[kRGBA_half_GrPixelConfig] = "rgba"; | 1314 glslCaps->fConfigSwizzle[kRGBA_half_GrPixelConfig] = "rgba"; |
1320 | 1315 |
1321 } | 1316 } |
1322 | 1317 |
1323 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} | 1318 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} |
1324 | 1319 |
1325 | 1320 |
OLD | NEW |