Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 0c53006bd214e369efc471779b0f5ffcc8db878c..22fd053c1d46ab92c9db192302c2a9a87a864443 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -9,6 +9,7 @@ |
#include "GrGLCaps.h" |
#include "GrGLContext.h" |
+#include "glsl/GrGLSLCaps.h" |
#include "SkTSearch.h" |
#include "SkTSort.h" |
@@ -51,8 +52,7 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, |
fReadPixelsSupportedCache.reset(); |
- fShaderCaps.reset(SkNEW_ARGS(GrGLSLCaps, (contextOptions, |
- ctxInfo, glInterface, *this))); |
+ fShaderCaps.reset(SkNEW_ARGS(GrGLSLCaps, (contextOptions))); |
this->init(contextOptions, ctxInfo, glInterface); |
} |
@@ -450,7 +450,7 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
this->initConfigTexturableTable(ctxInfo, gli); |
this->initConfigRenderableTable(ctxInfo); |
- glslCaps->initShaderPrecisionTable(ctxInfo, gli); |
+ this->initShaderPrecisionTable(ctxInfo, gli, glslCaps); |
this->applyOptionsOverrides(contextOptions); |
glslCaps->applyOptionsOverrides(contextOptions); |
@@ -1078,46 +1078,6 @@ SkString GrGLCaps::dump() const { |
return r; |
} |
-//////////////////////////////////////////////////////////////////////////////////////////// |
- |
-GrGLSLCaps::GrGLSLCaps(const GrContextOptions& options, |
- const GrGLContextInfo& ctxInfo, |
- const GrGLInterface* gli, |
- const GrGLCaps& glCaps) { |
- fDropsTileOnZeroDivide = false; |
- fFBFetchSupport = false; |
- fFBFetchNeedsCustomOutput = false; |
- fBindlessTextureSupport = false; |
- fAdvBlendEqInteraction = kNotSupported_AdvBlendEqInteraction; |
- fFBFetchColorName = NULL; |
- fFBFetchExtensionString = NULL; |
-} |
- |
-SkString GrGLSLCaps::dump() const { |
- SkString r = INHERITED::dump(); |
- |
- static const char* kAdvBlendEqInteractionStr[] = { |
- "Not Supported", |
- "Automatic", |
- "General Enable", |
- "Specific Enables", |
- }; |
- GR_STATIC_ASSERT(0 == kNotSupported_AdvBlendEqInteraction); |
- GR_STATIC_ASSERT(1 == kAutomatic_AdvBlendEqInteraction); |
- GR_STATIC_ASSERT(2 == kGeneralEnable_AdvBlendEqInteraction); |
- GR_STATIC_ASSERT(3 == kSpecificEnables_AdvBlendEqInteraction); |
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(kAdvBlendEqInteractionStr) == kLast_AdvBlendEqInteraction + 1); |
- |
- r.appendf("--- GLSL-Specific ---\n"); |
- |
- 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; |
-} |
- |
static GrGLenum precision_to_gl_float_type(GrSLPrecision p) { |
switch (p) { |
case kLow_GrSLPrecision: |
@@ -1144,16 +1104,17 @@ static GrGLenum shader_type_to_gl_shader(GrShaderType type) { |
return -1; |
} |
-void GrGLSLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
- const GrGLInterface* intf) { |
+void GrGLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
+ const GrGLInterface* intf, |
+ GrGLSLCaps* glslCaps) { |
if (kGLES_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_VER(4, 1) || |
ctxInfo.hasExtension("GL_ARB_ES2_compatibility")) { |
for (int s = 0; s < kGrShaderTypeCount; ++s) { |
if (kGeometry_GrShaderType != s) { |
GrShaderType shaderType = static_cast<GrShaderType>(s); |
GrGLenum glShader = shader_type_to_gl_shader(shaderType); |
- PrecisionInfo* first = NULL; |
- fShaderPrecisionVaries = false; |
+ GrShaderCaps::PrecisionInfo* first = NULL; |
+ glslCaps->fShaderPrecisionVaries = false; |
for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
GrSLPrecision precision = static_cast<GrSLPrecision>(p); |
GrGLenum glPrecision = precision_to_gl_float_type(precision); |
@@ -1161,14 +1122,15 @@ void GrGLSLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
GrGLint bits; |
GR_GL_GetShaderPrecisionFormat(intf, glShader, glPrecision, range, &bits); |
if (bits) { |
- fFloatPrecisions[s][p].fLogRangeLow = range[0]; |
- fFloatPrecisions[s][p].fLogRangeHigh = range[1]; |
- fFloatPrecisions[s][p].fBits = bits; |
+ glslCaps->fFloatPrecisions[s][p].fLogRangeLow = range[0]; |
+ glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = range[1]; |
+ glslCaps->fFloatPrecisions[s][p].fBits = bits; |
if (!first) { |
- first = &fFloatPrecisions[s][p]; |
+ first = &glslCaps->fFloatPrecisions[s][p]; |
} |
- else if (!fShaderPrecisionVaries) { |
- fShaderPrecisionVaries = (*first != fFloatPrecisions[s][p]); |
+ else if (!glslCaps->fShaderPrecisionVaries) { |
+ glslCaps->fShaderPrecisionVaries = |
+ (*first != glslCaps->fFloatPrecisions[s][p]); |
} |
} |
} |
@@ -1177,13 +1139,13 @@ void GrGLSLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
} |
else { |
// We're on a desktop GL that doesn't have precision info. Assume they're all 32bit float. |
- fShaderPrecisionVaries = false; |
+ glslCaps->fShaderPrecisionVaries = false; |
for (int s = 0; s < kGrShaderTypeCount; ++s) { |
if (kGeometry_GrShaderType != s) { |
for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
- fFloatPrecisions[s][p].fLogRangeLow = 127; |
- fFloatPrecisions[s][p].fLogRangeHigh = 127; |
- fFloatPrecisions[s][p].fBits = 23; |
+ glslCaps->fFloatPrecisions[s][p].fLogRangeLow = 127; |
+ glslCaps->fFloatPrecisions[s][p].fLogRangeHigh = 127; |
+ glslCaps->fFloatPrecisions[s][p].fBits = 23; |
} |
} |
} |
@@ -1192,9 +1154,10 @@ void GrGLSLCaps::initShaderPrecisionTable(const GrGLContextInfo& ctxInfo, |
// the same as the vertex shader. Only fragment shaders were ever allowed to omit support for |
// highp. GS was added after GetShaderPrecisionFormat was added to the list of features that |
// are recommended against. |
- if (fGeometryShaderSupport) { |
+ if (glslCaps->fGeometryShaderSupport) { |
for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
- fFloatPrecisions[kGeometry_GrShaderType][p] = fFloatPrecisions[kVertex_GrShaderType][p]; |
+ glslCaps->fFloatPrecisions[kGeometry_GrShaderType][p] = |
+ glslCaps->fFloatPrecisions[kVertex_GrShaderType][p]; |
} |
} |
} |