Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 91cf83147cfcb488ad1c334064af79945ff21b3f..eacf6f60847589f35375b66901c4b26855ee34b8 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -39,6 +39,9 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, |
fTwoFormatLimit = false; |
fFragCoordsConventionSupport = false; |
fVertexArrayObjectSupport = false; |
+ fInstancedDrawingSupport = false; |
+ fDirectStateAccessSupport = false; |
+ fDebugSupport = false; |
fES2CompatibilitySupport = false; |
fMultisampleDisableSupport = false; |
fUseNonVBOVertexAndIndexDynamicData = false; |
@@ -89,6 +92,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
} |
} |
+ glslCaps->fBindlessTextureSupport = ctxInfo.hasExtension("GL_NV_bindless_texture"); |
+ |
// Adreno GPUs have a tendency to drop tiles when there is a divide-by-zero in a shader |
glslCaps->fDropsTileOnZeroDivide = kQualcomm_GrGLVendor == ctxInfo.vendor(); |
@@ -230,6 +235,28 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
ctxInfo.hasExtension("GL_OES_vertex_array_object"); |
} |
+ if ((kGL_GrGLStandard == standard && version >= GR_GL_VER(3,2)) || |
+ (kGLES_GrGLStandard == standard && version >= GR_GL_VER(3,0))) { |
+ fInstancedDrawingSupport = true; |
+ } else { |
+ fInstancedDrawingSupport = (ctxInfo.hasExtension("GL_ARB_draw_instanced") || |
+ ctxInfo.hasExtension("GL_EXT_draw_instanced")) && |
+ (ctxInfo.hasExtension("GL_ARB_instanced_arrays") || |
+ ctxInfo.hasExtension("GL_EXT_instanced_arrays")); |
+ } |
+ |
+ if (kGL_GrGLStandard == standard) { |
+ fDirectStateAccessSupport = ctxInfo.hasExtension("GL_EXT_direct_state_access"); |
+ } else { |
+ fDirectStateAccessSupport = false; |
+ } |
+ |
+ if (kGL_GrGLStandard == standard && version >= GR_GL_VER(4,3)) { |
+ fDebugSupport = true; |
+ } else { |
+ fDebugSupport = ctxInfo.hasExtension("GL_KHR_debug"); |
+ } |
+ |
if (kGL_GrGLStandard == standard) { |
fES2CompatibilitySupport = ctxInfo.hasExtension("GL_ARB_ES2_compatibility"); |
} |
@@ -254,9 +281,7 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
// We only support v1.3+ of GL_NV_path_rendering which allows us to |
// set individual fragment inputs with ProgramPathFragmentInputGen. The API |
// additions are detected by checking the existence of the function. |
- glslCaps->fPathRenderingSupport = |
- ctxInfo.hasExtension("GL_EXT_direct_state_access") && |
- ((ctxInfo.version() >= GR_GL_VER(4, 3) || |
+ glslCaps->fPathRenderingSupport = ((ctxInfo.version() >= GR_GL_VER(4, 3) || |
ctxInfo.hasExtension("GL_ARB_program_interface_query")) && |
gli->fFunctions.fProgramPathFragmentInputGen); |
} |
@@ -1023,6 +1048,9 @@ SkString GrGLCaps::dump() const { |
r.appendf("Fragment coord conventions support: %s\n", |
(fFragCoordsConventionSupport ? "YES": "NO")); |
r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ? "YES": "NO")); |
+ r.appendf("Instanced drawing support: %s\n", (fInstancedDrawingSupport ? "YES": "NO")); |
+ r.appendf("Direct state access support: %s\n", (fDirectStateAccessSupport ? "YES": "NO")); |
+ r.appendf("Debug support: %s\n", (fDebugSupport ? "YES": "NO")); |
r.appendf("Multisample disable support: %s\n", (fMultisampleDisableSupport ? "YES" : "NO")); |
r.appendf("Use non-VBO for dynamic data: %s\n", |
(fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
@@ -1039,6 +1067,7 @@ GrGLSLCaps::GrGLSLCaps(const GrContextOptions& options, |
fDropsTileOnZeroDivide = false; |
fFBFetchSupport = false; |
fFBFetchNeedsCustomOutput = false; |
+ fBindlessTextureSupport = false; |
fAdvBlendEqInteraction = kNotSupported_AdvBlendEqInteraction; |
fFBFetchColorName = NULL; |
fFBFetchExtensionString = NULL; |
@@ -1063,6 +1092,7 @@ SkString GrGLSLCaps::dump() const { |
r.appendf("FB Fetch Support: %s\n", (fFBFetchSupport ? "YES" : "NO")); |
r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO")); |
+ r.appendf("Bindless texture support: %s\n", (fBindlessTextureSupport ? "YES" : "NO")); |
r.appendf("Advanced blend equation interaction: %s\n", |
kAdvBlendEqInteractionStr[fAdvBlendEqInteraction]); |
return r; |